Samba的安裝

在Windows與Linux之間共享文件,Samba是一個很常見的選擇:Linux運行Samba服務,Windows訪問Linux上共享的文 件。在不需要用戶訪問控制的場景下,Samba服務的安全級別設置爲共享(share)就可以了。我的需求是想對Samba服務的訪問者進行身份驗證,所 以選擇用戶安全級別(user)。user級別要求用戶訪問samba服務時提供用戶名和密碼,而且身份驗證由 samba server 負責。下面是用smbpasswd方式做的,因我的需求很單一,所以Samba的配置文件也非常簡單。這裏做個筆記記錄一下以備忘。

  

一、準備Samba軟件

1. 安裝Samba相關軟件包,安裝過程略

2. 備份samba配置文件,我們後面要自己從頭新建一個配置文件

  1. sudo mv /etc/samba/smb.conf /etc/samba/smb-original.conf

  2. sudo touch /etc/samba/smb.conf


二、工作場所

我們在/etc/samba目錄下工作,涉及的文件都在這個目錄下。


三、相關文件

用smbpasswd完成user安全級別需要修改或者生成的文件只有下面3個:

/etc/samba/smb.conf        # samba配置文件,大家都懂的

/etc/samba/smbusers        # 用來定義用戶名映射,比如可以將root換成administrator、admin等

/etc/samba/smbpasswd       # samba密碼存放文件

下面簡單描述一下這3個文件。


四、smb.conf 文件

samba自帶的smb.conf文件註釋很多,例子給的也不少,容易讓人覺得這個文件很複雜,其實它的框架很簡單,主要包括下面幾個小節:

  1. [global]


  2. [homes]


  3. [printers]


  4. [自定義小節]


其中[自定義小節]可以有多個,分別共享不同的目錄。

我不關心打印機共享,所以註釋掉了[printers]小節。

我 也不想讓用戶登陸samba之後看到自己的“家”目錄,所以也註釋掉了[homes]小節。因爲登陸samba server的用戶也同時必須是linux系統的用戶,即存在於/etc/passwd文件中的用戶,所以每個samba用戶會有自己的“家”目錄,在 /home下,目錄名稱是使用者自己的帳號。


我們主要關注[global]小節和[自定義小節],[global]小節中我們此次關注的重要參數有以下幾個:

  1. workgroup = WORKGROUP

說明:指明共享所在的工作組,可以是NT域名、工作組名


  1. server string = samba server on ubuntu

說明:客戶端看到的服務器的描述信息


  1. netbios name = ubuntu_smb

說明:設置Samba Server的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了


  1. interfaces = 127.0.0.0/8 eth0

說明:設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址


  1. hosts allow = 192.168.1. 192.168.163. 192.168.153.

說明:表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。我這裏只允許3個網段裏的所有客戶端訪問samba server。


  1. security = user

說明:設置用戶訪問Samba Server的驗證方式,一共有四種驗證方式。 

1. share:用戶訪問Samba Server不需要提供用戶名和口令, 安全性能較低。 

2. user:Samba Server共享目錄只能被授權的用戶訪問,由Samba Server負責檢查賬號和密碼的正確性。賬號和密碼要在本Samba Server中建立。 

3. server:依靠其他Windows NT/2000或Samba Server來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows用戶和口令集中到一個NT系統上,使用 Windows NT進行Samba認證, 遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作爲替代的方式。 

4. domain:域安全級別,使用主域控制器(PDC)來完成認證。

我只需要user級別的安全驗證就可以了。


  1. username map = /etc/samba/smbusers

說 明:用來定義用戶名映射,比如可以將root換成administrator、admin等。要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,以保護Linux的系統賬號root。後面會介紹這個文件。


  1. encrypt passwords = true

說明:是否將認證密碼加密。因爲現在windows操作系統都是使用加密密碼,所以一般要開啓此項。


  1. passdb backend = smbpasswd

說 明:passdb backend密碼驗證後端。目前支持的有三種:smbpasswd、tdbsam和ldapsam。其中smbpasswd方式是使用smb自己的工具 smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默 認在/etc/samba目錄下,不過有時候要手工建立該文件。這裏我選用smbpasswd。


  1. smb passwd file =/etc/samba/smbpasswd

說明:用來定義samba用戶的密碼文件。smbpasswd文件如果默認不存在,要手工新建。後面有介紹這個文件。


  1. log file = /var/log/samba/log.%m

