歡迎您光臨本站 註冊首頁

Samba計劃文檔

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  Samba小組
編譯:meaculpa

中文譯稿聲明:

該文檔是Samba軟體的一部分,受GNU GPL保護,使用時請注意版權問題;由於譯者水平有限,錯誤之處在所難免,希望各位讀者來信指正,由此產生的一切後果,本人概不負責。


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

概要
本文檔彙集了Samba文檔歷年來的HOWTOs。我試圖確保所有內容都是最新的,但有時一個人維護不了這麼大的項目。你可以在http://www.samba.org/的「Documentation」找到這份文檔的最新版本,有更新的話寄給jerry@samba.org。

乾杯,jerry

目錄表
1. 如何安裝並測試Samba
1.1. Step 0: 閱讀手冊頁
1.2. Step 1: 編譯二進位
1.3. Step 2: 所有關鍵步驟
1.4. Step 3: 建立配置文件
1.5. Step 4: 用testparm測試你的配置文件
1.6. Step 5: 啟動smbd和nmbd進程
1.6.1. Step 5a: 從inetd.conf啟動
1.6.2. Step 5b. 可選法:以後台進程啟動
1.7. Step 6: 嘗試列出伺服器可獲得之共享項
1.8. Step 7: 嘗試從UNIX客戶端建立連接
1.9. Step 8: 嘗試從DOS、WfWg、Win9x、WinNT、Win2k、OS/2及其它客戶端建立連接
1.10. 如不工作咋辦?
1.10.1. 診斷問題
1.10.2. 範圍ID
1.10.3. 選擇協議級別
1.10.4. 從UNIX向PC客戶端進行列印
1.10.5. 鎖定
1.10.6. 映射用戶名
1.10.7. 其它字符集
2. Samba 2.x中的LanMan和NT口令加密
2.1. 介紹
2.2. 工作原理
2.3. 重要的安全性說明
2.3.1. SMB加密的好處
2.3.2. 非加密口令的好處
2.4. smbpasswd文件
2.5. smbpasswd命令
2.6. 設定Samba支持LanManager加密
3. 在Samba中配置微軟分散式文件系統樹
3.1. 介紹
3.1.1. 說明
4. Samba 2.2.x中的列印支持
4.1. 介紹
4.2. 配置
4.2.1. 建立[print$]項
4.2.2. 為現有印表機設定驅動程序
4.2.3. 支持大量印表機
4.2.4. 通過Windows NT APW添加新印表機
4.2.5. Samba和印表機埠
4.3. Imprints工具包
4.3.1. 什麼是Imprints?
4.3.2. 建立印表機驅動程序包
4.3.3. Imprints伺服器
4.3.4. 客戶端安裝程序
4.4. 從Samba 2.0.x向2.2.x遷移
5. Samba 2.x中的security = domain選項
5.1. 把Samba 2.2添加到NT域
5.2. Samba和Windows 2000域
5.3. 為什麼比security = server選項更好?
6. 把Samba 2.2配置成主域控制器
6.1. 說明
6.2. 配置Samba域控制器
6.3. 建立機器信任賬號並把客戶添加到域中
6.4. 常見問題及錯誤
6.5. 系統策略及配置文件
6.6. 其它可獲得的幫助
6.6.1. 鏈接及類似資源
6.6.2. 郵件列表
6.7. DOMAIN_CONTROL.txt:Samba & Windows NT域控制
7. 用Winbind在Windows NT與UNIX間進行統一登錄
7.1. 概要
7.2. 介紹
7.3. Winbind的功能
7.3.1. 使用目標
7.4. winbind如何工作
7.4.1. Microsoft遠程過程調用
7.4.2. 名字服務切換
7.4.3. 可插式驗證模塊
7.4.4. 用戶及組ID的分配
7.4.5. 緩存結果
7.5. 安裝及配置
7.6. 限制
7.7. 結語
8. UNIX許可權位和Windows NT訪問控制表
8.1. 用NT安全對話框瀏覽和修改UNIX許可權
8.2. 如何瀏覽Samba共享項上的文件許可權
8.3. 瀏覽文件所有權
8.4. 瀏覽文件或目錄許可權
8.4.1. 文件許可權
8.4.2. 目錄許可權
8.5. 修改文件或目錄許可權
8.6. 使用創建掩碼選項
8.7. 使用文件屬性映射
9. OS2客戶HOWTO
9.1. 常見問答集
9.1.1. 如何把OS/2 Warp Connect或OS/2 Warp 4配置成Samba的客戶端?
9.1.2. 如何把How can I configure OS/2 Warp 3 (非Connect版)、OS/2 1.2、1.3或2.x配置成Samba的客戶端?
9.1.3. 把OS/2(任何版本)作為客戶端還有其它的問題嗎?
9.1.4. 如何讓OS/2客戶下載印表機驅動程序呢?
10. 中文翻譯版致謝

--------------------------------------------------------------------------------

第1章. 如何安裝並測試Samba
1.1. Step 0: 閱讀手冊頁
Samba發布版中所帶的手冊頁包含了大量有用的信息,如果你不知道怎樣閱讀它們,可以試試下面的命令:

$ nroff -man smbd.8 | more

在Samba的網站http://www.samba.org可以找到其它的資源。


--------------------------------------------------------------------------------

1.2. Step 1: 編譯二進位
先運行source目錄中的./configure 程序。它會自動根據你的操作系統情況來對Samba進行配置,如果你有特殊要求可以運行:

root# ./configure --help

這樣就可以看到想要的特殊選項。然後,再執行:

root# make

這樣就開始創建二進位程序。當編譯成功你就可以用:

root# make install

來安裝二進位程序和手冊頁了。還可以用下面的命令分別安裝二進位程序和/或手冊頁:

root# make installbin



root# make installman

注意,如果你正在對以前的版本進行升級,那麼原來老版本的二進位程序已經更名為帶「.old」擴展了。如果你發現當前版本有問題,可以用下面的命令退回到以前的版本:

root# make revert


--------------------------------------------------------------------------------

1.3. Step 2: 所有關鍵步驟
在這一步你必須為自己準備好一杯咖啡或其它刺激性的飲料。安裝過程有時很複雜,所以可能會需要這樣的東西。如果你以前安裝過Samba則可以跳過這一步。


--------------------------------------------------------------------------------

1.4. Step 3: 建立配置文件
在發布包的examples子目錄里有一份配置文件的樣本。我建議你仔細閱讀這個文件,看看各選項在實際使用中是如何搭配的。所有選項的信息請參見手冊頁。

下面是最簡單實用的配置文件:

[global]
workgroup = MYGROUP

[homes]
guest ok = no
read only = no


通過這樣的配置,伺服器上的用戶只要用他們的賬號就可能通過伺服器與自己的主目錄進行連接。(注意工作組也可以設置為Samba要加入的工作組名,請參見BROWSING.txt中的內容)

注意用make install不會安裝smb.conf文件,你需要自己建立這個文件。(可以從發布包的examples/子目錄里拷嘛)

然後把這個文件放到Makefile文件中指定的相應目錄里(預設查找/usr/local/samba/lib/目錄)。

關於設置[homes]共享項的安全性請參考UNIX_SECURITY.txt文件。


--------------------------------------------------------------------------------

1.5. Step 4: 用testparm測試你的配置文件
用testparm程序測試smb.conf文件非常重要。如果testparm運行OK就會列出可裝載的服務項,否則會給出出錯信息。在繼續之前請確保它運行OK,並且服務項都符合要求。


--------------------------------------------------------------------------------

1.6. Step 5: 啟動smbd和nmbd進程
你必須選擇是以後台進程方式還是從inetd里啟動smbd和nmbd,注意二者只能選其一。要麼把它們放到inetd.conf,然後由inetd根據需要來啟動;要麼從命令行或從/etc/rc.local里以後台進程方式啟動。參見手冊頁中有關的命令行選項,特別要注意的是啟動Samba的賬號,通常必須是root。

以後台進程方式啟動smbd和nmbd的主要優勢是,對初始化連接請求的響應要更快一點,不過這並不是個太大的問題。


--------------------------------------------------------------------------------

1.6.1. Step 5a: 從inetd.conf啟動
注意:如果你用NIS或NIS+來分發服務映射表的話,就會與以下方法有所不同。

找到/etc/services中所定義的埠139/tcp。如沒有就把下面這行加進去:

netbios-ssn 139/tcp

類似的,還應該有如下這樣的埠137/udp定義:

netbios-ns 137/udp

接著編輯/etc/inetd.conf並加入下面這兩行:

netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd
netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd


各種UNIX版本中的/etc/inetd.conf其語法可能也不同。參考一下該文件中其它項目的格式。

注意:有些UNIX的/etc/services已經包含了諸如netbios_ns這樣的項目(小心下劃線)。你必須編輯/etc/services或者/etc/inetd.conf使它們一致。

注意:在很多系統上你必須使用smb.conf中的「interfaces」選項來指定系統介面的IP地址及掩碼。如果你不知道網路的廣播地址,請以root身份運行ifconfig。nmbd會在運行時嘗試檢測廣播地址,但在有些系統上這樣做就會失敗。如有必要請參見「testing nmbd」部分獲得查找方法。

!!!警告!!!多數UNIX的inetd.conf只接受大約5個命令行參數。也就是說你不應該在選項和參數間用太多空格,或者使用一個腳本並讓它從inetd啟動。

接著重新啟動inetd,為此你只要給它發信HUP信號就可以了。如果你已安裝了一個以前版本的nmbd,那還需要把它殺一下。


--------------------------------------------------------------------------------

1.6.2. Step 5b. 可選法:以後台進程啟動
要以後台進程方式來啟動伺服器,應該創建一個如下這樣的腳本,並起名為諸如startsmb。

  #!/bin/sh
/usr/local/samba/bin/smbd -D
/usr/local/samba/bin/nmbd -D



