歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

用Samba實現文件服務器功能

 摘要    在中小型網絡、企業內部網中利用Linux建立文件服務器一個很好的解決方案,本文是一篇利用Samba構建文件服務器的簡明指南。  Linux 是一個優秀的操作系統,尤其是它的網絡功能,可以與各種操作系統輕松連接,實現多種網絡服務。由於Linux系統的高穩定性和可靠性,以及低廉的價格,使它受到越來越多用戶的青睐。在一些中小型網絡,或者企業的內部網中,利用Linux建立文件服務器是一個很好的解決方案。針對企業內部網中的絕大部分客戶機采用Windows的情況,我們可以通過使用Samba來實現文件服務器功能。       Samba是在Linux及Unix上實現SMB(Server Message Block)協議的一個免費軟件,由服務器及客戶端程序構成。這裡我們只介紹服務器程序。       我們首先介紹一些SMB協議的情況。SMB協議是建立在NetBIOS協議之上的應用協議,是基於TCP138、139兩個端口的服務。NetBIOS出現之後,Microsoft就使用NetBIOS實現了一個網絡文件/打印服務系統。這個系統基於NetBIOS設定了一套文件共享協議,Microsoft稱之為SMB(Server Message Block)協議。這個協議被用於Lan Manager和Windows服務器系統中,實現不同計算機之間共享打印機和文件等。因此,為了讓Windows和Unix/Linux計算機相集成,最好的辦法就是在Unix/Linux計算機中安裝支持SMB協議的軟件。這樣使用Windows的客戶端不需要更改設置,就能像使用Windows NT或windows 2000服務器一樣,使用Unix/Linux計算機上的共享資源了。Samba使SMB協議運行在NetBIOS協議上,並且使用Windows的NetBEUI協議讓Unix/Linux服務器可以在Windows的網絡鄰居上被訪問到。       Samba的服務器程序可以實現以下主要功能:       ◆ 文件及打印共享;     ◆ 計算機名與IP的解悉;     ◆ WINS服務的支持;     ◆ 用戶權限設置(如果配合Linux 的Quota還可以實現用戶磁盤空間配額)。     安裝      Samba有兩種安裝方式:       1.安裝RPM包       我們以Red Hat為例:         mount -t iso9660 /dev/cdrom  /mnt/cdrom    cd /mnt/cdrom/RedHat/RPMS    rpm -ivh Samba*.rpm        或者升級安裝     rpm -Uvh Samba*.rpm           2.安裝Samba源代碼         tar -zxvf Samba*.tar.gz    cd /Samba/src    ./configure    ./ make dep    ./make    ./make install         配置      Samba安裝後,可以看見/etc/samba這樣一個目錄,裡面存放著與Samba相關的一些文件,如lmhosts、smb.conf、smbpasswd 等。smb.conf是Samba的核心,一切的功能配置都在這個文件中,它有許多不同的配置選項。為避免混淆,我們要介紹一些對於Samba 正確操作必不可少的參數設置。在配置這個文件前先介紹一下Samba中的環境變量。         %S代表共享名;    %P代表共享的主目錄;    %u代表共享的用戶名;    %g代表用戶所在的工作組;    %U代表用戶名;    %G代表當前對話的用戶的主工作組;    %H代表用戶的共享主目錄;    %v代表Samba服務器的版本號;    %h代表Samba服務機器的主機名;    %m代表客戶機NetBIOS名稱;    %L代表服務器NetBIOS名稱;    %M代表客戶機的主機名;    %N代表NIS服務器名;    %p代表NIS服務的Home目錄;    %I代表客戶機的IP;    %T代表系統當前日期和時間。           使用cd 命令進入smb.conf 所在的目錄,啟動常用的文本編輯器,例如vi、emacs等等。       1.smb.conf的全局設置         [global]    # workgroup = NT-Domain-Name or Workgroup-Name  server string = MY Samba Server    hosts allow = 192.168.1. 192.168.2. 127.    printcap name = /etc/printcap    load printers = yes/no    printing = bsd       第一行告訴 Samba 我們定義該Samba服務器所在的工作組名或者域名;第二行告訴 Samba對於此服務器的描述。接下來可以設置允許訪問的網絡和主機IP。上例就允許IP為192.168.1.0/24、192.168.2.1/24及127.0.0.0/8的主機訪問該服務器。緊接著是在/etc/printcap這個文件中取得打印機的描述信息,並設定是否自動共享打印機。下一行則是定義了打印系統的類型,其缺省值是bsd,並且有lprng、sysv、plp、bsd、aix和hpux等幾個可選項。         log file = /var/log/samba/log.%m    max log size = 0         上面這兩行則是Samba日志的相關定義。其記錄文件的位置是放在/var/log/samba/%m.log。後面的一條是定義日志記錄文件的大小,單位是KB,如果是0的話就不限大小。      2.Samba安全性設置       Samba不使用標准Unix口令來認證用戶。因為當Windows發送以明文表示的口令時, 其都以加密形式發送 SMB/CIFS口令,這樣就與標准Unix 口令散列不兼容了。換句話說,Samba沒有辦法使用標准Unix PassWord散列來驗證 Windows 加密的口令是否正確。但幸運的是,Samba提供了許多方法來將這兩個數據庫同步。下面介紹Samba安全性的設置。       guest account = nobody    security = user    password server =     encrypt passwords = yes/no        其中第一行定義Samba缺省的用戶賬號,這個賬號必須在/etc/passwd中。第二行則聲明了Samba的安全級別,分為share、user、server和domain四級。它們分別對應的驗證方式為:share是沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源;user是Samba的默認配置,要求用戶在訪問共享資源之前必須先提供用戶名和密碼進行驗證;server和user安全級別類似,但用戶名和密碼是遞交到另外一個服務器去驗證,如果遞交失敗,就退到user安全級;domain這個安全級別要求網絡上存在一台Windows的域控制器,Samba把用戶名和密碼遞交給它驗證。需要注意的是都要求此用戶是本Linux機器上的系統賬戶。當前面的security設定為server或domain的時候,才有必要設定password server。它可以是域名,也可以是機器的IP。encrypt passwords這個選項則設置是否對密碼進行加密。Samba本身有一個密碼文件/etc/samba/smbpasswd,如果不對密碼進行加密,則在驗證期間客戶機和服務器之間傳遞的是明文密碼。        smb passwd file = /etc/samba/smbpasswd    username map =/etc/smbusers      以上兩行分別設置了存放Samba用戶密碼的文件是/etc/samba/smbpasswd,以及指定用戶映射文件是/etc/samba/smbusers。如果我們在這個文件裡面指定一行root = administrator,客戶機的用戶是administrator,連接時會被當作用戶root看待。       3.網絡和主機的性能設置       除了以上的用戶權限設置外,還有關於網絡和主機的性能設計。       include = /etc/smb.conf.%m      指定對不同機器的連接采用不同的配置文件。一般為了管理使用/etc/samba/smb.conf.%m,采用Samba變量,把配置文件和客戶機的NetBIOS名稱關聯起來,能很容易地控制這些客戶機的權限和設置。       socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192      這是網絡Socket方面的一些參數,能實現最好的文件傳輸性能。       interfaces = 192.168.12.2/24 192.168.13.2/24      接口選項在機器碰巧有多個網絡接口時特別有用,它可以指定在哪個網絡接口上使用。         remote announce = 192.168.1.255 192.168.2.44      上面命令指定了浏覽列表同步信息從哪裡取得,例如可以從192.168.2.44或整個子網中獲得。       4.系統的兼容性設置       os level = 33      上面這個參數值是個整數,決定了nmbd是否有機會成為本地廣播區域工作組裡的本地主浏覽器。默認值是零,則意味著nmbd失去浏覽選擇。如果要nmbd有機會成為本地主浏覽器的話,可以設為33。       domain master = yes/no      用戶設置上面參數可以讓nmbd成為一個域控制器,取得域的各個列表,並將整個域的列表遞交給本地浏覽器。         preferred master = yes/no     preserve case = yes/no    short preserve case = yes/no    default case = lower/upper    case sensitive = yes/no         以上幾個參數分別指定nmbd是否是工作組裡首要的主浏覽器。如果指定為yes,nmbd啟動時候強制選擇一個浏覽;接下來的幾項是用戶指定拷貝DOS文件的時候是否保持大小寫,缺省是no,也就是不保持。所有DOS文件的缺省是大寫,小寫不敏感,因此這項一般設置為no。       5.主機名的查詢設置       從根本上說,可以把Wins看做是本地的動態 DNS 數據庫。當Samba作為Wins服務器運行的時侯,同一子網上每個與Windows 兼容的機器都會向Samba注冊它的IP地址和NetBIOS名稱(又稱“計算機名”)。這可以讓Windows 機器使用Samba的Wins數據庫來請求特定NetBIOS名稱的IP地址。         domain controller =     domain logons = yes    name resolve order = wins lmhosts bcast    wins support = yes    wins server = w.x.y.z      以上參數告訴用戶主域控制器名,說明了登陸時是否以域模式登陸,指定了把服務器名轉化成IP的解析順序和是否提供Wins服務支持,並提供Wins服務器的IP地址。       6.特定內容設置       在smb.conf文件中,一般沒有對目錄設定特定內容。當用戶發出服務請求時,就在smb.conf文件的其它部分查找有特定內容的服務。如果沒有發現這些服務,並且提供了homes段時,那麼就搜索密碼文件得到用戶的Home目錄。通過homes段,Samba可以得到用戶的Home目錄並使之共享。下面是這個段的最基本的幾個設置。         [homes]      comment = Home Directory      browseable = yes      writable = yes      [public]    comment = Public Stuff      path = /home/samba      public = yes      writable = yes      printable = no      write list = @staff           其中[]裡面的public指定共享名,一般就是網絡鄰居裡面可以看見的文件夾的名字。comment指的是對共享的備注。path指定共享的路徑,其中可以配合samba變量使用。這樣如果一台機器的NetBIOS名字是nmslinux,它訪問public這個共享的時候就進入/home/samba目錄。allow hosts和deny hosts與前面全局設置的方法一樣,這裡不再提及。writeable指定了這個目錄缺省是否可寫,也可以用readonly = no來設置可寫。user設置所有可能使用該共享資源的用戶,也可以用@group代表group這個組的所有成員。valid users指定能夠使用該共享資源的用戶和組。invalid users指定不能夠使用該共享資源的用戶和組。read list指定只能讀取該共享資源的用戶和組。write list指定能讀取和寫該共享資源的用戶和組。       7.其它參數設置       admin list指定能管理該共享資源(包括讀寫和權限賦予等)的用戶和組。       public指明該共享資源是否能給游客賬號訪問,所以有的配置文件中出現guest ok = yes其實和public = yes是一樣的。       hide dot files指明是不是像Unix那樣隱藏以“.”開頭的文件。       create mode指明新建立的文件的屬性,一般是0755。     directory mode指明新建立的目錄的屬性,一般是0755。       sync always指明對該共享資源進行寫操作後是否同步操作。       short preserve case指明忽略長短文件名。       preserve case指明保持文件名大小寫。       case sensitive指明是否對大小寫敏感,一般選no。       mangle case指明混合大小寫。       default case指明缺省的文件名是全部大寫還是小寫。       force user強制建立文件的屬主是誰。如果有一個目錄,讓guest可以寫,那麼guest就可以刪除。如果用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了。       wide links指明是否允許共享外符號連接,比如共享資源裡面有個連接指向非共享資源裡面的文件或者目錄,如果設置wide links = no將使該連接不可用。       max connections = n設定同時連接數是n。       delete readonly指明能否刪除共享資源裡被定義為只讀的文件。     smb.conf配置舉例      下面就以我的計算機的smb.conf配置來舉例(如圖1)。      圖1        # Samba config file created using SWAT    # from nms.sjbj.net.cn (127.0.0.1)    # Date: 2002/07/17 02:43:48    # Global parameters    [global]   workgroup = SJBJ.NET.CN   netbios name = NMSLINUX   server string = nmslinux(Samba Server)   encrypt passwords = Yes     log file = /var/log/samba/%m.log   max log size = 0   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192   dns proxy = No   printing = lprng      [homes](如圖2)   comment = Home Directories   valid users = %S   read only = No   create mask = 0664   directory mask = 0775   browseable = No      圖2      [shared](如圖3、如圖4)   path = /home/smb.shared   read only = No   guest ok = Yes         圖4      控制服務器的運行:         # /etc/rc.d/init.d/smb start (開啟服務器)    # /etc/rc.d/init.d/smb stop (關閉服務器)           增加Samba用戶         # useradd new    # passwd new    #smbadduser new:new    #smbpasswd new      或者       #smbadduser root:root    #smbpasswd root      通過以上配置,我們就可以在一個局域網內建立自己的文件服務器。        




 



Copyright © Linux教程網 All Rights Reserved