說明:設定 samba server 日誌文件的儲存位置和文件名(%m代表客戶端主機名)。


  1. max open files = 1000

說明:同一客戶最多能打開的文件數目


  1. socket options = TCP_NODELAY

說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。



[自定義小節]小節主要的參數如下:


  1. comment = code

說明:comment是對該共享的描述,可以是任意字符串。


  1. path = /home/songyd/code

說明:path用來指定共享目錄的路徑。


  1. writable = yes

說明:writable用來指定該共享路徑是否可寫。這裏我們允許寫入,以滿足文件雙向共享。


  1. browseable = yes

說明:browseable用來指定該共享是否可以瀏覽。


  1. available = yes

說明:available用來指定該共享資源是否可用。


五、smbusers 文件

該文件格式如下:

系統用戶名 = 映射的虛擬賬號1,映射的虛擬賬號2,...

例如:

  1. songyd = admin

songyd 用戶是samba用戶,也是一個Linux系統的賬號,爲了不讓samba用戶知道存在songyd這個系統賬號,可用這個文件實現songyd賬號到虛 擬賬號admin的一個映射。只需告訴使用者用admin賬號登陸即可,這樣就保護了songyd這個賬號。當然此時用songyd賬號登陸samba也 是可以的。


六、smbpasswd 文件

該文件格式如下:

  1. name:uid:Lanman Password Hash:NT Password Hash:Account Flags:Last Change Time:

該文件可能默認並不存在,需要手動建立。建立後使用以下命令添加samba賬號songyd的密碼:

  1. sudo smbpasswd -a songyd

這個命令會在/etc/samba/smbpasswd中寫入類似如下內容:

  1. songyd:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:BC53166B76BB840735D6AB4438B4CD5E:[U          ]:LCT-4EA2F59B:

這些內容是命令自己添加的,我們不用去管。

【注意】有 時發現smbpasswd命令即使執行沒有錯誤,但/etc/samba/smbpasswd中卻沒有添加任何內容。這是由於smb.conf的 passdb backend參數配置不正確,此參數必須設置爲smbpasswd,這時smbpasswd -a songyd纔會在/etc/samba/smbpasswd文件中添加記錄。


七、最後結果

  1. [global]

  2.     workgroup = WORKGROUP

  3.     server string = samba server on ubuntu

  4.     netbios name = ubuntu_smb

  5.     interfaces = 127.0.0.0/8 eth0

  6.     hosts allow = 192.168.1. 192.168.163. 192.168.153.

  7.     security = user

  8.     username map = /etc/samba/smbusers

  9.     encrypt passwords = true

  10.     passdb backend = smbpasswd

  11.     smb passwd file =/etc/samba/smbpasswd

  12.     log file = /var/log/samba/log.%m

  13.     max open files = 1000

  14.     socket options = TCP_NODELAY


  15. ;[homes]

  16. ;   comment = home directories

  17. ;   browseable = no

  18. ;   writable = yes

  19. ;   valid users = %S

  20. ;   create mode = 0664


  21. ;[printers]

  22. ;   printable = Yes

  23. ;   browseable = No

  24. ;   path = /var/spool/samba


  25. [code]

  26.     comment = code

  27.     path = /home/songyd/code

  28.     writable = yes

  29.     browseable = yes

  30.     available = yes


八、重啓服務

smb.conf修改完成,smbusers也已添加完畢,smbpasswd文件也已通過命令成功添加了記錄,下面重啓samba服務即可。Samba 有兩個守護進程(nmbd 和 smbd),需要運行它們Samba 才能正常工作。

nmbd 是一個服務器,它可以理解和響應 NetBIOS over IP 命名服務請求,比如 Windows 95/98/ME、Windows NT、Windows 2000、Windows XP 和 LanManager 客戶機等 SMB/CIFS客戶機產生的請求。它還參與瀏覽協議,從而構建 Windows 網絡鄰居視圖。

smbd 是服務器守護進程,它向 Windows 客戶機提供文件共享和打印服務。這個服務器使用 SMB(或CIFS)協議向客戶機提供文件空間和打印服務。

  1. sudo service smbd restart

  2. sudo service nmbd restart


九、軟件環境

Linux系統  :ubuntu 11.10

Samba版本:Samba 3.5.11


十、小結

這僅是快速實現user安全級別的samba共享的一個例子,介紹得很粗淺,省略了很多未涉及內容。網上介紹samba配置的文章很多,若有更復雜需求,請大家google之,baidu之:)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章