然後用chmod +x startsmb這個命令使它可執行。當然你可以手工運行startsmb或者從/etc/rc.local啟動。給nmbd和smbd各發一個殺進程信號就可以使它們停止運行。

注意:如果你用的是SVR4風格的init系統的話,可以改一下examples/svr4-startup這個腳本以使它適用於你的系統。


--------------------------------------------------------------------------------

1.7. Step 6: 嘗試列出伺服器可獲得之共享項
$ smbclient -L yourhostname

用上面這個命令,就可以得到一份伺服器上可獲得的共享項列表,不然的話就是設置上出了什麼問題。注意,這個方法也可以用於查看其它LanManager客戶端(如WfWg)可獲得的共享信息。

如果選用了用戶級安全,則Samba會在列出共享列表前要求你輸入口令。詳情請參見smbclient的手冊頁。(你可以在命令行上加入選項-U%來強迫它列出共享列表,但對於非Samba伺服器就不能這麼做了。)


--------------------------------------------------------------------------------

1.8. Step 7: 嘗試從UNIX客戶端建立連接
$ smbclient //yourhostname/aservice

命令中的yourhostname應該是安裝了smbd程序的主機名。而aservice就是在smb.conf文件中定義了的服務項。如果在smb.conf中定義了[homes]段的話可以試著用你的用戶名來連接。例如,如果你的UNIX主機是bambi,而你的用戶名是fred的話,該命令就應該是:

$ smbclient //bambi/fred


--------------------------------------------------------------------------------

1.9. Step 8: 嘗試從DOS、WfWg、Win9x、WinNT、Win2k、OS/2及其它客戶端建立連接
要裝載磁碟的話:

C:\WINDOWS\> net use d: \\servername\service

要列印的話:

C:\WINDOWS\> net use lpt1: \\servername\spoolservice

C:\WINDOWS\> print filename

至此,你已經安裝成功,否則請向我彙報bug!


--------------------------------------------------------------------------------

1.10. 如不工作咋辦?
如果你萬事不順並開始考慮「是誰寫了這一大堆的垃圾」的話,我建議你再做一次step 2(或多次),直到你平靜下來。

然後你可以去讀一下DIAGNOSIS.txt和FAQ。如果還是卡住的話請試一下郵件列表和新聞組(詳情參見README)。Samba已經在世界上數千個站點成功安裝,所以可能已經有人已經遇到並解決了你的問題。你還可以到WWW站點去查一下Samba-digest發布的消息。

當你修正了什麼問題,請給我發回更新的文檔或源代碼,以方便後來人。


--------------------------------------------------------------------------------

1.10.1. 診斷問題
如果你有安裝方面的問題請參考DIAGNOSIS.txt,看看能否找到該問題。


--------------------------------------------------------------------------------

1.10.2. 範圍ID
預設情況下Samba會用一個空的範圍ID。這樣的話,所有的windows機器也必須有一個空範圍ID。如果你真想用非空的範圍ID,就需要在nmbd、smbd和smbclient命令中使用-i 選項,不過這樣一來所有的機器都必須具有相同的設定。不推薦使用範圍ID。


--------------------------------------------------------------------------------

1.10.3. 選擇協議級別
SMB協議有很多別名,現在Samba支持5種,它們分別是CORE、COREPLUS、LANMAN1、LANMAN2和NT1。

你可以在smb.conf文件中選擇支持最高級的協議。預設為NT1,對大多數站點來說這是最合適的。

以前一些版本的Samba必須使用COREPLUS,現在已經修正了這種限制,而且已經不太需要使用低於LANMAN1的協議了。保留COREPLUS只是兼容一些少數情況,如WfWg要在該協議中保持口令的大小寫格式,而在LANMAN1、LANMAN2或NT1下所有的口令在被發送前都轉換為大寫,所以在某些情況下你可能要強制使用「password level=」選項。

使用LANMAN2和NT1主要的好處是支持一些客戶的長文件名(如smbclient、Windows NT或Win95)。

詳情請參見smb.conf(5)手冊頁。

注意:如要支持列印隊列報表,則在WfWg下必須用TCP/IP作為預設協議。如果在有些系統上把NetBEUI作為預設的話,就會打斷列印隊列報表,這大概是WfWg的一個bug。


--------------------------------------------------------------------------------

1.10.4. 從UNIX向PC客戶端進行列印
要從一台UNIX主機使用smb伺服器上的印表機,就需要編譯smbclient程序。然後還需要安裝「smbprint」腳本。詳情請閱讀smbprint的使用說明。

另外還有一個具有同樣功能的SYSV風格腳本smbprint.sysv,它也有使用說明。


--------------------------------------------------------------------------------

1.10.5. 鎖定
有時鎖定會產生一些麻煩。

SMB伺服器要實現兩種類型的鎖定。第一種是「記錄鎖定record locking」,它允許一個客戶鎖定一個打開文件的一段位元組;第二種就是「拒絕模式deny modes」(譯者註:也稱「共享模式」),它在打開文件時指定的。

Samba使用UNIX系統調用fcntl()來支持「記錄鎖定」。而通常實現的方法是用rpc來調用伺服器上運行的rpc.lockd進程。不幸的是rpc.lockd實現問題太多了,特別是要與其他版本進行對話的情況。rpc.lockd崩潰並不是什麼稀罕事兒。

還有一個問題是,把PC客戶端產生的32位鎖定請求轉換為多數UNIX所支持的31位請求。但很多PC應用程序(典型的如OLE2應用)使用位元組範圍(其中最高位為標誌位)的方式進行工作。Samba嘗試通過轉換來支持這類應用程序,並且這樣的轉換被證明是相當成功的。

嚴格意義上的SMB伺服器應該在每次讀寫被調用文件之前檢查其鎖定情況。但fcntl()按上述方式來工作速度可能比較慢,而且會使rpc.lockd過載。當然這幾乎也是不必要的,如果鎖定對客戶來說非常重要的話,他們應該在讀寫之前獨立生成鎖定調用。預設情況下,Samba只在客戶明確要求時才生成鎖定調用,但如果你設置了「strict locking = yes」選項的話,它會在每次讀寫時生成鎖定調用。

你還可以使用「locking = no」完全禁止記錄鎖定。用於那些不支持或不需要鎖定的共享項(如cdrom)。此時,Samba會向客戶端返回一個偽造的代碼。

第二種鎖定叫「拒絕模式」。它是在應用程序打開文件並決定允許的訪問類型時設置的。客戶端可以請求的模式有DENY_NONE、DENY_READ、DENY_WRITE或DENY_ALL。另外還有特殊兼容模式DENY_FCB和DENY_DOS。

在那些負載沉重的、執行共享模式代碼很慢的伺服器上,可以用「share modes = no」選項禁止共享模式。如果你的操作系統支持的話,可以使用共享內存加快共享模式的執行,詳情參見Makefile文件中的FAST_SHARE_MODES選項。


--------------------------------------------------------------------------------

1.10.6. 映射用戶名
要映射PC及UNIX伺服器的用戶名,可以去看一下smb.conf中「username map」選項。詳情參見smb.conf的手冊頁。


--------------------------------------------------------------------------------

1.10.7. 其它字符集
如果文件名使用重音字元(如德語、法語或斯堪的納維亞語)有問題,那麼最好去看一下smb.conf中的「valid chars」選項以及examples目錄中的validchars軟體包。


--------------------------------------------------------------------------------

Chapter 2. Samba 2.x中的LanMan和NT口令加密
2.1. 介紹
Samba兼容LanManager和Windows NT口令加密。

本文描述了SMB口令加密演算法的工作原理,並給出了建議,請仔細閱讀。


--------------------------------------------------------------------------------

2.2. 工作原理
LanManager加密與UNIX口令加密稍微有些相似。SMB伺服器使用一個存放用戶口令散列值的文件,該文件的建立過程為:取得用戶的明文口令,將首字母轉為大寫,然後要麼截短到,要麼用空位元組補足14個位元組長。然後把這14個位元組值作為兩個56位的DES密鑰,用來產生出一個『魔術』8位元組值,最後形成一個16位元組的值,並由伺服器及客戶機保存,這就是「散列口令」。

Windows NT的加密機制就更高級了,它對用戶口令的Unicode碼進行MD4散列運算,而且也產生一個16位元組的不可逆散列值。

當客戶端(LanManager、Windows for WorkGroups、Windows 95或Windows NT)要裝載一個Samba驅動器(或使用Samba資源),就先發出一個連接請求並與伺服器協商要使用的協議。Samba伺服器在回復時產生一個8位元組的隨機值(這個值稱為「質詢」),並把它發回客戶端,然後再保存起來。注意,對於每個連接其質詢都是不一樣的。

然後,客戶端對上述16位元組散列口令再加上5個空位元組,把結果作為三個56位的DES密鑰,再用這三個密鑰去加密8位元組的質詢值,最後形成一個24位元組的「響應」值。

客戶端通過SMB調用SMBsessionsetupX(當選用用戶級安全時)或SMBtconX(當選用共享級安全時)把響應值發給Samba伺服器。當使用Windows NT協議級時,用戶口令的散列值與響應值都要經過上述的計算,並通過SMB調用發給伺服器,所以就有兩個24位元組的值。

Samba伺服器用自己保存的16位元組散列口令值(從smbpasswd取得,該文件在後面描述)和質詢值重複以上計算,然後檢查計算結果與客戶端提供的24位元組值是否匹配。如果匹配,那麼允許客戶端進行訪問,否則拒絕訪問。

注意,Samba伺服器不了解也不保存用戶口令的明文值 - 只是用它來進行加密。同樣,這個明文口令或散列值也不在網路上傳輸,這樣就增強了安全性。


--------------------------------------------------------------------------------

