SAMBA架設

来源:百度文库 编辑:神马文学网 时间:2024/06/12 05:33:55
SAMBA架設2006-12-02 20:10


Network File System, NFS       NFS 僅能讓 Unix 機器溝通
Common Internet File System, CIFS   『網路上的芳鄰』  只能讓 Windows 機器溝通
Server Message Block (SMB)        SAMBA 過『網路上的芳鄰』來進行 Linux 與 Windows 檔案的傳輸


SAMBA 這個檔案系統是架構在 NetBIOS ( Network Basic Input/Output System, NetBIOS )這個通訊協定上面所開發出來的。NetBIOS 是無法跨路由的
透過這個 NetBIOS over TCP/IP 的技術,我們就可以跨路由的使用 SAMBA 伺服器所提供的功能咯!
NetBEUI    IBM 在 NetBIOS 發展出來之後的改良版本

那麼 SAMBA 在 Linux 作業系統上面工作時,需要啟用什麼服務呢 ( daemons )?讓我們先以 Windows 的『網路上的芳鄰』來做簡單的說明:
<1>當我們想要登入某部 Windows 主機使用他所提供的檔案資料時,必需要加入該 Windows 主機的群組 ( Workgroup ),並且我們的機器也必需要設定一個主機名稱,注意喔,這個主機名稱跟 Hostname 是不一樣的,因為這個主機名稱是架構在 NetBIOS 協定上的,我們可以簡單的稱呼他為 NetBIOS Name 好了。在同一個群組當中,NetBIOS Name 必需要是獨一無二的喔!
<2>好了,等到我們登入該主機之後,能不能使用該主機所提供的檔案資料還要看 Windows 主機有沒有提供我們使用的權限吶!所以,並不是登入該 Windows 主機之後,我們就可以無限制的取用該主機的檔案資源了。也就是說,如果對方主機允許你登入,但是卻沒有開放任何資源讓您取用,呵呵,登入主機也無法查看對方的硬碟裡面的資料的啦!


◆ SAMBA 主機就使用兩個 daemons 來管理這兩個不同的服務:
           smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享什麼目錄、檔案與印表機等等的內容。
           nmbd :這個 daemon 則是用來管理群組啦、NetBIOS name 啦等等的解析。

◆ 在最後檢驗的時候,您的系統應該有點像底下這個樣子(以 Red Hat 9 為例):
[root@test root]# rpm -qa | grep samba
samba-common-2.2.7a-8.9.0
redhat-config-samba-1.0.4-1
samba-2.2.7a-8.9.0
samba-client-2.2.7a-8.9.0
注意一下,上面顯示的例子是 Red Hat 9 的檔案,其中那個 redhat-config-samba  是 Red Hat 額外提供的設定功能,可以不用安裝他啦!


◆ SAMBA 的設定檔:
/etc/samba/smb.conf:這個就是 SAMBA 最主要的設定檔了!
/etc/samba/lmhosts:這個檔案的主要目的在對應 NetBIOS name 與該主機名稱的 IP ,事實上,他有點像是 /etc/hosts 的功能!
/etc/samba/smbpasswd:這個檔案預設並不存在啦!他是 SAMBA 預設的使用者密碼對應表。

SAMBA 的執行檔:
一般來說,做為 SAMBA Server 的執行檔有 testparm, smbd, nmbd, smbpasswd,至於做為 SAMBA Client 的執行檔主要則是:smbmount, smbclient。
    smbclient:當你的 Linux 主機想要藉由『網路上的芳鄰』的功能來查看別台電腦所分享出來的目錄與裝置時,就可以使用 smbclient 來查看啦!這個指令也可以使用在自己的 SAMBA 主機上面,用來查看是否設定成功哩!
    smbmount:在 Windows 上面我們可以設定『網路磁碟機』來連接到自己的主機上面,同樣的,在 Linux 上面,我們可以透過 smbmount 來將遠端主機分享的檔案與目錄掛載到自己的 Linux 主機上面哪!不過,其實我們也可以直接使用 mount 這個指令來進行同樣的功能就是了。


SAMBA 的相關目錄:
/usr/share/doc/samba:這個目錄包含了 SAMBA 的所有相關的技術手冊喔!
/var/log/samba:這個目錄就是 SAMBA 預設的登錄檔放置目錄了!
/usr/share/samba/codepages:這個目錄裡面放置的就是各個語言的支援格式

