第十七章 SAMBA 網路芳鄰
17.1 安裝 Samba
在MS windows 系統中,我們可以使用 "網路上的芳鄰"。而 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 的執行訊息經由 syslogd 記錄下來。ACL 是 Access Control List 的縮寫,您可以在 Windows NT 中設定檔案權限,samba 可將 Windows 的權限對映在 FreeBSD 中。Quota 可支援使用者配額設定,而 recycle 就是資源回收筒。完成後就可以選 OK 繼續編譯了。
安裝完後,組態檔的範本會放在 /usr/local/etc/smb.conf.default,我們可以直接複製它來加以修改:
# cd /usr/local/etc/ # cp smb.conf.default smb.conf
Samba 的組態設定除了可以使用文字編輯軟體來修改 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 中建立一個目錄來統一存放這些檔案。
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 ==============
# 這個區斷是用來設定我們要分享的資料來。在這個區斷中,有幾個
# 設定的範例可以讓我們參考。例如,我們要分享的目錄是
# /home/share,設定該目錄的分享名稱為 "共享軟體",只可以讀取
# 不能寫入,而且不必使用密碼,設定為 guest ok=yes 必須要有
# security = share 的配合
#
[共享軟體]
path = /home/share
guest ok = Yes
writeable =no
browseable = yes
# 另一個範例,假設我們要一個上傳區,分享路徑為 /home/upload,
# 可以使用的帳號是 friend,我們必需先用 vipw 建立 friend 的帳
# 號,加入下行
# friend:*:60000:65534::0:0:Samba user:/home/upload:/sbin/nologin
# 接著再以指令 smbpasswd -a friend 來建立密碼。然後在修改
# upload 目錄的權限 chown friend /home/upload
[上傳區]
path = /home/upload
username = friend
read only = No
|
對分享的資料夾除了要在 samba 設定你想要的權限外,對於該目錄在 UNIX 系統上的讀寫權限也要配合。如果你在 Samba 中的設定都正確,卻發現無法對該資料來寫入,很可能是在系統中的權限沒有正確設定,必須以 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 命令列工具介紹
在命令列中有一些工具可以讓我們設定使用者資料、瀏覽目前使用情形等,除了命令列的工具外,我們也可以使用圖型介面來管理。我這個小節我們先介紹一些基本的命令指令。
17.2.1 smbpasswd
smbpasswd 是一個用來在命令列管理 samba 使用者的工具,我們可以用它來新增使用者、修改使用者密碼、甚至可以執行它來修改其它主機上的 samba 密碼。
smbpasswd 這個指令會將 samba 的使用者資訊存放在另一個名為 smbpasswd 的文字檔中,這個文字檔的位置依你安裝 samba 時所下的參數而有所不同,如果您以 ports 安裝,則 smbpasswd 位於 /usr/local/private 下,你可以使用文書編輯器去觀看它的內容。
samba 的使用者和系統使用者所使用的密碼檔是分開的,系統中的密碼設定並非 samba 所使用的密碼,但是要加入 samba 的使用者一定要存在於系統中。
一般使用者如果要使用 smbpasswd 指令來修改密碼,只要輸入 smbpasswd 即可,而 root 可以使用一些參數去新增、修改、刪除使用者,其使用格式如下:
# smbpasswd [參數] [使用者] [密碼]
以下我們介紹一些 root 常用的參數:
| 參數 | 說明 |
| -a | 新增一個使用者,並設定密碼。如果該使用者已存在,則只進行修改密碼的動作。 |
| -d | 暫時禁止某一個使用者登入。使用這個參數後,smbpasswd 會在該使用者資料中加一個 D 的符號,如此一來,該使用者便無法登入。下次我們再開放該使用者登入時,他的密碼資料還是維持不變。 |
| -e | 開放被禁止登入的使用者登入。這個參數執行後,會將 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 可以讓我們知道目前系統中 samba 的使用情形。執行 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> - B
DESKTOP <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 系統的設定方面,滑鼠右鍵點選桌面 [網路上的芳鄰] -> [內容]:
圖 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 這個工具,可以讓我們將所要存取的主機及其目錄掛在檔案系統中。掛入後,存取的方式就好像檔案位於硬碟中一樣,十分方便,而且對於中文的存取也沒有問題。mount_smbfs 是在 4.5-RELEASE 之後才內建的,如果您的系統在 4.5-RELEASE 之前,您必須要自行從 ports 中安裝 /usr/ports/net/smbfs。
在使用 mount_smbfs 時,如果您的 kernel 並未將 SMB protocol 編譯進來也沒關係,系統在使用前會自動載入 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等來抓取我們所要的檔案,就像是從本機硬碟中使用檔案一樣。