2.3. 重要的安全性說明
從表面上看,UNIX和SMB的口令加密技術很相似,其實區別很大。在UNIX中,登錄時通常通過網路發送明文口令,這很糟糕。而SMB加密機制雖然不通過網路發送明文口令,但它把16位元組散列值保存在磁碟上,這也很糟糕。原因何在?因為該16位元組散列值與「口令」等價:雖然不能從它那裡得到用戶的口令,但可以把它們用在一個經過修改的客戶端程序中,以便訪問伺服器。雖然這需要一定的攻擊技術,但卻是完全可能的。所以請妥善保護smbpasswd。

當然了,理想的情況是,我們希望既不在網路上也不在磁碟上操作明文口令。遺憾的是這不可能,因為Samba要與其它SMB系統(Win、WfWg、Win95等)保持兼容。

警告
注意,Windows NT 4.0 Service pack 3改變了預設的驗證機制,不再在線發送明文口令。解決方法是,要麼讓Samba使用加密口令,要麼編輯NT的註冊表,重新允許使用明文口令。詳情請參見WinNT.txt文檔。

具有同樣情況的微軟操作系統還有:

安裝了基本網路重定向功能的MS DOS Network client 3.0

更新了網路重定向功能的Windows 95

Windows 98 [se]

Windows 2000

注意:當前,微軟所有的SMB/CIFS客戶端都支持通過SMB質詢/響應機制進行驗證。允許使用明文口令並不會禁止客戶參與加密驗證的能力。



--------------------------------------------------------------------------------

2.3.1. SMB加密的好處
不通過網路傳送明文口令。使用網路嗅探器無法記錄傳輸的口令。

NT必須使用SMB加密口令同伺服器進行通信。如果該伺服器還在使用用戶級安全模式,它會拒絕瀏覽伺服器。它在每次連接時堅持要用戶輸入口令,當然這很煩人,而唯一的解決方法就是使用SMB加密。


--------------------------------------------------------------------------------

2.3.2. 非加密口令的好處
明文口令不保存的磁碟上。

可以使用與其它UNIX服務一樣的口令,如login和ftp。

你可能已經使用了發送明文口令的其它服務(如telnet和ftp),所以多加一個也無關緊要。


--------------------------------------------------------------------------------

2.4. smbpasswd文件
為了使Samba使用上述那些協議,必須查找用戶名的16位元組散列值。不幸的是,由於UNIX口令值也是通過散列功能來實現的,因此必須使用一個單獨的口令文件smbpasswd存放這個16位元組值。同時使用兩個口令文件就應該避免同步問題。你可以用一個叫mksmbpasswd.sh的工具從UNIX的/etc/passwd文件產生一個smbpasswd文件,如:

$ cat /etc/passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd

如果你使用了NIS系統,就用:

$ ypcat passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd

我們把mksmbpasswd.sh程序放在Samba包的source目錄中。而smbpasswd文件預設情況是保存在以下目錄的:

/usr/local/samba/private/smbpasswd

這裡的/usr/local/samba/private/目錄應該屬於root,並且它的許可權應是0500(chmod 500 /usr/local/samba/private)。

同樣,這個目錄里的smbpasswd文件也應屬於root,且具有許可權0600(chmod 600 smbpasswd)。

smbpasswd文件的格式如下(這裡已被換行,在文件中應該是每項佔一行):

username:uid:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:\
[Account type]:LCT-:Long name


其中,Samba只使用username、uid、XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX、[Account type]和last-change-time這幾項。

這裡XXX段中兩個冒號『:』之間的32個『X』字元極其重要,如果冒號間的字元不足32個,那麼Samba對該賬號的驗證將會失敗。其中第一個XXX段用於Lanman口令散列,而第二個則是Windows NT版本。

這個口令文件在建立時,所有用戶的口令都是有32個『X』字元。這樣就禁止了用戶對伺服器的訪問。當用戶設置了口令后,『X』字元改變為32個ascii十六進位值,用來表示其口令的16位元組散列值。

要把用戶口令設為空的話(不推薦),可以用vi編輯該文件並用「NO PASSWORD」這樣的ascii文本替換頭11個字元(不帶引號)。

例如,把bob的口令清除之後,他的賬號項應該如下:

bob:100:NO PASSWORDXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:\
[U ]:LCT-00000000:Bob's full name:/bobhome:/bobshell


如果你想讓用戶用smbpasswd命令設置他們自己的口令,就可以用NO PASSWORD來初始化他/她的口令項,這樣他們在更改新口令時就不必輸入舊口令了(不推薦,這不安全)。不過,必須讓用戶不提供口令也可以用smbpasswd程序連接到smbd進程,為此,你只要在smb.conf文件的[global]段中加入以下內容:

null passwords = yes

更安全的做法應該是為用戶分配一個預設口令而不是採用上述方法。

注意:要小心保護smbpasswd文件。如果有人可以接觸這個文件,那他(具有足夠的協議知識)就可以訪問你的SMB伺服器(要有足夠的協議知識)。


--------------------------------------------------------------------------------

2.5. smbpasswd命令
使用smbpasswd命令可以維護smbpasswd文件中的兩個32位元組口令欄位。我們通常把它安裝在/usr/local/samba/bin/目錄中(或者你的主Samba二進位程序目錄)。

注意,在Samba 1.9.18p4中,不要把這個程序配置為可以setuid到root身份(新版smbpasswd代碼已經限制這個操作,不用擔心會被意外地按這種方式運行)。

現在,smbpasswd程序以客戶機/伺服器模式工作,它作為客戶端連接本地smbd,然後更改用戶口令。所以,它就有下面這些優點:

smbpasswd不再被setuid到root身份 - 消除了大部分的安全問題。

現在,smbpasswd可以更改Windows NT伺服器上的口令(在更改NT域用戶口令時只能將請求發給NT主域控制器)。

普通用戶運行smbpasswd程序只要打:

$ smbpasswd

Old SMB password: <在此鍵入舊口令 - 如沒有舊口令則打回車>

New SMB Password: <鍵入新口令>

Repeat New SMB Password: <重複輸入>

如果舊口令輸入有問題,或者兩個新口令不匹配,就無法更改口令。

如果是以普通用戶調用該程序,只能更改其自身的Samba口令。

如果是以root用戶運行,就可以使用選項來指定要更改口令的用戶。注意,smbpasswd不會提示或檢查舊口令,因此可以用它來為忘記口令的用戶重新分配口令。

對於熟悉UNIX的用戶來說,smbpasswd的工作方法與使用passwd或yppasswd命令類似。

關於這個程序的詳情請參見它的手冊頁。


--------------------------------------------------------------------------------

2.6. 設定Samba支持LanManager加密
下面簡要描述一下如何來設定Samba,使它支持LanManager加密:

先編譯安裝好Samba。


在smb.conf文件的[global]段中加入encrypt passwords = yes選項,打開口令加密功能。


在Makefile文件指定的目錄(--prefix=)中建立一份原始的smbpasswd口令文件。參見前面smbpasswd文件部分的詳情。

提示,完成之後可以用smbclient工具來測試一下。


--------------------------------------------------------------------------------

Chapter 3. 在Samba中配置微軟分散式文件系統樹
3.1. 介紹
使用分散式文件系統(DFS)可以把用戶查看的文件、目錄的邏輯視圖與相應網路資源的物理位置隔離。它具有更高的可靠性、更透明的存儲擴展性以及負載均衡等特點。有關DFS的詳細資料可以在微軟文檔中找到。

本文描述了如何使用Samba在UNIX主機中實現分散式文件系統樹(用支持DFS的客戶端進行連接)。

要打開DFS功能,可以用--with-msdfs選項對Samba進行配置,當編譯完成後,可以在smb.conf文件中設置全局選項host msdfs使Samba成為DFS伺服器。然後再使用共享選項msdfs root指定一個共享項作為DFS根目錄,這個目錄用符號鏈接的形式來連接其它伺服器。例如,在根共享目錄中有一個符號鏈接junction->msdfs:storage1\share1,它表示一個DFS結點。當支持DFS的客戶端訪問這樣的結點鏈接時,就會被重定向到實際的存儲位置(在此例中為\\storage1\share1)。

Samba的DFS系統可以同所有支持DFS的客戶端(從Windows 95到2000)一起工作。

以下舉例說明如何把Samba設置為DFS伺服器。先建立如下這樣的smb.conf文件

[global]
netbios name = Samba
host msdfs = yes

[dfs]
path = /export/dfsroot
msdfs root = yes


在/export/dfsroot目錄中,我們設置一些指到其它網路伺服器的DFS鏈接。

root# cd /export/dfsroot

root# chown root /export/dfsroot

root# chmod 755 /export/dfsroot

root# ln -s msdfs:storageA\\shareA linka

root# ln -s msdfs:serverB\\share,serverC\\share linkb

你應該為DFS根目錄設置一定的許可權,這樣,只有指定的用戶才能建立、刪除或修改DFS鏈接。另外還要注意,符號鏈接名應該全部用小寫。通過這樣的限制,Samba就不會對鏈接名嘗試所有的大小寫組合形式。最後,設置符號鏈接使其指向需要的網路共享,然後重啟Samba。

在支持DFS的客戶端,用戶可以通過\\samba\dfs來瀏覽伺服器上的DFS樹。當訪問linka或linkb(客戶端顯示的目錄)時,就會立即轉到相應的網路共享之上。


--------------------------------------------------------------------------------

3.1.1. 說明
如果Windows客戶端已經裝載的非DFS共享現在被用作了DFS根目錄的話,就需要重新啟動,反之亦然。其實,你應該用一個新的共享項作為DFS根目錄。

當前,DFS符號鏈接名必須全部使用小寫字母。

出於安全目的,作為DFS根的目錄應該設置合適的許可權,只允許指定的用戶修改目錄中的符號鏈接。


--------------------------------------------------------------------------------

