識別 Samba 后台程序
Linux 服務器通常作為守護程序(daemon) 來實現,這一詞源於希臘神話,其中守護神(daemon)是超自然生物。Linux 守護程序在后台運行以便執行一些有用的任務。Samba 服務器套件由幾個守護程序組成,包括 smbd、nmbd 和 winbindd。swat 程序是另外一個 Samba 服務器,但是其通常都是從一個超級服務器運行,因此在技術上不是守護程序。
了解 smbd
smbd 程序提供 Samba 的大部分核心功能。其職責包括:
提供文件和打印機共享。此功能可以說是一個最重要的 Samba 職責,smbd 執行此功能。
驗證用戶。smbd 針對本地數據庫驗證用戶或傳遞驗證請求到另一台計算機。如果您的 Samba 服務器被配置為域控制器,則 smbd 還可從其他計算機響應驗證請求。(在 設置您的安全模式 中將描述工作組和域配置)。
提供時間服務。Samba 可以告訴其他計算機當前的時間;smbd 可處理此細節。
默認情況下,smbd 守護程序綁定到 TCP 端口 139 和 445。SMB 協議通過 TCP 上的 NetBIOS 使用端口 139,它是許多舊客戶端使用 SMB/CIFS 的方式。端口 445 在 TCP 服務上提供簡單的 SMB,它是訪問 Samba 服務器的新客戶端數。
由於這些職責的關鍵性質(尤其是,提供文件和打印機共享及驗證),smbd 可視為是 Samba 的核心。實際上,可以使用諸如 Samba 自己的 smbclient 等的程序連接到單獨運行 smbd 的計算機以便執行文件傳輸。然而一些客戶端依靠其他 Samba 守護程序提供的服務。
了解 nmbd
第二個關鍵的 Samba 守護程序是 nmbd。此服務器的主要職責是處理名稱相關的任務。您可以將其視為 Samba 自己版本的域名系統(DNS),只是它更易於配置且遠沒有 DNS 復雜。nmbd 執行的特定任務包括:
對名稱廣播進行響應。在操作的一個通用模式中,客戶端將名稱查詢廣播到整個網絡段。nmbd 服務器監聽此類廣播,並且在 Samba 配置為使用正在查詢的名稱時,該服務器將進行響應。在將其配置為另一計算機或網絡的代理時,它也會響應。
注冊 NetBIOS 名稱。為使 NetBIOS 名稱解析正常進行,計算機必須注冊其名稱,通過集中的 NetBIOS 名稱服務器(NBNS;又名 Windows Internet 名稱服務(Windows Internet Name Service [WINS]) 服務器)或通過廣播名稱並作為整體與網絡協商其權利。nmbd 負責執行此操作並與其他注冊名稱的計算機進行協商。
作為 NBNS 服務器運作。Samba 可被配置為 NBNS 系統,在這種情況下,nmbd 可處理這些職責。
作為主瀏覽器運行。用戶體驗 SMB/CIFS 網絡的一部分是瀏覽— 瀏覽網絡上的服務器的能力就像您瀏覽硬盤上的目錄。此功能依賴於主瀏覽器 的存在,它收集並傳播瀏覽列表。在 Samba 作為主瀏覽器運行時,它是從事此項工作的 nmbd。
正如此列表所示,nmbd 執行很多工作。雖然它們不涉及提供文件或打印機,但是許多任務都是任何 SMB/CIFS 服務器的重要部分,因此 nmbd 應被認為是 Samba 的重要部分。它通常通過分布的啟動腳本與 smbd 一起運行。
雖然大多數 nmbd 的功能都需要將其綁定到 TCP 端口 137,但是主瀏覽器職責涉及用戶數據報協議(User Datagram Protocol)端口 138。
了解 winbindd
第三個 Samba 守護程序是 Winbind 守護程序,即 winbindd。不同於 smbd 和 nmbd,winbindd 不為遠程計算機提供服務;相反,它作為 Windows®(或 Samba)域控制器與本地計算機自己的可插拔驗證模塊(Pluggable Authentication Modules)工具之間的接口,允許域控制器來托管 Linux 帳戶信息。
在許多分布上,winbindd 被安裝在與 Samba 的其余分布不同的包中 — 通常在稱為 winbind 或 winbindd 的包中。它還通常被分別發布。原則上,您可以在不運行 Samba 服務器或或甚至用作 SMB/CIFS 客戶端的計算機上運行 winbindd,除了 winbindd 是 SMB/CIFS 客戶端之外。不過,在實踐中,如果其正在運行 winbindd,那么您可能運行 Samba 服務器或使用 Linux 計算機作為 SMB/CIFS 客戶端。
設置您的安全模式
Samba 提供一些關於如何驗證用戶的選項。最重要的是 security 選項,它取五種可能的值:
Share。此安全模式嘗試模擬 Microsoft® Windows 9x/Windows Me 操作系統使用的驗證方法,其中忽略用戶名且密碼與共享關聯在一起。要做到這一點,Samba 嘗試將客戶端提供的密碼用於各種用戶名。
User。此安全模式是默認的,它使用用戶名和密碼進行驗證,這類似於 Linux 通常工作的方式。在現在系統的大多數情況下,密碼存儲於僅 Samba 加密的密碼數據庫中。
Server。如果您想要 Samba 遵從另一個服務器進行驗證,請使用此驗證方法。對於客戶端,雖然此方法看上去像用戶級驗證,但是 Samba 聯系通過 password server 參數指定的服務器來進行實際的驗證。
Domain。使用此方法,您可以完全加入 Windows 域,其看上去像針對客戶端的用戶級驗證。與服務器級別驗證不同,域驗證涉及更安全的域級別密碼交換。同時,完全加入域需要在 Samba 系統上或也可能在域控制器上運行額外的命令。
ADS。此驗證方法工作非常像域驗證;然而,其需要 Active Directory® Domain Services 域控制器。
作為一般規則,如果您的 Samba 服務器是 Windows 工作組(它是 SMB/CIFS 網絡的基本形式)的成員,那么用戶級驗證是最佳的選擇。工作組不同於域,主要是因為域提供域控制器,它是為域提供驗證服務的服務器。要使用域控制器,您必須使用服務器級別、域級別或 ADS 級別 security。服務器級別安全是最簡單的配置但最不安全,而 ADS 級別安全最難於配置但最安全。
要完全加入域以獲得域級別或 ADS 級別安全的,您必須在 smb.conf 文件的 [global] 部分中設置幾個選項:
password server = DOMCONT
domain logons = No
encrypt passwords = Yes
DOMCONT 系統是域控制器。您還必須在應該加入域的 Samba 服務器上鍵入以下命令:
# net join member -U adminuser
您還可能需要配置域控制器以便接受 Samba 服務器到域中。
共享級別安全已經過時;它的存在主要是為了為舊的無法理解用戶名的客戶端提供兼容性。它對於一些您可能想提供最少安全的共享類型(如打印機共享)也是有用的。因為 Linux 需要帳戶用於所有訪問,所以 Samba 嘗試針對一系列帳戶而提供的密碼直到獲得一個匹配或它們都失敗。這些帳戶包括:
訪客帳戶(通過 guest account 參數設置),如果 guest only = Yes
客戶端提供的用戶名(不是所有客戶端都提供一個,而是只有一些客戶端這樣做)
用於客戶端計算機的最后訪問的用戶名
被訪問的共享名稱
客戶端的 NetBIOS 名
通過 username 參數指定的任何用戶名