第十七章 SAMBA 網絡芳鄰
17.1 安裝 Samba
在MS windows 系統(tǒng)中,我們可以使用 "網絡上的芳鄰"。而 FreeBSD 中也有軟件可以讓你在 windows 的網芳中看到 FreeBSD,甚至可以讓 FreeBSD 存取 windows 的網芳數據。這就是 Samba 這套軟件的功能。
Samba 的安裝設定很簡單,我們可以使用 ports 來安裝:
# cd /usr/ports/net/samba # make install clean
接著,將出現圖 17-1 的畫面,讓您做一些偏好設定:
圖 17-1
我們選擇 syslog、acl、quota、recyle。syslog 讓我們可以將 samba 的執(zhí)行訊息經由 syslogd 記錄下來。ACL 是 Access Control List 的縮寫,您可以在 Windows NT 中設定檔案權限,samba 可將 Windows 的權限對映在 FreeBSD 中。Quota 可支持使用者配額設定,而 recycle 就是資源回收筒。完成后就可以選 OK 繼續(xù)編譯了。
安裝完后,組態(tài)文件的范本會放在 /usr/local/etc/smb.conf.default,我們可以直接復制它來加以修改:
# cd /usr/local/etc/ # cp smb.conf.default smb.conf
Samba 的組態(tài)設定除了可以使用文字編輯軟件來修改 smb.conf 外,我們還可以使用瀏覽器連到 Samba 以圖形化接口來設定。
我們先來介紹一下 smb.conf 檔案的內容,在 smb.conf 檔案中行首為 ";" 或 "#" 都是批注。我們可以 man smb.conf 來讀取設定說明。修改完 smb.conf 之后,我們可以使用指令 "testparm" 來查看我們的設定有沒有語法上的錯誤。以下為 smb.conf 的主要的設定說明:
#===================== Global Settings ========================= [global] # workgroup 就是設定計算機的工作群組。 workgroup = 企管系 # server string 相當于在 NT 中的計算機描述,就是你的計算機要叫什么 # 名字 server string = Samba 服務器 # 這個設定可以限制聯機來源,以增加安全性。我們可以在這里限制 # 只有 # 本地的機器才可以聯機。 ; hosts allow = 192.168.1. 192.168.2. 127. # 如果希望自動加載列表機清單,而不要一臺臺設定,可以設為 yes。 load printers = yes # 如果你要自己設定 guest account,可以將這里的批注拿掉,并在 # /etc/passwd 中加入該賬號。如果不設定,預設的賬號是 nobody。 ; guest account = pcguest # Samba 會將每個使用者的使用記錄存成 log.使用者,因此我們在 # /var/log 中建立一個目錄來統(tǒng)一存放這些檔案。 log file = /var/log/samba/log.%m # log 檔最大是多少 Kb max log size = 50 # 要使用哪一種安全模式。在 Windows 9X 的網芳中,我們可以設 # 密碼,而在 Windows NT 中,我們可以設定使用者名稱及密碼。 # 如果在這里設定為 share,就是只使用密碼;而設為 user 則是 # 要輸入使用者名稱及密碼。如果我們設為 user,client 端在瀏 # 覽網芳時,windows 會自動輸入使用者名稱為登入 windows 時所 # 使用的名稱。我們必須要在 samba 中加入相對的使用者及密碼。 # 我們等一下會以圖形接口說明如何設定。 security = user # 當 security = server 時,可以指定密碼服務器 ; password server = # Windows 98 及 WinNT SP3 以上會將密碼加密,我們必須將它設為 yes encrypt passwords = yes # 設定 Samba 可以使用多個接口,如果你有多張網絡卡,可以在這里設定 # 假設你的 ip 是 140.115.25.25,子網掩碼是 255.255.255.0,你可以設 # 為 140.115.25.25/24 interfaces = 192.168.1.1/24 # Windows Internet Name Serving Support Section: ; wins support = yes # WINS Server - 設定 WINS Server ; wins server = w.x.y.z # for Traditional Chinese Users # 要在網芳中使用中文必需加入下列設定 client code page=950 ; coding system=cap valid chars = 0xb9 #========================== Share Definitions ============== # 這個區(qū)斷是用來設定我們要分享的數據來。在這個區(qū)斷中,有幾個 # 設定的范例可以讓我們參考。例如,我們要分享的目錄是 # /home/share,設定該目錄的分享名稱為 "共享軟件",只可以讀取 # 不能寫入,而且不必使用密碼,設定為 guest ok=yes 必須要有 # security = share 的配合 # [共享軟件] path = /home/share guest ok = Yes writeable =no browseable = yes # 另一個范例,假設我們要一個上傳區(qū),分享路徑為 /home/upload, # 可以使用的賬號是 friend,我們必需先用 vipw 建立 friend 的帳 # 號,加入下行 # friend:*:60000:65534::0:0:Samba user:/home/upload:/sbin/nologin # 接著再以指令 smbpasswd -a friend 來建立密碼。然后在修改 # upload 目錄的權限 chown friend /home/upload [上傳區(qū)] path = /home/upload username = friend read only = No |
對分享的數據夾除了要在 samba 設定你想要的權限外,對于該目錄在 UNIX 系統(tǒng)上的讀寫權限也要配合。如果你在 Samba 中的設定都正確,卻發(fā)現無法對該數據來寫入,很可能是在系統(tǒng)中的權限沒有正確設定,必須以 chmod 來加以修改。完成了設定之后,我們可以啟動 Samba 了:
# /usr/local/etc/rc.d/samba.sh.sample
如果要在一開機就啟動 Samba:
# cp /usr/local/etc/rc.d/samba.sh.sample /usr/local/etc/rc.d/samba.sh
17.2 Samba 命令列工具介紹
在命令列中有一些工具可以讓我們設定使用者數據、瀏覽目前使用情形等,除了命令列的工具外,我們也可以使用圖型接口來管理。我這個小節(jié)我們先介紹一些基本的命令指令。
17.2.1 smbpasswd
smbpasswd 是一個用來在命令列管理 samba 使用者的工具,我們可以用它來新增使用者、修改使用者密碼、甚至可以執(zhí)行它來修改其它主機上的 samba 密碼。
smbpasswd 這個指令會將 samba 的使用者信息存放在另一個名為 smbpasswd 的文字文件中,這個文字文件的位置依你安裝 samba 時所下的參數而有所不同,如果您以 ports 安裝,則 smbpasswd 位于 /usr/local/private 下,你可以使用文書編輯器去觀看它的內容。
samba 的使用者和系統(tǒng)使用者所使用的密碼文件是分開的,系統(tǒng)中的密碼設定并非 samba 所使用的密碼,但是要加入 samba 的使用者一定要存在于系統(tǒng)中。
一般使用者如果要使用 smbpasswd 指令來修改密碼,只要輸入 smbpasswd 即可,而 root 可以使用一些參數去新增、修改、刪除使用者,其使用格式如下:
# smbpasswd [參數] [使用者] [密碼]
以下我們介紹一些 root 常用的參數:
參數 | 說明 |
-a | 新增一個使用者,并設定密碼。如果該使用者已存在,則只進行修改密碼的動作。 |
-d | 暫時禁止某一個使用者登入。使用這個參數后,smbpasswd 會在該使用者數據中加一個 D 的符號,如此一來,該使用者便無法登入。下次我們再開放該使用者登入時,他的密碼數據還是維持不變。 |
-e | 開放被禁止登入的使用者登入。這個參數執(zhí)行后,會將 smbpasswd 中該使用者數據中的 D 等號移除,該使用者便又可以登入了。 |
-x | 刪除一個使用者的數據。 |
例如,我們想要新增一個使用者 alex,并設定其密碼為 password:
# smbpasswd -a alex password
但我建議您不要在命令列中直接輸入密碼,而是以下列方式來新增使用者:
# smbpasswd -a alex New SMB password: Retype new SMB password: Added user alex.
如果您要刪除使用者 alex:
# smbpasswd -x alex
smbpasswd 還有其它更進一步的功能,您可以 man smbpasswd 以獲得更多信息。
17.2.2 smbstatus
smbstatus 可以讓我們知道目前系統(tǒng)中 samba 的使用情形。執(zhí)行 smbstatus 后的信息如下:
Samba version 2.2.8a Service uid gid pid machine ---------------------------------------------- picture root wheel 36153 desktop (192.168.0.2) Sun Oct 31 23:01:16 2004 public root wheel 36153 desktop (192.168.0.2) Mon Nov 1 14:35:40 2004 mp3 root wheel 36153 desktop (192.168.0.2) Mon Nov 1 10:21:51 2004 video root wheel 36153 desktop (192.168.0.2) Mon Nov 1 10:21:50 2004 Locked files: Pid DenyMode Access R/W Oplock Name ------------------------------------------------------- 36153 DENY_NONE 0x20089 RDONLY LEVEL_II /home/mp3/song.mp3 Mon Nov 1 17:31:14 200 |
第一個部份顯示的是目前使用者正在使用的數據夾名稱,而第二個部份則是正在使用的檔案。
17.2.3 nmblookup
我們可以使用 nmblookup 來查詢網絡上 NetBIOS 主機的信息,您可以用來查詢 windows 或 samba 服務器的計算機名稱、IP 等信息。假設我們想要查詢 192.168.0.2 這一臺機器的 NetBIOS name:
# nmblookup -A 192.168.0.2 Looking up status of 192.168.0.2 DESKTOP <00> - BDESKTOP <20> - B WORKGROUP <00> - B WORKGROUP <1e> - B
上列信息中,我們可以看到 192.168.0.2 這臺機器的名稱為 DESKTOP,其群組為 WORKGROUP。您也可以由 NetBIOS 名稱反查其 IP:
# nmblookup desktop querying desktop on 192.168.0.255 192.168.0.2 desktop<00>
17.3 使用 swat 設定
除了使用文字編輯軟件來修改 smb.conf 外并用命令列工具設定使用者數據名,我們可以使用 Samba 內建的 swat 來進行設定。首先編輯 /etc/inetd.conf,將最下方 swat 的批注拿掉:
swat stream tcp nowait.400 root /usr/local/sbin/swat swat |
接著再確認 /etc/services 中有沒有下面這一行,如果沒有則自行加入:
swat 901/tcp |
最后重新啟動 inetd:
# kill -1 `cat /var/run/inetd.pid`
然后就可以使用瀏覽器以 port 901 連到 Samba Server了。假設 Samba 的 ip 是 192.168.0.1,則輸入 http://192.168.0.1:901,被要求輸入賬號密碼時,請輸入 root 及其密碼。接著出現圖 17-2 的畫面:
圖 17-2
我們選GLOBALS來看全域設定:
圖 17-3
這里的每一個選項,我們都可以參考 /usr/local/etc/samba.conf.defaults 來設定,設定完后記得要 " Commit Changes" 來使設定生效。
如果要開放一個新的目錄,我們可以選 SHARES 來設定分享的資料夾:
圖 17-4
我們可以在 Create Share 字段中建立要分享的資料來名稱,再按 "Create Share" 來設定。或是選擇 "Choose Share"、"Delete Share" 來選擇或刪除已分享的目錄。
其它的各項功能選項說明如下:
以設定新的使用者為例,如果我們要建立一個新的使用者 friend:
圖 17-5
使用者 friend 必須己存在于 /etc/passwd 中,否則要自行以 vipw 建立:
friend:*:60000:65534::0:0:Samba user:/home/upload:/sbin/nologin |
建立之后就可以在上圖中 User Name 中輸入 friend 并密碼。這個功能取代了使用 smbpasswd -a 來建立賬號的功能。
如果有任何問題,或是想知道更多關于 Samba 的設定,可以到 Samba 網站(http://www.samba.org/)。
17.4 Windows 設定
MS windows 系統(tǒng)的設定方面,鼠標右鍵點選桌面 [網絡上的芳鄰] -> [內容]:
圖 17-6
必須要有 Client for Microsoft Networks 及 File and printer sharing for Microsofe Networks。如果要設定使用者名稱,在主網絡登入請選 Client for Microsoft Networks。
工作群組及計算機名稱的設定如下:
圖 17-7
如果你設定某個目錄必須輸入使用者名稱,但在瀏覽該目錄時卻怎么輸入密碼都沒有用,可能是你在進入 windows 時所使用的名稱不正確:
圖 17-8
這時候就必須先注銷原本的使用者,再以該目錄要求的使用者名稱登入。
17.5 存取 MS Windows 的網芳資料
如果您要使用 FreeBSD 來存取 MS Windows 的網芳數據,FreeBSD 中內建有 mount_smbfs 這個工具,可以讓我們將所要存取的主機及其目錄掛在檔案系統(tǒng)中。掛入后,存取的方式就好像檔案位于硬盤中一樣,十分方便,而且對于中文的存取也沒有問題。mount_smbfs 是在 4.5-RELEASE 之后才內建的,如果您的系統(tǒng)在 4.5-RELEASE 之前,您必須要自行從 ports 中安裝 /usr/ports/net/smbfs。
在使用 mount_smbfs 時,如果您的 kernel 并未將 SMB protocol 編譯進來也沒關系,系統(tǒng)在使用前會自動加載 smbfs.ko 這個模塊。如果您想將該模塊內建在核心中,我們可以在核心設定中加入下列幾個選項,并重新編譯核心:
# SMB/CIFS requester # NETSMB enables support for SMB protocol, it requires # LIBMCHAIN and LIBICONV options. # NETSMBCRYPTO enables support for encrypted passwords. options NETSMB #SMB/CIFS requester options NETSMBCRYPTO #encrypted password support for SMB # mchain library. It can be either loaded as KLD or compiled into kernel options LIBMCHAIN #mbuf management library # Kernel side iconv library options LIBICONV options SMBFS #SMB/CIFS filesystem |
編譯完核心并重新啟動后,便可以使用 mount_smbfs 了。
假設我們要存取的主機數據如下:
我們可以使用下列指令來掛入:
# mount_smbfs -I 192.168.0.2 -N '//內務總管/software' /mnt
這里的參數 I 表示指定 IP 地址,參數 N 表示不須密碼驗證。如果您所要掛入的分享數據夾需要密碼認證,則不要加參數 N。我們在掛入別臺計算機的數據夾時,如果沒有指定使用者名稱,內定會以目前所使用的賬號。如果我們要使用別的使用者名稱,可以使用下列方式:
# mount_smbfs -I 192.168.0.2 '//username@內務總管/software' /mnt
將分享的資料夾掛入后,我們就可以使用 FreeBSD 檔案處理的指令,諸如 cp、mv等來抓取我們所要的檔案,就像是從本機硬盤中使用檔案一樣。