如果您的 Linux 主機單純要用來做為檔案伺服器的話 (File Server)
在規劃 Linux 時,/home 最好獨立出一個 partition ,而且硬碟空間最好能夠大一些;
/home 獨立出來的 partition 可以單獨進行 quota 的作業,以規範每個使用者能夠使用的最大硬碟容量;


◆ 整個流程大概就是這麼簡單吧!事實上,在 Linux 底下的設定也是這麼簡單的啦!
 
先參考 區域網路的設定 那一章節,先搞定硬體的連線吧!
之後,先在 linux 上面的 SAMBA 設定檔 smb.conf 裡面設定好主機所支援的各項功能,例如是否需要密碼、是否支援 PDC 等等;
然後在 smb.conf 的後半部當中設定好想要分享的目錄與該目錄的屬性;
如果在步驟 2 裡面的 smb.conf 檔案內設定的分享方法是需要帳號與密碼的登入時,就以 smbpasswd 建立使用者的帳號與密碼;
啟動 smb 的服務,開始運轉囉!


§ smb.conf 的主要規劃

smb.conf 這個檔案裡面主要是以 [global/share directory] 開始一個主要設定的內容,這個檔案裡面,『 # 』與『 ; 』都是註解的意思喔!

[root@test root]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.raw
[root@test root]# vi /etc/samba/smb.conf
# 這個檔案本身就是很詳細的說明檔,限於篇幅,我們沒有將註解的部分寫下來, 這裡的目的是想讓大家瞭解 smb.conf 的內容規劃咯!
[global]
   workgroup = birdhouse
   server string = Linux Samba Server
   netbios name  = birdlinux
   client code page = 950
   printcap name = /etc/printcap
   load printers = yes
   printing = lprng
   log file = /var/log/samba/log.%m
   max log size = 500          #  那個 500 數字是 Kb 喔!
   security = user
   encrypt passwords = yes
   smb passwd file = /etc/samba/smbpasswd
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 上面的幾行當中,注意 [global] ,由 [global] 到底下的 [Webpage] 之間的設定都是 [global] 的設定項目!而 [global] 的主要內容都是與主機的設定有關!
# 比較重要的有底下幾個設定值:
# workgroup  工作群組:同一個區域網路內,要具有相同的 workgroup
# netbios name  主機名稱:這個主機名稱就是 netbios 的名字!請注意,如果你沒有設定 netbios name 的話,預設的 NetBIOS name 會以 HOSTNAME 來替代!
# server string 這個是主機的說明,隨便寫寫沒關係!
# security   這個重要,是用來規定 SAMBA 主機的安全登入項目,有底下幾種:
#        share  :不進行安全登入,亦即沒有設定帳號與密碼
#        user  :設定主機的密碼檔作為登入的驗證檔案,這與底下的
#            smb passwd file 有關喔!
#        domain :就是讓您的 SAMBA 作為 PDC 囉!
# log file   登錄檔放置的目錄所在喔!
# 其他相關的幾個設定項目請參考 man 5 smb.conf 我們底下也會列出幾個常用的 設定項目說~
 
[Webpage]
   comment      = My Home Page
   path         = /var/www/html
   read only    = no
   public       = yes
   writable = yes
   create mode = 0664
   directory mode = 0775
# 這個部分則是針對每個分享的目錄或者是裝置進行權限方面的規定了!
# 幾個簡單的設定項目有:
# comment  :這個目錄的說明!
# path     :這個項目真正的 Linux 檔案系統裡面的目錄,請看底下的說明
# read only   :是否唯讀?
# public      :是否讓所有可以登入的使用者看到這個項目?
# writable     :是否可以寫入?!這裡需要注意一下喔!那個 read only 與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這裡設定為 no ,亦即不可寫入,那跟 read only 不就互相抵觸了?!那個才是正確的設定? 答案是:最後出現的那個設定值為主要的設定!


■ 沒有防備的 SAMBA 分享檔案設定

<1> 主機預計分享的狀況:
在整個 LAN 裡面的工作群組 ( workgroup )為:birdhouse
我的 Linux 主機 NetBIOS 名稱為 ( netbios name ):birdhome
安全設定為沒有防備的 share (share 為 smb.conf 裡面 security 的設定值)
僅僅分享 /tmp 這個目錄而已~

