Samba使用smbpasswd實現user安全級別配置

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

1、準備Samba軟件
1. 安裝Samba相關軟件包,安裝過程略
2. 備份samba配置文件,咱們後面要本身從頭新建一個配置文件
  1. sudo mv /etc/samba/smb.conf /etc/samba/smb-original.conf
  2. sudo touch /etc/samba/smb.conf

2、工做場所
咱們在/etc/samba目錄下工做,涉及的文件都在這個目錄下。

3、相關文件
用smbpasswd完成user安全級別須要修改或者生成的文件只有下面3個:
/etc/samba/smb.conf        # samba配置文件,你們都懂的
/etc/samba/smbusers        # 用來定義用戶名映射,好比能夠將root換成administrator、admin等
/etc/samba/smbpasswd       # samba密碼存放文件
下面簡單描述一下這3個文件。

4、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用來指定該共享資源是否可用。

5、smbusers 文件
該文件格式以下:
系統用戶名 = 映射的虛擬帳號1,映射的虛擬帳號2,...
例如:
  1. songyd = admin
songyd用戶是samba用戶,也是一個Linux系統的帳號,爲了避免讓samba用戶知道存在songyd這個系統帳號,可用這個文件實現songyd帳號到虛擬帳號admin的一個映射。只需告訴使用者用admin帳號登錄便可,這樣就保護了songyd這個帳號。固然此時用songyd帳號登錄samba也是能夠的。

6、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文件中添加記錄。

7、最後結果
  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

8、重啓服務
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

9、軟件環境
Linux系統  :ubuntu 11.10
Samba版本:Samba 3.5.11

10、小結
這僅是快速實現user安全級別的samba共享的一個例子,介紹得很粗淺,省略了不少未涉及內容。網上介紹samba配置的文章不少,如有更復雜需求,請你們google之,baidu之:)
相關文章
相關標籤/搜索