配置和使用Samba
FreeBSD下實現SMB/CIFS協議的軟件為samba ── 一個可以運行在很多種Unix系統中的著名自由軟件,它使得Unix對外如同一個Lan Manager服務器,向Windows客戶提供文件和打印服務。 Samba的當前版本為2.0,在FreeBSD下可以通過Packages Collection或Ports Collection進行安裝。
雖然SMB協議主要用於Microsoft網絡,但samba的出現與其無關。它是作者Andrew Tridgell 試圖在一台Sun工作站上完成DEC Pathworks功能的嘗試,以完成他的其他研究工作。Pathworks 是另一個基於SMB的服務器。那時Andrew Tridgell對SMB和NetBIOS一無所知,但通過分析DOS客戶端和Pathworks的行為,他完成了Samba的最初版本。此後隨著越來越多的人加入Samba的開發,Microsft也公開了SMB的文檔,Samba也越來越完善。使用Samba的使用者一般都會使用過Windows NT等其他SMB服務器,根據他們的經驗,Samba服務器的性能要超過其他的各種SMB服務器,包括Windows NT。
samba軟件的主要組成部分有:
smbd:這就是samba的SMB服務器,它使用SMB協議與客戶連接,完成事實上的用戶認證、權限管理和文件共享任務;
nmbd:提供NetBIOS名字服務的守護進程,可以幫助客戶定位服務器和域,如同Windows NT上的WINS服務器;
swat:是一個Samba專用的WWW服務器,用於通過客戶浏覽器配置samba,提供了對Samba的圖形配置界面;
smbclient:是一個簡單的SMB客戶程序,用於訪問其他SMB計算機共享的文件或打印資源,例如Windows95 或NT計算機,它的操作和ftp類似。
smbprint:一個shell腳本,它使用smbclient向Windows計算機上共享出的打印機上發送要打印的文檔。
nmblookup:用於查詢NetBIOS名字的命令行工具。
安裝samba
# pkg_add samab-2.0.2.tgz
# cd /usr/local/etc
# cd rc.d
# cp samba.sh.sample samba.sh
# sh samba.sh
Samba
# smbclient -L localhost -U%
Added interface ip=202.102.245.60 bcast=202.102.245.255 nmask=255.255.255.0
Domain=[MYGROUP] OS=[Unix] Server=[Samba 2.0.2]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server)
ascii Printer lj5gray-a4-ascii-mono
lp2 Printer lj5gray-a4-auto-mono
lj5gray-a4-ra Printer lj5gray auto raw
wb Disk Home Directories
Server Comment
--------- -------
fbsdsrv Samba Server
Workgroup Master
--------- -------
MYGROUP
從這個輸出結果可以看出,缺省使用的工作組為MYGROUP,提供共享的資源有IPC$,用戶個人目錄wb,以及系統中存在的多個打印機資源。samba使用計算機的hostname生成它NetBIOS名字fbsdsrv。
最一般的情況下,只需要將工作組名字改動為與具體網絡使用的名字相一致,就能使得使用Windows計算機的客戶正常訪問samba服務器了,用戶在登錄Windows的時候,使用自己在samba所在的Unix服務器上的用戶名和口令登錄,那麼就可以訪問samba服務器上自己的個人目錄及打印機資源了。
FreeBSD將Samba的文檔安裝到/usr/local/share/doc/samba目錄下,一些設置文件的例子被安裝到/usr/local/share/examples/samba目錄下,這些文檔和例子對於理解SMB協議,正確設置Samba都是非常重要的參考資料。
啟動samba方式
啟動samba的基本方法是使用Package中提供的shell程序 ── 安裝在/usr/local/etc/rc.d目錄下的samba.sh。這個程序將會以守護進程的方式啟動smbd和nmbd兩個守護進程(啟動時使用-D參數)。這樣在計算機啟動時就能自動啟動samba服務器。
netbios-ssn stream tcp nowait root /usr/local/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/local/sbin/nmbd nmbd
其中netbios-ssn和netbios-ns是在/etc/services中定義的兩個用於NetBIOS 的端口,一個用於NetBIOS會話管理,一個用於NetBIOS名字解析。當這兩個端口就被inetd占據之後,使用上面啟動腳本或直接啟動smbd和nmbd就無法成功。但由於inetd效率較低,啟動服務器較慢,這種配置只適合偶爾共享自己的文件的計算機,不適合會被頻繁訪問的文件/打印服務器。
當使用samba.sh啟動samba之後(或者使用inetd來啟動samba),就可以從Windows 客戶機的網絡鄰居中發現這個FreeBSD服務器。或者使用net use命令直接訪問服務器。
由於一般在Windows中沒有配置WINS服務器,那麼就可能會出現名字解析的問題。為了幫助進行名字解析,可以在Windows的lmhosts文件中增加samba服務器的NetBIOS名字和IP配置,幫助Windows 解析名字。或者使用samba作為NBNS服務器。