一、Samba基礎 1、 簡介 1).SMB協議 SMB(Server Message Block,服務信息塊)協議可以看作是局域網上的共享文件/打印機的一種協議,它可以為網絡內部的其它Windows和Linux機器提供文件系統、打印服務或是其他一些信息。 SMB的工作原理是讓NetBIOS(Win95網絡鄰居通信協議)與SMB這兩種協議運行在TCP/IP的通信協議上,且使用NetBIOS nameserver讓用戶的Linux機器可以在Windows的網絡鄰居裡被看到,所以就可以和Win95/NT主機在網絡上相互溝通,共享文件與服務了。 目前Microsoft正在開發一種新的文件和打印共享協議--CIFS(Common Internet Files System,通用網絡文件協議),該協議支持TCP/IP和DNS等協議,能在www上支持文件和打印共享。在CIFS下服務器實際上是DNS名,由主機名和域名組成。這種變化是從NetBIOS命令結構中分離出來的。目前CIFS還沒有得到廣泛的應用。現在在Linux和Win95/NT之間的文件共享注意還是SMB和NFS。 2).什麼是Samba Samba是用來實現SMB的一種軟件,由澳大利亞的Andew Tridgell開發,是一種在Linux(Unix)環境下運行的免費軟件。 通過使用Samba,Linux系統可以實現如下功能: 文件服務和打印服務(在Linux和Win95/NT之間系統之間提供打印機和磁盤的共享) 登陸服務器,使用Windows客戶能注冊到網絡上 作為主要域控制器和域中成員的功能 WINS服務器以及浏覽功能 支持SSL(Secure Socket Layer) 支持SWAT (Samba Web Administration Tool ) Samba除了支持Linux(Unix)和Win95/NT之外,還支持DOS、IBM OS/2、Macintosh 等操作系統。 在Samba的軟件包中所包括的組件參看表1-1: 表1-1 Samba軟件包的組成列表 2、Samba的記錄文件 Samba為smbd、nmbd和訪問Samba的客戶提供了下列記錄文件,分別記錄有關smbd、nmbd運行信息和每個客戶的訪問信息: 記錄smbd 信息 /var/log/samba/log.smb 記錄nmbd信息 /var/log/samba/log.nmb 記錄客戶訪問信息 /var/log/samba/log.%m 3、啟用Samba服務器 Samba的運行包含兩個後台守護進程:smbd和nmbd,它們是Samba的核心,在全部時間內運行。nmbd程序使得通過企圖計算機可以浏覽Linux服務器。Smbd守護進程在SMB軟件包到達網上時對它們進行處理,並且為使用或共享它的資源與Linux進行協調。如果指定的是一個文件,該資源就是一個文件;而一個打印機請求就要求訪問一台打印機。實際上,在請求訪問打印機時,Smbd把要打印的信息存儲到打印機隊列中;在請求訪問一個文件時,Smbd把數據發到內核,最後將它存到磁盤上。 你可以從inetd選擇啟動它們,但這種方法會使Samba變慢。建議使用下面命令可以啟動這兩個進程: /etc/rc.d/init.d/smb start /usr/sbin/samba start 如果想要在系統啟動時自動啟動samba,可以使用/usr/sbin/turboservice命令,選中其中的"SMB (Windows)File Services"。
二、Samba配置及使用 1、定制文件/etc/smb.conf 在安裝完Samba後,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由於SMB是一個非常復雜的協議,所以配置Samba的工作也是比較繁瑣的,大約有超過170條配置項出現在smb.conf文件中。 1).smb.conf的語法 smb.conf文件有一個清晰的語法結構,與Windows的*.ini文件十分類似。如下所示: 該文件被分成幾部分,每一部分都包括幾個參數,用來定義Samba輸出的共享及其詳細操作。 文件被分隔成若干節,每一節都由一個被方括號括起來的標識開始(例如,[global]、[home]、[printers]),每一個配置參數或是一個全局參數(影響或控制整個服務器),或是一個服務參數(影響或控制服務器提供的某項服務 )。 global部分定義的參數用來控制Samba的總特性。除global部分外,每一部分都定義了一個專門的服務。 你可以使用下面的語句來指定一個參數: name=VALUE name可以是一個單詞或者用空格隔開的多個單詞。VALUE可以是布爾值(ture或false;yes或no;1或0)、數字或字符串。 注釋以分號開頭,可以單獨一行,也可以跟在一條語句之後。 通過在一行的最後一個字符後加反斜槓"\"可以將一行分成多行。 每一部分的名字和參數都不區分大小寫,例如,參數browseable=yes與browseable=YES是完全等價的 2).smb.conf文件的功能 smbd和nmbd這兩個守護進程啟動時(通常為系統引導時)讀配置文件smb.conf,這一配置文件向這兩個守護進程說明輸出什麼共享、共享輸出給誰以及如何進行輸出等等。 因為安全問題是最重要的,所以你必須指定哪些計算機可以訪問這一共享,smb.conf文件可以很靈活的明確指定每一服務有哪些用戶可以訪問。隨著Linux網絡的增大,這一控制越來越重要。 3).smb.conf文件結構 smb.conf文件主要包括三部分: global(全局)參數 Directory shares (目錄共享)部分--包括標准的[home]部分 printer shares(打印共享)部分 其中,global參數用來設置整個系統的規則;[home]部分和[printer]部分是服務的特定例程,services(服務)這一術語是網絡客戶機共享或輸出的目錄和打印機的Samba術語。這些服務定義了哪些用戶可以訪問這些目錄和打印機以及如何訪問這些目錄和打印機。 清單1-1給出了smb.conf文件的一個簡單的例子。 清單1-1 smb.conf文件的一個簡單示例 [global] netbios name = FRODO workgroup = UAB-TUCC server string = John Blair's Linux Box security = user printing = lprng log file = /var/log/samba lock directory = /var/lock/samba [homes] comment = Home Directory browseable = no read only = no [printers] browseable = no guest ok = yes printable = yes 在 [global] 段中設置了主機名稱, 主機所在的工作組名稱和浏覽時可看到的對本機的描述。安全參數告訴 Samba使用"用戶級別"的安全保護方式。 SMB 有兩種安全模式: 共享級別, 將資源加密碼控制;用戶級別, 可以使用某一用戶的所有資源。 這裡不能詳細解釋兩種方式的微妙差別, 但大部分情況下, 你會想用用戶級別安全控制。 [global] 段中還定義了日志文件目錄和鎖定文件的位置。日志文件在解決故障和完善系統時是很有用的,鎖定文件可以阻止多個用戶同時修改相同的文件。 [homes] 段中的設置控制了每一個用主目錄的共享權限。comment 參數指定的字符串在你浏覽本機資源時出現在指定資源的旁邊。 browseable 參數控制一項服務是否能夠出現在網絡資源浏覽表中。這裡是一些非直覺的東西, browseable = no意味著這個目錄將在浏覽時顯示為要驗證的用戶名稱。 舉例來說, 指定 browseable = no, 當我浏覽這個 Samba 服務器時,我將看到一個名稱為 cuckoo 的共享目錄。當指定 browseable = yes 時, 我將看到一個名為 homes 和 cuckoo的共享目錄。設置 read only = no 將允許通過驗證的用戶對主目錄有寫入的權限。 但是, 如果他們的主目錄的 UNIX 權限 不允許寫入,那麼他們就沒有寫的權限。 無論 UNIX 的權限怎樣, 設置 read only = yes 後, 他們的主目錄是只讀的。 printing 命令描述了本地打印系統類型, 這可以讓 Samba 知道怎樣提交打印任務, 顯示打印隊列, 刪除打印任務和其它操作。 如果打印系統是 Samba 所不知道的, 你必須在每次執行打印操作時指明命令。 清單中[printing]一段配置允許任何能夠登錄到 Samba 服務器的用戶使用 printcap 中出現的 每一台打印機。 正常情況下,如果使用用戶級別安全控制, guest ok = yes 並不能授權每一個用戶(使用系統)。 每一個打印服務必須定義為 printable =yes。 下面的一段配置片斷增加了一個命名為 public 的共享目錄, 直接對匿名FTP目錄有只讀的 權限。 你必須在客戶機上建立打印機驅動程序。 對於Windows 95 和 Windows NT 客戶機, 你可以使用printer name 和 printer driver命令自動建立打印驅動。 [public] comment = Public FTP Directory path = /home/ftp/pub browseable = yes read only = yes 這段描述並不是解釋一些微妙的主題, 例如用戶級和共享級安全性的區別或者其它的授權認證主題。它僅僅讓我們看到了Samba這座冰山的一角。另一方面,這是一個良好的例子,從中我們可以了解產生一個簡單但可工作的smb.conf文件是多麼容易。 下面,我們舉另一個例子說明如何通過Samba把Linux的打印機共享給Windows機器。 為了共享Linux的打印機給Windows機器,必須確定Linux機器上的打印機已經設置好。如果能從Linux上打印,那麼設定Samba的打印機共享是很簡便的。只要根據自己的情況,對smb.conf文件有關打印的部分進行修改就可以了。在修改中唯一需要注意的是確保打印機的路徑要與/etc/printcap中的spool目錄相符合,然後就可以在Win95/NT上配置網絡打印機了(關於如何在Win95/NT上配置網絡打印機,本文不做介紹)。 4).標准smb.conf文件清單 在Samba的軟件包裡的example目錄中有一個缺省的配置文件smb.conf.defaults。我們可以對它做適當修改後拷貝到你的安裝目錄下的lib目錄裡,並改名為smb.conf。清單1-2是Samba系統提供的標准的配置文件。為方便讀者閱讀,本文翻譯了文件中的注釋並適當的添加了解釋。 清單1-