<2> 設定 lmhosts :
事實上,這個檔案目前是可以不用設定了!不過,如果保險一點來看,設定一下也沒有什麼不好的!---每一部 PC 的 NetBIOS name 以及對應的 IP
[root@test root]# vi /etc/samba/lmhosts
127.0.0.1      localhost
192.168.0.100  birdhome

<3> 開始設定 smb.conf:

[root@test root]# cd /etc/samba
[root@test samba]# cp smb.conf smb.conf.bak
# 玩伺服器最重要的一個概念就是『有備無患』啊!
# 所以,先將重要的資料給他備份下來! ^_^
 
[root@test samsa]# vi smb.conf
# 底下的設定為最基礎的設定值!最重要的地方在於 security = share 的地方!
[global]
   workgroup = birdhouse
   netbios name = birdhome
   server string = Bird‘s testing SAMBA Server
   client code page = 950
#  這個 client code page 的設定有趣的很!因為 SAMBA 支援多語系的編碼, 我們習慣的編碼為 cp590 亦即是 code page 950 這個編碼,所以,想要讓您的 SAMBA 可以正確的在 Windows 上面顯示出中文,就得加入  client code page = 950 喔! (如果沒有設定,那麼預設值是 850 呢!)
   log file = /var/log/samba/log.%m
   max log size = 0     #  如果 max log size = 0 的話,那表示登錄檔檔案大小沒有限制!
   security = share
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  ; interfaces = 192.168.0.100
   dns proxy = no
[tmp]
   comment = Temporary file space
   path = /tmp          #  真正的開放出來的路徑在這裡!
   read only = no
   public = yes          #  上面兩個設定在告訴大家,不但可以存取(read only = no) 也可以讓大家查詢(public = yes)!
 
[root@test samba]# grep -v ‘^#‘ smb.conf |grep -v ‘^;‘|grep -v ‘^$‘
# 這個動作在確認一下上面的設定是否相同,因為有時候可能會忘記將某個
# 設定給註解掉呢! ^_^

<4> 測試 smb.conf 設定值與啟動 SAMBA :
[root@test samba]# testparm 

[root@test samba]# /etc/rc.d/init.d/smb restart

[root@test samba]# netstat -tlunp | grep ‘:13‘

不要忘記了,如果您原先就有設定防火牆的話,一定要去察看一下防火牆的設定是否已經啟動了 137 ~ 139 的登入?!


■ 設定需要使用者登入的 Workgroup  ( peer/peer 的連線 )

<1> 主機預計分享的狀況:
在整個 LAN 裡面的工作群組 ( workgroup )為:birdhouse
我的 Linux 主機 NetBIOS 名稱為 ( netbios name ):birdhome
安全設定為工作群組類型 user
分享家目錄與特定目錄 /home/public 給所有使用者使用

<2>開始設定 smb.conf 並檢驗 smb.conf 的設定參數:

[root@test samsa]# vi smb.conf
[global]
#  底下為一般設定項目(主機名稱、工作群組等)
   workgroup = birdhouse
   netbios name = birdhome
   server string = Bird‘s testing SAMBA Server
   client code page = 950
#  與安全有關的登入資訊項目,這個 security = user 一定要設定,而密碼需加密,此外,密碼檔案放置在 /etc/samba/smbpasswd 裡面,這個檔案需要自行設定起來喔!等一下會介紹!
   security = user
   encrypt passwords = yes
   smb passwd file = /etc/samba/smbpasswd
#  一些與安全性有關的設定,其中, hosts allow 較為有趣一點!當您設定了 hosts allow 之後,未在 hosts allow 裡面規定的 IP將無法登入 Linux 的 SAMBA 主機喔!特別留意吶!如果您想要完全開放 IP, 或者使用防火牆管理,那就不要設定 hosts allow 了!
   hosts allow = 192.168.0.  127.
   log file = /var/log/samba/%m.log
   max log size = 0
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   interfaces = 192.168.0.100
   dns proxy = no
# 底下則設定每個使用者的家目錄!
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   valid users = %S
   create mode = 0664
   directory mode = 0775
#  create mode 指的是新建立檔案的權限,而 directory mode 則是新建目錄的權限至於 valid users 則是有權限進入者,這裡設定為 %S 喔!所以,每個使用者就可以進入自己的家目錄了!
[public]
   comment = Public Stuff
   path = /home/public
   public = yes
   writable = yes
 
