與 Windows 共舞 - Samba

參考文件

  • pinfo smb.conf

所需套件

  • samba-3.0.10-1.4E (CentOS 4, 包含 smb 的 samba 伺服器程式)
  • samba-common-3.0.10-1.4E (CentOS 4, 包含常用的設定檔)

在 Windows 裡, 使用 "網路芳鄰" 來做 Windows 之間的分享; 在 Unix/Linux 裡, 使用 NFS 做資源分享, 使用 Samba, 就可以讓 Windows 和 Linux 使用 SMB 通訊協定來完成彼此之間的分享.

本篇文章, 大部份均使用 /etc/samba/smb.conf 這個檔案, 如有使用到別的檔案, 會另行說明.

讓 Linux 成為群組之一

要讓 Linux 成為 Windows 網路的群組之一, 就是要把自已加入群組, 設定的方法. 在 [global] 裡的 workgroup 要設定成 Windows 群組:

[global]
# workgroup 後面接的群組為 "務必大寫"
workgroup = HOME
server string = Steven's Note Book

設定完之後, (重新) 啟動 smb service

[root@nbcentos init.d]# ./smb start

接下來, 您就可以在 Windows 的網路芳鄰裡看到了。

這樣可以很清楚的看到, Nbcentos 是那台經由 samba 分享出來的電腦名稱, 而 註解欄位就等於是 server string 的設定.

建立一位使用者

能看到電腦了 ! 接下來一定會馬上想點兩下看看有分享些什麼 :) 但很不幸的居然需要帳號密碼 :-(

現在我們來建立一個用者密碼, 讓他能登入. 建立密碼的前提, 這個帳號必需為 "本機系統" 的實體帳號, 也就是說, 在設定密碼時, 前提是一定要有這位使用者才可以, 假設目前已經有了一位叫 steven 的 user, 現在要讓他能夠登入.

[root@nbcentos samba]# smbpasswd -a steven
New SMB password:
Retype new SMB password:
Added user steven.
[root@nbcentos samba]#

現在再輸入一次帳號密碼試看看!

看, 這樣就可以看到自己的家目錄了!

分享其它的目錄

現在系統除了使用者家目錄之外, 管理員也希望把一些文件也分享出來讓大家使用 (位置在 /documents) , 那麼我們就應該設立一個分享才行.

分享有一些條件, 就是只能讀取但無法寫入.

新增一個分享區塊

# 在最後加上一個區塊
[documents]
comment = The Administrator's CookBook
path = /documents
read only = yes
browseable = yes

設定完之後, (重新) 啟動 smb service

[root@nbcentos init.d]# ./smb start

再看一次有什麼變化

限定某些網段才可以使用本機分享

基於安全理由, 有些管理員可能希望這些分享只有在公司的網路才可以共享, 在其它的地方則不允許, 這時候我們可以使用 hosts allow 選項來讓我們達成這個目地.

# 只限定 192.168.1.0/24 可以分享資源
hosts allow = 192.168.1.

一樣, 您必需要重新啟動 smb 服務才行.

如果您不是在允許的範圍之內, 那麼在連接時就會發生錯誤訊息:

smb 系統已啟動, 其它電腦就是無法連線

samba 在執行時, 會使用 udp 137, udp 138, tcp 139, tcp 445 等 port, 如果一切就緒, 但還是無法連線, 那麼就有可能是您的防火牆沒有開放, 把他開啟就可以了, 如果您是使用 iptables 則可以考慮使用以下指令:

以下要開啟的 port 是和微風論壇的大哥實做之後得到的, 謝謝微風論壇的大哥 ^^

0001
0002
0003
0004
root # iptables -A INPUT -p udp --dport 137 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p udp --dport 138 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p tcp --dport 139 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p tcp --dport 445 -m state --state NEW -j ACCEPT

關於 udp 137, udp 138, tcp 139,tcp 445 的相關介紹, 請參考 Andrew 所提供的連結:
* http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/cnet/cnfc_por_simw.mspx?mfr=true
* http://support.microsoft.com/kb/179442

與事實相違? 已允許寫入確還是發生錯誤

當您在 smb.conf 設定了 user 可以在目錄寫入時, 確還是會出錯時, 這時您就要考慮要一點: 所有的 Service 允許的動作最後都要尊重 Filesystem 的權限.

上面意思是, 如果您允許 user 在 documents 放入自已的文件, 但是如果在主機 /documents 沒有給 user 寫入的權限, 那麼還是無法寫了的!

中文字發生錯誤?

相信大家在取檔名時,會發現一個很怪異的情況,就是中文檔名都變成亂碼了,就像下圖所示:

其實這是在 samba 中,字型編碼 code page 的問題,只要改成正確的 code page 就可以了,修改 /etc/samba/smb.conf。

# 在 [global] 區段裡加入以下三行
display charset = cp950
dos charset = cp950
unix charset = cp950

修改完之後,重新啟動 samba 就可以了。

root # service smb restart
停止 SMB 服務: [ 確定 ]
停止 NMB 服務: [ 確定 ]
啟動 SMB 服務: [ 確定 ]
啟動 NMB 服務: [ 確定 ]
root #

再來看一次,中文編碼應該沒問題了。

本例使用 samba 3.x,有關中文編碼的問題在 samba 2.x 並不適用。

Last modified: 02/28/2007
12/29/2005


首頁