Chapter 4. Samba 2.2.x中的列印支持
4.1. 介紹
在2.2.0版本中,Samba使用MS-RPC(例如SPOOLSS命名管道)實現了本地Windows NT印表機制。以前的版本只支持LanMan列印調用。

新的SPOOLSS還提供了以下的額外功能:

根據需要,支持Windows 95/98/NT/2000客戶端下載印表機驅動程序。

使用Windows NT添加印表機嚮導(APW)或Imprints工具包(參考http://imprints.sourceforge.net)上傳印表機驅動程序。

支持本地MS-RPC列印調用,如StartDocPrinter、numJobs()等等(關於Win32列印API的詳情請參考MSDN文檔http://msdn.microsoft.com/)。

支持列印對象的訪問控制表(ACL)。

通過使用內部信息資料庫來保存離線任務信息,更好地支持列印隊列操作。

注意,Windows NT/2000客戶端要求Samba伺服器為印表機分配一個合法的驅動程序。為此,就要考慮支持MSRPC列印調用以;而Windows 9x客戶端無須Samba主機安裝印表機的驅動程序。而且,Samba也不使用這些驅動程序來處理假離線文件,驅動程序完全是客戶端使用的。


--------------------------------------------------------------------------------

4.2. 配置
[print$] 與 [printer$]
在以前的版本中,Samba推薦使用一個名為[printer$]的共享,它來自於Windows 9x共享印表機時所創建的printer$服務。Windows 9x列印伺服器總是用這個printer$服務來讓用戶不用口令就可以下載印表機驅動程序。

另外,在那些版本中還有兩個與此有關的選項:printer driver location、printer driver。前者用於指定保存印表機驅動程序的目錄,後者定義印表機驅動程序名。

現在它們已被忽略,所以請別再用了。關於如何進行更新,請參考移植部分。



--------------------------------------------------------------------------------

4.2.1. 建立[print$]項
為了上傳印表機驅動程序文件,你必須先配置共享項[print$]。注意,它的名稱很重要(print$是Windows NT列印伺服器用來提供印表機驅動程序下載的服務項),別寫錯了。你可以參考一下下面這個例子(當然,有些選項值,如『path』是任意的,可以用適當的值進行替換):

[print$]
path = /usr/local/samba/printers
guest ok = yes
browseable = yes
read only = yes
; 由於把它配置為只讀,所以需要一個『write list』。檢查文件
; 系統許可權以確保該賬號可以向這個共享拷貝文件。如果這個賬號
; 不是root賬號,則應該作為『printer admin』。
write list = ntadmin


使用write list選項可以讓指定的用戶具有寫許可權,這樣他/她就可以在這個共享中更新文件。配置文件共享的詳情請參見smb.conf(5)手冊頁。

guest ok = yes這個選項的取捨取決於你的站點是如何配置的。如果Samba伺服器上的每個用戶都有賬號,就無須使用了。

作者註:無須使用的含義是,如果所有的Windows NT用戶都可以通過Samba伺服器進行驗證(這說明域用戶及NT本地用戶已經可以通過域控制器進行驗證),那麼guest訪問是不必要的。當然,如果你沒有禁止某些用戶訪問伺服器,同時也沒有安全方面的顧慮,還是可以放心使用這個功能的。要禁止用戶,可以在[global]段中加入map to guest = Bad User選項,不過在使用前最好徹底理解該選項的含義。--jerry

Windows NT列印伺服器要支持多種客戶端平台下載相應的驅動程序文件,必須在[print$]服務項中建立對應每一種平台的子目錄,Samba也使用了這種方法。

你可以在[print$]共享項下為每一種希望支持的平台建立對應的子目錄。

[print$]-----
|-W32X86 ; "Windows NT x86"
|-WIN40 ; "Windows 95/98"
|-W32ALPHA ; "Windows NT Alpha_AXP"
|-W32MIPS ; "Windows NT R4000"
|-W32PPC ; "Windows NT PowerPC"



注意!需要許可權
在當前版本中,要為samba伺服器添加新印表機,必須滿足以下兩個條件中的任意一個:

向Samba伺服器添加印表機的賬號,其uid必須為0(如,root賬號)。

向Samba伺服器添加印表機的賬號必須是printer admin列表中的成員之一。

當然,該賬號還應該有權在[print$]子目錄下添加文件。要記住,預設情況下所有文件共享項都是『只讀』的。


當建立了所需的[print$]服務項及相關子目錄后,只要在Windows NT 4.0客戶端用root賬號(或printer admin)登錄到Samba伺服器。選到Samba伺服器的「印表機」文件夾中,這時應該就看到伺服器定義的印表機共享列表。


--------------------------------------------------------------------------------

4.2.2. 為現有印表機設定驅動程序
如上所述,Samba伺服器印表機文件夾中的印表機列表還沒有分配實際的驅動程序。但在預設情況下,Samba會把驅動程序名設為「NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER」。要是你試圖查看印表機屬性,就會得到如下信息:

Device settings cannot be displayed. The driver for the specified printer is not installed, only spooler properties will be displayed. Do you want to install the driver now?

在對話框中點擊「No」后就會出現印表機屬性窗口,這時有兩種可選的方法來安裝驅動程序:

點「New Driver...」按鈕安裝一套新的,或者

從已安裝的驅動程序下拉列表中進行選擇。最初該列表為空。

如果你要安裝Windows NT x86以外的操作系統驅動程序,就要使用印表機屬性對話框中的「Sharing」書籤。(譯者註:該書籤中有一按鈕為「Other Driver」)

如果你使用root賬號連接到伺服器,還可以在這個對話框中修改其它印表機的屬性,如ACLs和設備設定。

最後還要說明一下,Windows NT列印伺服器有可能會把並未共享的印表機列在印表機文件夾中。但Samba就不考慮這種情況了,根據定義,它只共享smb.conf文件指定的那些印表機。

另外還有一點很有趣,Windows NT客戶機並不使用SMB列印共享,而寧願使用MS-RPC直接列印到遠程NT主機。當然,這要假定要列印的人在遠程主機上必須有一定許可權,Windows NT為印表機分配的預設許可權為:「Everyone」組可列印。


--------------------------------------------------------------------------------

4.2.3. 支持大量印表機
在我們開發Samba 2.2的時候曾經出現過一個問題,那就是需要支持下載100台印表機的驅動程序。如果用Windows NT APW來實現的話就稍微有點麻煩了。要是多台印表機都共用驅動程序的話,就可以用rpcclient的setdriver命令對已安裝的驅動程序進行關聯。例如:


$ rpcclient pogo -U root%secret -c "enumdrivers"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]

[Windows NT x86]
Printer Driver Info 1:
Driver Name: [HP LaserJet 4000 Series PS]

Printer Driver Info 1:
Driver Name: [HP LaserJet 2100 Series PS]

Printer Driver Info 1:
Driver Name: [HP LaserJet 4Si/4SiMX PS]

$ rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
flags:[0x800000]
name:[\\POGO\hp-print]
description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
comment:[]

$ rpcclient pogo -U root%secret \
> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
Successfully set hp-print to driver HP LaserJet 4000 Series PS.


--------------------------------------------------------------------------------

4.2.4. 通過Windows NT APW添加新列印
預設情況下,Samba在「印表機」文件夾中會提供smb.conf文件定義的所有共享印表機。同時,如果滿足以下條件,就會在該文件夾中提供添加印表機嚮導的圖標:

連接的用戶可以用管理許可權(如root賬號或printer admin)調用OpenPrinterEx(\\server)。

指定選項show add printer wizard = yes (預設值)。

要用APW在Samba伺服器上添加印表機,必須定義add printer command選項,這個選項所指定的程序也必須可以用來向系統(例如/etc/printcap或相應的文件)及smb.conf添加印表機。

當客戶端使用APW圖標添加的共享印表機不存在時,smbd會執行add printer command並重新分析smb.conf文件,然後查找新的印表機共享。如果該共享還未定義,則向客戶端返回「拒絕訪問」出錯信息。注意,add printer program是以連接的用戶身份執行的,它並不需要root來執行。

另外還有一個附加選項delete printer command,可以用它來從「印表機」文件夾中刪除印表機項。


--------------------------------------------------------------------------------

4.2.5. Samba和印表機埠
Windows NT/2000列印伺服器為每台印表機分配一個埠,通常是LPT1:、COM1:、FILE:等等。同樣,Samba也必須支持印表機埠這種概念,但系統上預設只有一個印表機埠,稱為「Samba Printer Port」,這並不是一個真正的列印埠,因為只有Windows客戶機才需要它。

注意,Samba並不支持「印表機緩衝池」這個概念,當一台邏輯印表機分配了多個埠時,緩衝池用作負載均衡或失敗重試。

如果你需要定義多個埠,smb.conf文件中有一個enumports command選項,你可以用它指定一個外部程序,通過這個程序在系統上產生一列埠。


--------------------------------------------------------------------------------

4.3. Imprints工具包
Imprints工具包提供了一套與Windows NT APW等價的UNIX程序。詳情請參見Imprints的網站http://imprints.sourceforge.net/。另外,它的源代碼發布包中有詳細的文檔可以參考,本節只簡要介紹一下。


--------------------------------------------------------------------------------

4.3.1. 什麼是Imprints?
Imprints是一套工具包,它支持以下功能:

統一存儲Windows NT及95/98的印表機驅動程序。

提供建立Imprints印表機驅動程序所必須的工具集。

提供了一套用於客戶訪問、安裝遠程Samba及Windows NT伺服器印表機的程序。


--------------------------------------------------------------------------------

4.3.2. 建立印表機驅動程序包
建立印表機驅動程序包的細節超出了本文的範圍(詳情請參見Samba發布包中的Imprints.txt文件)。簡而言之,Imprints驅動程序包是一套含有驅動程序、相關INF文件及客戶端安裝所需之控制文件的壓縮包。


--------------------------------------------------------------------------------

4.3.3. Imprints伺服器
Imprints伺服器實際上是個資料庫伺服器,你可以通過標準HTTP機制對它進行查詢。資料庫中的每個列印驅動程序項都有一個相關的URL用於下載。而且每個包還附帶GnuPG產生的數字簽名,用這個簽名就可以驗證所下載包的真實性。建議「不要」禁止這個安全特性。


--------------------------------------------------------------------------------

4.3.4. 客戶端安裝程序
Imprints客戶端安裝程序的詳情請參見源代碼包所含之Imprints-Client-HOWTO.ps文件。

Imprints客戶端安裝程序有兩種形式:

一組Perl命令行腳本

一個基於GTK+的Perl命令行腳本的圖形界面

用客戶端程序可以查詢Imprints資料庫伺服器已知的印表機型號,還可以下載並安裝遠程Samba和Windows NT列印伺服器提供的驅動程序。

基本安裝過程有四個步驟,並用smbclient和rpcclient對Perl代碼進行了包裝。


foreach (支持的印表機架構平台)
{
1. rpcclient: 取得遠程伺服器上的適當上傳目錄
2. smbclient: 上傳驅動程序文件
3. rpcclient: 發送AddPrinterDriver() MS-RPC調用
}

4. rpcclient: 發送AddPrinterEx() MS-RPC調用,實際建立印表機


當在各種客戶端平台上執行Imprints工具包時會遇到驅動程序名的問題。例如,Windows NT使用諸如「Apple LaserWriter II NTX v51.8」的驅動程序名,而Windows 95則使用「Apple LaserWriter II NTX」。

問題是,對於印表機來說,要更新的是哪一套客戶端驅動程序呢。有經驗的讀者會記得Windows NT的印表機屬性對話框只用一種印表機驅動程序名。可以看一下下面這個Windows NT 4.0系統的註冊表項:

HKLM\System\CurrentControlSet\Control\Print\Environment

你會發現Windows NT總是使用NT的那一套驅動程序名,這當然沒有問題,因為NT只查找現有的NT版驅動程序。但Samba沒有這種特性,因此,當驅動程序還沒有安裝時,就不能只使用一種驅動程序名?

要解決這種問題,就需要使Imprints的印表機驅動程序包同時含有Windows NT和95/98的驅動程序,並且先安裝NT的。

校對中……


--------------------------------------------------------------------------------

4.4. 從Samba 2.0.x向2.2.x遷移
在Samba 2.2中,印表機驅動程序的管理已經與以前的版本有所改變(我們希望有所改進),從你現有版本向2.2遷移可能會遇到象下面這樣的問題。

一般說來,Windows系統具有一定的記憶功能。如果Windows NT客戶端已連接過Samba 2.0伺服器的話,它會記住這是一台LanMan列印伺服器。而Samba2.2版本會儘可能支持MSRPC列印,當你升級以後,NT客戶還是記住以前的設置。

要使用全新的MSRPC列印功能,先用下面的命令停掉客戶端的假離線服務,再刪除[HKLM\SYSTEM\CurrentControlSet\Control\Print]中與列印伺服器有關的註冊鍵。

C:\WINNT\> net stop spooler

請小心操作註冊表。

當刪除了相應的註冊表項之後,請用start替換掉剛才命令中的stop來重啟假離線服務。

另一方面,Windows 9x使用LanMan列印調用,無須進行任何修改操作。

警告
我們將考慮把以下的smb.conf選項作廢掉,所以請不要在新的安裝中再使用了。

printer driver file (G)

printer driver (S)

printer driver location (S)


在遷移過程中,你可能會面臨如下的方案:

無須支持Windows NT印表機驅動程序,則只要使用現有的選項就可以了。

如果要支持NT印表機驅動程序,但卻不想把9x驅動程序遷移到新伺服器上,那麼請保留現有的printers.def文件。當smbd在TDB中查找印表機的9x版驅動程序失敗時,就會使用printers.def文件(及所有相關的選項)。make_printerdef工具仍會保持向後兼容,不過已經這屬於那種老掉牙的工具了。

如果在Samba伺服器上安裝了印表機的Windows 9x版驅動程序,那麼這套程序的優先順序最高,上面那三個舊的列印選項將被忽略(包括printer driver location)。

如果要把現有的printers.def文件遷移到新伺服器上,那麼只能用Windows NT的APW來安裝NT及9x驅動程序了。詳情請參見smbclient和rpcclient的用法。另外在http://imprints.sourceforge.net/有Imprints客戶端安裝程序的示例。


--------------------------------------------------------------------------------

Chapter 5. Samba 2.x中的security = domain選項
5.1. 把Samba 2.2添加到NT域
要把Samba伺服器添加到NT域中,必須在PDC的域伺服器管理器中加入它的NetBIOS主機名,這樣就在PDC的域SAM中加入了它的機器賬號。要注意的是,在添加時要把Samba伺服器作為一台「Windows NT工作站或伺服器」,而不是「主或備份域控制器」。

假定你要把一台名為SERV1的Samba伺服器加入到NT域DOM中,而該域的主域控制器及兩個備份域控制器分別名為DOMPDC、DOMBDC1和DOMBDC2。那麼首先停掉所有的Samba後台進程,再運行以下命令:

root# smbpasswd -j DOM -r DOMPDC

如果運行順利,則會得到以下信息:

smbpasswd: Joined domain DOM.

smbpasswd(8)的用法請參見其手冊頁。

在以後的發布版中,加入域時就無須事先在PDC上創建機器信任賬號了。

通過上面這條命令,Samba伺服器使用機器賬號口令更改協議,把它的機器賬號口令寫到了一個文件中,並保存在存放smbpasswd文件的目錄中,通常應該是:

/usr/local/samba/private

在Samba 2.0.x中,這個機器賬號口令文件的名稱形如:

..mac

.mac後綴代表這是一個機器賬號口令文件。因此,根據上面的例子,這個口令文件應該名為:

DOM.SERV1.mac

而在Samba 2.2中,該文件已被TDB(Trivial Database)文件secrets.tdb所取代。只有root賬號才擁有該文件,其它人皆不可讀。它是系統採用域安全級時的關鍵所在,請仔細維護。

現在,還得編輯smb.conf(5)文件,以便使用域安全級。

在[global]段中修改(或添加)security =選項為:

security = domain

同時再修改workgroup =:

workgroup = DOM

它應該是待加入的域名。

另外還須設置encrypt passwords選項為yes,以便使用加密口令。

最後,添加(或修改)[global]段中的password server =選項指定口令驗證伺服器:

password server = DOMPDC DOMBDC1 DOMBDC2

Samba在進行用戶驗證時,會依次使用這些主域和備份域控制器,所以如果要分散驗證任務器的負載,可以根據需要改變這個列表的次序。

或者,用如下設置,這樣smbd會在進行驗證時自動檢測域控制器:

password server = *

註:其實,在Samba 2.0.6中就已經有了這種同NT一樣的工作機制。它使用廣播或查詢WINS資料庫的方式來查找進行驗證的域控制器。

最後,請重啟Samba後台進程,客戶就可以使用域安全級了。


--------------------------------------------------------------------------------

5.2. Samba和Windows 2000域
很多人一直關心Samba與Windows 2000域的工作情況。現在,在混合模式或本地模式的Windows 2000域中,Samba 2.2已經可以作為其中的成員伺服器了。

在上述的兩種模式之間有很多令人混淆的地方。只有Windows NT備份域控制必須要處於相同域中時,才需要讓Win2k域控制器以「混合模式」來運行。而預設情況下,處於「本地」模式的Win2k域控制器仍支持常規客戶端的NetBIOS和NTLMv1驗證協議,這些客戶端是:Windows 9x和NT 4.0。而Samba伺服器的工作方式與Windows NT 4.0成員伺服器類似。

把Samba 2.2添加到Win2k域的步驟與向Windows NT 4.0域中添加Samba伺服器幾乎是相同的。只是,NT 4的「伺服器管理器」現在被換成了Win2k的「活動目錄用戶及計算機」。


--------------------------------------------------------------------------------

5.3. 為什麼比security = server選項更好?
現在,要使用Samba的域安全級,還是需要建立本地UNIX用戶賬號來代表連接伺服器的那些域用戶。也就是說,如果域用戶DOM\fred 要連到你的域安全級Samba伺服器,則在UNIX系統上需要一個本地賬號fred來與之對應。這和以前的security = server安全模式很相似,在那種舊模式中,Samba伺服器使用與Windows 95或Windows 98相同的方法把驗證請求發往NT伺服器。

Winbind paper中提到了關於為Windows NT域用戶自動分配UNIX的uid和gid的內容。這種功能現在只有開發分支中才有,不過不久就會加入到發布版中的。

Samba伺服器採用域安全級的好處在於,它可以象NT伺服器一樣來使用RPC通道傳遞驗證。也就是說,它可以象NT伺服器那樣參與域信任關係(例如,可以把Samba伺服器加到資源域中,然後通過該域的控制器把驗證傳遞到賬號域中的域控制器上去)。

另外,如果使用security = server的話,伺服器上的每一個Samba進程都會在運行時保持對驗證伺服器的連接,這樣就可能耗盡NT伺服器的連接資源。而使用security = domain的話,Samba進程只在用戶進行驗證時才連接到PDC/BDC,完成之後就斷開,因此節省了伺服器的連接資源。

最後,使用與NT伺服器一樣的方式向PDC進行驗證,可以使Samba伺服器獲得用戶的鑒別信息,象用戶的SID及其所屬的NT組列表等等。在未來的版本中,Samba會這些信息來擴展一些功能,開發者把它稱為「appliance」模式。在這種模式中,Samba將從PDC返回的用戶驗證信息中產生相應的UNIX的uid和gid,而無須再手工建立本地用戶賬號了,這樣的話,在NT域環境中,Samba伺服器真的可以算是即插即用了。請在將來的代碼中留意該功能。

注意:本文中很多文字引用了LinuxWorld的文章Doing the NIS/NT Samba。


--------------------------------------------------------------------------------

Chapter 6. 把Samba 2.2配置成主域控制器
6.1. 說明
注意,作者提示:本文是David Bannon的Samba 2.2 PDC HOWTO和Samba NT Domain FAQ的結合。

Samba 2.2之前的版本已實現了少量的Windows NT 4.0主域控制器功能。而2.2版還完成了下面這些功能:

Windows NT 4.0/2000客戶進行域登錄

在用戶安全級中加入Windows 9x客戶

從Samba主域控制器中接收Windows客戶的用戶及組列表

漫遊用戶設置

Windows NT 4.0風格的系統策略

但還有這些功能沒有實現:

Windows NT 4域信任

Windows NT 4.0域控制器的安全賬號資料庫複製(如,Samba主域控制器與NT備份域控制器進行複製,或反之)

通過用戶管理器向域中添加用戶賬號

實現Windows 2000域控制器功能(如Kerberos和活動目錄)

請注意,在本文所描述的Windows 9x客戶並不是域中的真正成員。因此,支持Windows 9x域登錄風格的協議與NT4域登錄是完全不同的,而且這個功能早就被正式支持了。

從Samba 2.2.0開始,正式支持了NT4風格的域登錄,適用於Windows NT 4.0和Windows 2000 (包括SP1)客戶。本文描述了把Samba配置成PDC所必須的步驟。開始之前請先確保它正常工作,否則請參考UNIX_INSTALL.html以及smb.conf(5)的手冊頁。

具體實現基本上分為兩步:

配置Samba作為PDC


建立機器信任賬號並把客戶加入到域中來

另外還有一些次要的東西如用戶配置、系統策略等。但這些並不是必須的,而且,這和Windows NT的網路概念是差不多的,這裡只簡單地提一下了。


--------------------------------------------------------------------------------

6.2. 配置Samba域控制器
首先是伺服器工作所必須的smb.conf選項,在此就不詳細解釋了,詳情請參見smb.conf(5)的手冊頁。為方便讀者,我們已經把這些選項鏈接到smb.conf中實際的描述上了(譯者註:如果你是單獨獲得這個文件的,請把它放到html版的手冊頁目錄中去)。

以下是實現PDC的樣本配置文件:

[global]
; 基本伺服器設定
netbios name = POGO
workgroup = NARNIA

; 成為域及本地主瀏覽器
os level = 64
preferred master = yes
domain master = yes
local master = yes

; 安全性設定(必須使用security = user)
security = user

; PDC必須使用加密口令
encrypt passwords = yes

; 支持域登錄
domain logons = yes

; 指定保存用戶配置的目錄
logon path = \\%N\profiles\%u

; 指定用戶的主目錄及相應的映射盤符
logon drive = H:
logon home = \\homeserver\%u

; 為所有用戶指定一個通用登錄腳本並使用[netlogon]共享項的相對DOS路徑
logon script = logon.cmd

; 域控制器必須的共享項
[netlogon]
path = /usr/local/samba/lib/netlogon
writeable = no
write list = ntadmin

; 存放用戶配置的共享項
[profiles]
path = /export/smb/ntprofile
writeable = yes
create mask = 0600
directory mask = 0700


對上面的配置,有幾點需要強調一下:

必須使用加密口令,工作原理請參見ENCRYPTION.html文件。

伺服器必須支持域登錄並具有[netlogon]共享項。

為了使Windows客戶查找域控制器,Samba伺服器必須成為域主瀏覽器。

由於Samba 2.2並未真正實現NT組賬號和UNIX組賬號間的映射(原因一言難盡),所以你應該參考smb.conf文件中的domain admin users和domain admin group兩個選項來建立域管理員之類的賬號。


--------------------------------------------------------------------------------

6.3. 建立機器信任賬號並把客戶添加到域中
機器信任賬號就是計算機賬號。它的口令則是域控制器進行可靠通信所必須而且共享的機密。Windows 9x無法成為真正的域成員就是因為它不擁有機器信任賬號,從而無法和域控制器協同工作。

機器信任賬號的口令是保存在NT主域控制器的註冊表中的。而Samba主域控制器則把它們與用戶的LanMan和NT散列口令(通常是smbpasswd文件)保存在同一個目錄中。但機器信任賬號只使用NT散列口令。

要建立機器信任賬號有兩種方法:

在把客戶加入到域之前,通過手工方式建立。如果用這種方法,那麼這個機器信任賬號的口令就是已知值 -- 小寫的機器netbios名。

在客戶加入到域時建立機器賬號。如果用這種方法,就把用於添加客戶的管理賬號的會話關鍵字作為產生隨機口令值的密鑰。

為了產生Windows NT的SID,Samba需要讓機器賬號佔有一個UNIX的uid,所以,所有機器賬號都要在/etc/passwd和smbpasswd中有相應的項存在。在將來的版本中將無須在/etc/passwd中建立相應項。

在/etc/passwd文件中,機器賬號的名稱應該是機器名后加$符號,而且沒有口令、登錄shell及主目錄等項。例如名為『doppy』的計算機的賬號應該是:

doppy$:x:505:501:NTMachine:/dev/null:/bin/false


如果你使用手工方式來建立機器賬號,那麼必須先在/etc/passwd(或NIS口令表)中建立相應項,然後再用如下命令格式在smbpasswd文件中添加機器賬號:

root# smbpasswd -a -m machine_name

其中的machine_name為計算機的netbios名。

此時,請馬上把該計算機加到域中去。入侵者可以利用這種開放的賬號訪問域中的用戶信息。

如果你用的是在客戶機加入域時自動建立其機器賬號這種方法,那麼需要在smb.conf中使用add user script選項並為其指定適當的值。以下示例可用於RedHat 6.2 Linux系統:

add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u


在Samba 2.2中,只有root賬號才可以用這種方法來建立機器賬號。因此在smbpasswd文件中還要root賬號。但出於安全性考慮,最好為其另設口令,而不要使用同/etc/passwd中相同的口令。


--------------------------------------------------------------------------------

6.4. 常見問題及錯誤
機器賬號后無法添加『$』符號。

FreeBSD(和其它BSD系統)無法創建帶『$』符號的用戶名。上述問題只有在創建賬號時才會遇到,而建立之後就該賬號就可以正常工作。所以可以先創建不帶『$』符號的用戶賬號,再用vipw編輯賬號的用戶名,在後面添加『$』。或者,索性使用vipw創建整個賬號,但要注意必須使用一個唯一的uid!

在建立機器賬號時系統提示「你已經連接到域中」。

這說明你在客戶端使用了一個不合法的賬號來為計算機創建機器賬號。請先退出,關閉初始連接並用其它合法的用戶賬號再試試。

另外,如果你的計算機已是一個『組成員』,而它所屬的組名與要加入的域同名的話(真是個壞主意),也會得到這樣的信息。只要更換工作組名,重啟后再試就可以了。

系統提示「加入到域時出現錯誤,提供的信任與現有設置發生衝突」

這和上面提到的「你已經連接到域中……」是同一個問題。

「系統無法為你提供登錄(C000019B)」

我已經順利加入到域中,但在更換了Samba版本后,嘗試登錄時就得到這樣的信息:「系統無法為你提供登錄(C000019B),請再試一次或與你的管理員聯繫」。

這是因為,保存在private/WORKGROUP.SID文件中的域SID發生了改變。例如,你刪除了這個文件,但smbd又自動再創建了一個;要麼就是,你正在版本2.0.7、TNG和HEAD分支代碼之間換來換去(不推薦這麼做)。要解決這個問題只有一個辦法,那就是恢復原始域SID信息,或者從域中刪除該域客戶並重新加入。

「該計算機的機器賬號不存在或不可訪問」

當我試著把客戶機加入到域中時得到這樣的信息,這是什麼問題?

這說明PDC上沒有與當前客戶機相對應的機器賬號。如果你是使用add user script選項來建立賬號,那麼這就表示這個腳本在工作時出了問題,所以必須確保域用戶管理正常進行。

另外,如果你是通過手工方式來建立賬號,那麼這樣的信息就說明建立的賬號有問題。看一下/etc/passwd和smbpasswd文件中是否存在機器賬號,並確保其賬號名是客戶機的netbios名后加一個『$』符號(如computer_name$)。另外,據說還有人發現,如果Samba伺服器與NT客戶機的子網掩碼不一致,也會發生這樣的問題,這樣的話你應該知道怎麼解決了吧。


--------------------------------------------------------------------------------

6.5. 系統策略及配置文件
在Samba域中設置系統策略及漫遊用戶配置文件與在NT4域中是一樣的。你應該閱讀微軟的白皮書Implementing Profiles and Policies in Windows NT 4.0。

這裡有一些額外的資料:

什麼是Windows NT策略編輯器?

要建立或編輯ntconfig.pol文件必須使用NT伺服器策略編輯器poledit.exe,NT伺服器版提供了這個程序。工作站版雖然也有一個策略編輯器,但不能用來建立域策略。此外,還可以在NT工作站/伺服器上安裝Windows 95的策略編輯器,但它無法以NT的方式來工作。然而,在工作站版中可以使用伺服器版中的一些相應文件。所需的文件是poledit.exe、common.adm和winnt.adm,只要把兩個*.adm文件放到c:\winnt\inf目錄,程序會方便地進行查找。要注意的是inf目錄是『隱藏』的。

在Windows NT 4.0的Service Pack 3(及更高版)中也提供了NT策略編輯器。只要用servicepackname /x命令解開文件就可以了,如,對於service pack 6a就用Nt4sp6ai.exe /x。另外在Office97的策略樣板文件及微軟的零管理工具包中也可以找到該策略編輯器。

Win95可以執行策略嗎?

只要在Win9x中安裝組策略管理器就可以控制組策略了。該程序位於Win98光碟的\tools\reskit\netadmin\poledit目錄中,雙擊grouppol.inf就可以完成安裝。然後重複註冊/登錄數次來檢查Win98是否執行了組策略。但每台Win9x主機都要安裝一套,很麻煩。

如果你發現沒有正常執行組策略,可以升級Win9x的grouppol.dll文件。而相應的組列表會從伺服器的/etc/group中取得。

哪裡有『用戶管理器』和『伺服器管理器』呢?

因為我沒有購買NT伺服器版的光碟,到哪裡去找『域用戶管理器』和『伺服器管理器』?

微軟發布了一套名為nexus的用於windows 95系統的工具,它包含了:

伺服器管理器

域用戶管理器

事件查看器

該工具可以從ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE下載。

Windows NT 4.0版本的『域用戶管理器』和『伺服器管理器』可以通過微軟的FTP站點ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE下載。


--------------------------------------------------------------------------------

6.6. 其它可獲得的幫助
在郵件列表、RFC和文檔中可以獲得很多資料。同Samba發布包隨同提供的文檔中對常見的SMB問題進行了很好地說明,如瀏覽問題等。

有沒有用於調試域登錄操作的診斷工具?

Samba本身就是最好的調試診斷工具了。你可以對smbd和nmbd使用-d選項來為它們指定一個調試等級。關於這個選項,可以參考這兩個進程的手冊頁及smb.conf文件。其中,調試等級的範圍是從1(預設值)到10(用於調試口令)。

另外一個很有用的方法就是用gcc -g選項來編譯Samba。這樣就會在二進位程序中包含調試功能,你可以用gdb連接到正在運行中的smbd/nmbd進程中。要把gdb連接到一個為NT工作站提供服務的smbd進程,首先要在工作站那一端建立連接,在登錄時選擇進入到域中,這樣就會產生『LsaEnumTrustedDomains』。然後,讓工作站保持這個打開的連接,這時會有一個相應的smbd進程處於運行狀態中(假定沒有把空閑超時設得太短),當你在工作站端輸入口令時,伺服器端就可以用gdb進行連接了。

其它值得研究的Samba命令:

testparam | more

smbclient -L //{伺服器的netbios名}

在http://www.tcpdup.org/有一個tcpdump的SMB專用版。另外,可以在http://www.ethereal.com找到另一個用於UNIX和Win32主機的包嗅探器Ethereal。

要在Windows NT上進行監視工作,可以使用MSDN光碟、NT伺服器版光碟或SMS光碟中提供的網路監視器(netmon)。SMS中提供的版本可以監視任意兩個計算機(要把網路介面置為混雜模式)間的通信數據包。而NT伺服器版光碟提供的版本只能監視本地子網中流向自已及廣播地址的通信數據包。另外,要注意Ethereal可以讀寫netmon格式的數據文件。

如何在NT工作站或Win9x機器上安裝『網路監視器』?

在NT工作站上安裝netmon可以按照以下的步驟進行,在這個例子中,安裝的netmon版本是4.00.349,它來自Windows NT Server 4.0,並安裝到Windows NT Workstation 4.0,但同時需要這兩個版本的安裝光碟。其它版本的netmon安裝步驟類似。

首先需要在NT伺服器版上安裝『網路監視工具和代理』:

點擊『開始』-『設置』- 『控制面板』- 『網路』- 『服務』- 『添加』

選擇『網路監視工具和代理』並點擊『確定』

在網路控制面板上點擊『確定』

按提示插入Windows NT Server 4.0安裝光碟

這樣,netmon程序就保存在%SYSTEMROOT%\System32\netmon\*.*。其中還有兩個子目錄,captures\和parsers\,後者存放分析數據包必須的DLL庫。

然後在工作站上進行安裝:

點擊『開始』-『設置』- 『控制面板』- 『網路』- 『服務』- 『添加』

選擇『網路監視工具和代理』並點擊『確定』

在網路控制面板上點擊『確定』.

按提示插入Windows NT Workstation 4.0安裝光碟

現在,把NT伺服器的%SYSTEMROOT%\System32\netmon\*.*拷到工作站的%SYSTEMROOT%\System32\netmon\*.*,並設置適當的許可權。注意,在NT上運行netmon需要管理員許可權。

如果為Windows 9x安裝監視工具,需要從它的光碟上安裝網路監視代理(\admin\nettools\netmon)。這個目錄中還有一個readme文件,它介紹了安裝步驟。


--------------------------------------------------------------------------------

6.6.1. 鏈接及類似資源
Samba主站。在這裡我們提供了離你最近的鏡像站點!

Samba鏡像站中的開發文檔可能會提到你的問題。如果是這樣的話,就說明開發者正在解決它。

看看Scott Merrill是如何來模擬備份域控制器的:http://www.skippy.net/linux/smb-howto.html。

在http://bioserve.latrobe.edu.au/samba中,David Bannon維護了一篇把2.0.7作為PDC的文章。

在http://samba.org/cifs/中有其它關於CIFS的信息。

在http://mailhost.cb1.com/~lkcl/ntdom/中有關於UNIX上的NT域的內容。

早期SMB規範:ftp://ftp.microsoft.com/developr/drg/CIFS/


--------------------------------------------------------------------------------

6.6.2. 郵件列表
如何從郵件列表中獲得幫助?

Samba有許多相關的郵件列表。請到http://samba.org選擇離你最近的鏡像站點,然後選Support欄中的Samba related mailing lists。

與Samba TNG有關的問題請到http://www.samba-tng.org。但請不要把這類問題發到Samba的主列表中去。

在使用郵件列表時請遵循以下規則:

記住,開發者是志願工作者,他們沒有任何收益,也不保證其觀點百發百中,通常也只能算是最佳建議而已。

儘可能提供你所使用的Samba及操作系統的版本,還有smb.conf的有關部分,至少要給出影響PDC功能的[global]段中的選項。

如果你是通過CVS獲得代碼的,那麼除了代碼版本之外,還應提供最後一次刷新的日期。

請盡量簡單厄要地表達問題,不要用html格式來發送郵件。

不要討論無關的問題。

不要交叉投遞,請選擇最合適的列表進行提問。很多人都訂閱了多個列表,他們討厭過多地看到同一話題。如果有人看到某個問題更適合其它列表,會幫你轉發過去的。

如果要討論一個調試方面的問題,請不要把整個記錄都發上來,提供相應的出錯信息足矣。

如果你有一個完整的netmon跟蹤信息(從打開管道到出錯),那麼就把*.cap文件發上來吧。

在郵件中夾帶附件請三思而後行,最好只提供相關的部分。要知道Samba的郵件列表有大量的訂閱者,不是每個人都希望收到一份smb.conf的。

如何取消郵件列表?

要退訂請去當初訂閱的地方看看:http://lists.samba.org,或者看一下這裡。請不要在郵件中詢問如何退訂。


--------------------------------------------------------------------------------

6.7. DOMAIN_CONTROL.txt:Samba & Windows NT域控制
該附錄的原作者為Samba開發小組的John H Terpstra。

注意:「域控制器」和那些與之相關的術語同屬於一種特殊驗證方法,這種方法是建立SMB域的基礎。在Windows NT Server 3.1之前,各家公司都單獨開發了域控制器,並各自對LAN Manager 2.1協議進行了擴展。Windows NT則使用了微軟自己的方法來分發用戶驗證資料庫。DOMAIN.txt文件舉例說明了Samba基於共享驗證資料庫機制參與或建立SMB域的方法,它和Windows NT的SAM是不同的。

Windows NT Server既可作為獨立的文件和列印伺服器,也可作為參與域控制的伺服器(域成員、主域控制器或備份域控制器)。

OS/2 Warp Server、Digital Pathworks和其它類似產品在這方面的功能都很相似,它們都可以同Windows NT一起參與域控制。但只有那些含有兼容Windows NT代碼的伺服器才可以作主域控制器(如Windows NT Server、Advanced Server for Unix)。

對很多人來說這些術語實在是太令人混淆了,所以讓我們來解釋一下。

每個Windows NT系統(工作站或伺服器)都有一份註冊表資料庫。該註冊表含有所有在NT環境中運行的服務(與UNIX的後台進程類似)的初始信息。同時,註冊表還包括應用程序所需動態庫的位置。其實,它囊括了系統運作所需的全部信息。

在任何Windows NT機器上,只要打開一個命令提示符並輸入以下命令就可以找到註冊表文件:

C:\WINNT\>dir %SystemRoot%\System32\config

其中的環境變數%SystemRoot%可以用下面的命令得到:

C:\WINNT\>echo %SystemRoot%

你需要了解的主要幾個註冊表部件就是這些文件:default、system、software、sam和security。

在一個域環境中,Windows NT域控制器會互相複製SAM和SECURITY文件,這樣就保證了域中所有控制器數據的一致性。

Windows NT系統是由一種安全模式構成的,在這種模式中,所有待運行的應用程序和服務都必須先向安全管理器驗明自身以獲得所需的適當許可權。而且NT的用戶資料庫也位於註冊表中,這些數據包括用戶的安全標識符、主目錄、組成員資格、桌面配置等等。

每個NT系統(工作站與伺服器)都有自己的註冊表。參與域安全控制工作的NT伺服器共享一套公有的資料庫,而工作站及獨立伺服器則各自擁有一份完全獨立的註冊表資料庫,在這一點上,這兩種系統是有區別的。

NT的用戶資料庫稱為SAM(Security Access Manager),使用它可以完成所有用戶的驗證工作,另外還有交叉驗證(例如,確保用戶請求的服務項根據用戶的許可權進行工作)。

Samba開發小組已經提供了一個工具,用來把NT的SAM轉換為smbpasswd格式。該工具可以在離你最近的Samba鏡像站的/pub/samba/pwdump找到,詳情可以參見ENCRYPTION.txt文件。這個工具雖然很有用,但要用它把SAM複製到Samba系統上卻並不那麼容易。

在一個由配置好了的NT伺服器所控制的安全域系統中,Windows for Workgroups、Windows 95和Windows NT Workstations/Servers都可以協同工作。每個這樣的域最多只能有一台主域控制器(PDC);而每個域至少要有一台備份域控制器(BDC)。這些域控制器要互相複製SAM資料庫,因此它們的註冊表中都會有最新的SAM信息。


--------------------------------------------------------------------------------

Chapter 7. 用Winbind在Windows NT與UNIX間進行統一登錄
7.1. 概要
在異種計算機環境中通過統一登錄來集成UNIX和Windows NT系統長期以來一直是人們追求的目標。我們向你推薦一個稱為winbind的Samba組件來解決統一登錄的問題。它在UNIX上實現了微軟的RPC調用、可插式驗證模塊和名字服務切換,通過這些功能可以使NT域用戶能在UNIX主機上以UNIX用戶身份進行操作。本文對winbind系統進行了描述,解釋了它所提供的功能以及配置和內部工作原理方面的問題。


--------------------------------------------------------------------------------

7.2. 介紹
大家都知道UNIX和Windows NT系統使用不同的技術和方式來表示用戶和組信息。這就使得集成這兩種系統變得更加困難。

現在常用的方法之一,就是在兩種系統上創建相同的用戶賬號,並使用Samba在兩者之間提供文件和列印伺服器。但是這種方法還不是很完美,因為在一大堆機器上維護賬號是件麻煩事兒,而且在兩種系統間使用兩套口令既容易引起同步問題,又使用戶感到很混亂。

於是,我們就把UNIX主機的統一登錄問題劃分成三個小問題來看:

獲得Windows NT用戶和組信息

驗證Windows NT用戶

為Windows NT用戶更改口令

最理想的情況是,所使用的方法應該可以解決以上所有的問題,並且無須在UNIX主機上複製信息,也無須使系統管理員在維護這兩種系統的用戶及組信息時產生額外的負擔。winbind系統提供了一套解決上述三個問題簡單而漂亮的方案。


--------------------------------------------------------------------------------

7.3. Winbind的功能
winbind把一台UNIX主機變成一個完全的域成員,這樣就可以統一管理UNIX和NT上的賬號了。這時,這台UNIX主機將可以查看NT的用戶及組信息,就好象這些信息是UNIX本地的一樣,同時,使用戶可以在純UNIX環境里象使用NIS+一樣的來使用NT域。

最後實現的結果是,當UNIX主機向操作系統查詢任何用戶或組名時,該查詢都會被發往指定域中的NT域控制器。因為winbind通過系統低層(使用C庫中的NSS名字解析模塊)重定向了該查詢,而這對NT域控制器來說是完全透明的。

UNIX主機上的用戶可以把NT用戶及組名當作「本地」賬號來用,還可以把文件的屬主改成NT域用戶,甚至可以用一個域用戶的身份登錄到UNIX主機並運行一個X-Window會話。

使用winbind要當心的唯一問題,就是用戶名和組名使用DOMAIN\user和DOMAIN\group這樣的形式,這是winbind所必須的,因為它要用這種形式來檢測重定向查詢的目標域控制器,並考慮信任域的問題。

另外,winbind還利用了可插式驗證模塊(PAM)通過NT域向任何使用PAM的應用程序提供驗證服務。這就解決了系統間的口令同步問題,因為所有口令都保存在一個單一的位置上(域控制器中)。


--------------------------------------------------------------------------------

7.3.1. 使用目標
winbind的服務目標是那些要把UNIX工作站或伺服器加到現有NT域結構的機構。這些機構可以利用winbind在無須維護單獨賬號結構的情況下配置UNIX工作站,這就減少了向NT結構中添加UNIX工作站的管理費用。還有,使用winbind可以把基於UNIX的設備環境集成到基於微軟系統的域結構中去。


--------------------------------------------------------------------------------

7.4. winbind如何工作
winbind系統是按客戶機/伺服器結構設計的。一個持續運行的winbindd進程監聽一個UNIX套接字,並等待請求的到達。這些請求是由運行NSS和PAM的客戶機產生的,伺服器按序對其進行處理。

下面詳細描述winbind的實現技術。


--------------------------------------------------------------------------------

7.4.1. Microsoft遠程過程調用
在過去的兩年中,Samba開發小組的各位成員已經對微軟的遠程過程調用系統(MSRPC)進行了分析!在Windows NT主機上,很多與網路有關的操作都使用了這套系統,如遠程管理、用戶驗證以及列印假離線。雖然,一開始對該系統的分析工作只是為了有助於在Samba中實現主域控制器功能,但是,同時又產生了大量有其它用途的代碼。

winbind使用各種MSRPC調用來處理域用戶和組信息,並以此獲得個別用戶或組的詳細情況。MSRPC調用還可以用於驗證NT域用戶並更改它們的口令。winbind向NT主域控制器直接查詢用戶及組信息,並把這些NT的賬號信息映射到UNIX的用戶名和組名上。


--------------------------------------------------------------------------------

7.4.2. 名字服務切換
名字服務切換(NSS)是很多UNIX操作系統所具有的功能。使用它可以從不同的資源中解析系統信息,如主機名、郵件別名和用戶信息等。例如,單獨的UNIX工作站可以從一系列保存在本地系統上的平面文件中解析系統信息;而網路工作站則可以先從本地文件中獲得系統信息,再參考NIS資料庫查詢用戶信息或從DNS伺服器查詢主機信息。

在解析UNIX用戶名和組時,使用NSS應用編程介面的winbind就象一個系統信息源。而另一方面,它通過使用MSRPC調用獲得NT伺服器的信息,並使用上述介面提供一套新的賬號信息表。使用這套標準UNIX庫調用的好處是,只要在運行winbind的UNIX主機上查閱一次用戶和組信息,就可以象在本地一樣查看NT域及其受託域在內的所有用戶和組信息。

NSS主要的控制都包含在/etc/nsswitch.conf文件中。當一個UNIX應用程序產生一個查詢請求時,C庫就會在該文件中查找與所請求之服務類型相匹配的行。例如,當查詢用戶和組信息時,就使用「passwd」這個服務類型。對指定服務類型的進一步查找則按其配置次序進行,例如,如果passwd配置行為:

passwd: files example

那麼標準C庫首先裝入模塊/lib/libnss_files.so,然後才是/lib/libnss_example.so。從這裡可以看出,它會依次動態地進行裝載,然後使用模塊調用解析器功能來嘗試對請求進行解析,完成之後就把結果返回給應用程序。

使用NSS介面,winbind可以很方便地與操作系統結合。我們要做的只是把libnss_winbind.so放到/lib/目錄中,並在/etc/nsswitch.conf文件的適當位置添加「winbind」,到時候C庫就會調用winbind去解析用戶名和組名了。


--------------------------------------------------------------------------------

7.4.3. 可插式驗證模塊
可插式驗證模塊(PAM)是一套對驗證和授權技術進行抽象化的系統。使用PAM模塊,可以為不同的系統應用指定不同的驗證方法,而無須重新編譯這些應用。另外,還可以使用PAM實現特殊的授權策略。例如,系統管理員可以限制用戶在登錄控制台時使用本地口令文件,在進行網路登錄時使用NIS資料庫。

winbind使用驗證管理和口令管理這兩種PAM介面把NT用戶集成到UNIX系統中。這樣,NT用戶就可以由合適的主域控制器進行驗證,然後登錄到UNIX主機中,之後,這些用戶就可以更改他們的口令,並使更改立即在主域控制器上生效。

PAM的一組配置文件位於/etc/pam.d/,它們用於各種驗證服務。當應用程序產生一個驗證請求時,PAM代碼就會查找這些配置文件,以便決定按什麼樣的次序裝載哪些模塊來執行驗證核查。利用PAM的這種多介面形式可以很方便地為winbind添加新的驗證服務。只須把pam_winbind.so模塊拷貝到/lib/security/目錄中,並更新配置文件,使相關的服務通過winbind來進行驗證。詳情請參考PAM文檔。


--------------------------------------------------------------------------------

7.4.4. 用戶及組ID的分配
當在Windows NT中建立一個用戶或組賬號時,系統就為之分配一個數字關係符(RID),而UNIX則在一定的數字範圍內使用合適的值產生uid和gid。winbind要做的就是對這兩種標識符進行互相轉換,它在UNIX系統可用的uid和gid範圍中尋找可用於保存NT用戶和組賬號的值。當首次解析NT用戶時,就把該範圍內可用的下一個uid值分配給他,對於解析組賬號也是同樣操作。今後,winbind就可以把NT賬號完全映射到UNIX賬號了。winbind把映射結果保存在tdb資料庫中,保證了映射操作的可靠性。


--------------------------------------------------------------------------------

7.4.5. 緩存結果
持續運行的系統會產生大量的用戶及組賬號查詢。為了使這些查詢不影響網路流量,winbind使用了一種緩存機制,這種機制是基於PDC所提供的SAM序列號的。winbind把PDC返回的用戶及組賬號信息和序列號一起緩存起來,只要修改了用戶或組賬號信息,NT就會把對應的序列號增值,如果winbind發現一個緩存過的序列號過期了,就再向PDC發出請求,並把返回結果與緩存項進行比較,如不匹配,就丟棄緩存信息,直接向PDC要求更新。


--------------------------------------------------------------------------------

7.5. 安裝及配置
安裝winbind最簡單的方法就是使用Samba鏡像站提供的工具包了,它位於站點的pub/samba/appliance/


[火星人 ] Samba計劃文檔已經有1127次圍觀

http://coctec.com/docs/net/show-post-68482.html