[root@test samba]# mkdir -p /home/public    # 上面既然有提到要開放 /home/public ,當然,這個目錄就必須要存在啊!

其實重點只有在於 security = user 以及 encrypt passwords 與 smb passwd file 這三行!有了這三行,您的 SAMBA 就需要去查詢使用者要登入時的帳號與密碼了
這個 valid users 指的是:『能夠登入這個目錄的使用者是誰?』的意思!

『在 SAMBA 主機所提供能夠登入的帳號,必須要在 /etc/passwd 裡面存在!』,無論您使用任何 process 在 Linux 上面,該程序都需要符合 Linux 系統的權限概念,也就是說, Linux 本身的檔案權限大於 SAMBA 對於使用者所設定的權限!

0. 根據 smb.conf 的設定,建立一個密碼檔!
  如果您是第一次建立 SAMBA 的使用者,才需要進行這個動作:
  因為我們在 smb.conf 裡面設定密碼 smb passwd file = /etc/samba/smbpasswd
[root@test root]# cd /etc/samba
[root@test samba]# touch smbpasswd
[root@test samba]# chown root:root smbpasswd; chmod 600 smbpasswd
# 請注意, smbpasswd 這個檔案記錄了能夠使用 SAMBA 伺服器的使用者帳號與密碼,所以當然只有 root 才能夠進行讀寫了!特別留意其權限啊!
 
1. 開始建立密碼:
[root@test samba]# smbpasswd -a bird 
New SMB password: <==在這裡輸入 bird 的密碼
Retype new SMB password: <==再輸入一遍 bird 的密碼
Added user test.
# 請特別留意, SAMBA 的密碼是放在 /etc/samba/smbpasswd 這個檔案內,當然, 您可以更改這個檔名 (在 smb.conf 裡面改),但是, Linux 系統的帳號密碼
# 是放在 /etc/shadow ,這也就是說, SAMBA 伺服器的密碼與 Linux 底下的帳號密碼並不一定要相同的!至於 smbpasswd 的使用大致上有幾個參數:
 
2. smbpasswd 之語法解釋
語法:smbpasswd [-adem] username 
參數:
   : 如果都沒有加上任何一個參數,亦即『smbpasswd bird』時,這表示:
   修改 SAMBA 密碼檔(/etc/samba/smbpasswd)裡面的 bird 這個帳號的密碼!
   也就是說,密碼檔裡面已經存在一個 bird 的帳號了!
-a : 在 smbpasswd 密碼檔裡面新增一個使用者
-d : 讓在 smbpasswd 密碼檔裡面的某個帳號的使用者暫時無法使用 SAMBA
   當多了 -d 的參數時,在 smbpasswd 裡面某個欄位會多出一個 D 的參數,
   代表該帳號目前無法使用喔!
-e : 與 -d 參數相反,讓某個帳號恢復使用!
-m : 該 username 為機器代碼(Machine Account),這個與 domain model 有關!
範例:
[root@test samba]#  more smbpasswd
bird:1001:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:[UX         ]:LCT-3F1ECFE6:
[root@vbird samba]# smbpasswd -d bird
Disabled user bird.
[root@vbird samba]# more smbpasswd
bird:1001:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:[DUX        ]:LCT-3F1ED105:
# 特別留意,當使用 -d 之後,該帳號會在密碼檔案裡面的中括號之特殊欄位中, 多出一個 D 的參數,讓該帳號暫時無法使用喔!

<3> 重新啟動 SAMBA 伺服器與 Client 端的測試:
[root@test samba]# testparm
[root@test samba]# /etc/rc.d/init.d/smb restart
[root@test samba]# smbclient -L //127.0.0.1 

§ 如果您還要擴充分享的目錄與能夠登入的使用者,可以這樣做:
利用編輯 smb.conf 來多開放其他的目錄,並且特別注意 Linux 在該目錄下的權限喔!請使用 chown 與 chmod 吧!
利用 smbpasswd 來新增其他使用者到 /etc/samba/smbpasswd 裡面去,如果該帳號並沒有出現在 /etc/passwd 裡面,請先以 useradd 新增該帳號;
不論進行完任何的設定,請先以 testparm 進行確認,之後以 /etc/rc.d/init.d/smb restart 來重新啟動!