零、問題需求
常常要在Windows與Linux之間共享文件,Samba是一個很常見的選擇:Linux運行Samba服務,Windows訪問Linux上共享的文件。在不須要用戶訪問控制的場景下,Samba服務的安全級別設置爲共享(share)就能夠了。個人需求是想對Samba服務的訪問者進行身份驗證,因此選擇用戶安全級別(user)。user級別要求用戶訪問samba服務時提供用戶名和密碼,並且身份驗證由 samba server 負責。下面是用smbpasswd方式作的,因個人需求很單一,因此Samba的配置文件也很是簡單。這裏作個筆記記錄一下以備忘。
1、準備Samba軟件
1. 安裝Samba相關軟件包,安裝過程略
2. 備份samba配置文件,咱們後面要本身從頭新建一個配置文件
- sudo mv /etc/samba/smb.conf /etc/samba/smb-original.conf
- 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文件註釋不少,例子給的也很多,容易讓人以爲這個文件很複雜,其實它的框架很簡單,主要包括下面幾個小節:
- [global]
-
- [homes]
-
- [printers]
-
- [自定義小節]
-
其中[自定義小節]能夠有多個,分別共享不一樣的目錄。
我不關心打印機共享,因此註釋掉了[printers]小節。
我也不想讓用戶登錄samba以後看到本身的「家」目錄,因此也註釋掉了[homes]小節。由於登錄samba server的用戶也同時必須是linux系統的用戶,即存在於/etc/passwd文件中的用戶,因此每一個samba用戶會有本身的「家」目錄,在/home下,目錄名稱是使用者本身的賬號。
咱們主要關注[global]小節和[自定義小節],[global]小節中咱們這次關注的重要參數有如下幾個:
說明:指明共享所在的工做組,能夠是NT域名、工做組名
- server string = samba server on ubuntu
說明:客戶端看到的服務器的描述信息
- netbios name = ubuntu_smb
說明:設置Samba Server的NetBIOS名稱。若是不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成同樣了
- interfaces = 127.0.0.0/8 eth0
說明:設置Samba Server監聽哪些網卡,能夠寫網卡名,也能夠寫該網卡的IP地址
- hosts allow = 192.168.1. 192.168.163. 192.168.153.
說明:表示容許鏈接到Samba Server的客戶端,多個參數以空格隔開。能夠用一個IP表示,也能夠用一個網段表示。我這裏只容許3個網段裏的全部客戶端訪問samba server。
說明:設置用戶訪問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級別的安全驗證就能夠了。
- username map = /etc/samba/smbusers
說明:用來定義用戶名映射,好比能夠將root換成administrator、admin等。要事先在smbusers文件中定義好。好比:root = administrator admin,這樣就能夠用administrator或admin這兩個用戶來代替root登錄Samba Server,以保護Linux的系統帳號root。後面會介紹這個文件。
說明:是否將認證密碼加密。由於如今windows操做系統都是使用加密密碼,因此通常要開啓此項。
- passdb backend = smbpasswd
說明:passdb backend密碼驗證後端。目前支持的有三種:smbpasswd、tdbsam和ldapsam。其中smbpasswd方式是使用smb本身的工具smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工創建該文件。這裏我選用smbpasswd。
- smb passwd file =/etc/samba/smbpasswd
說明:用來定義samba用戶的密碼文件。smbpasswd文件若是默認不存在,要手工新建。後面有介紹這個文件。
- log file = /var/log/samba/log.%m
說明:設定 samba server 日誌文件的儲存位置和文件名(%m表明客戶端主機名)。
說明:同一客戶最多能打開的文件數目
- socket options = TCP_NODELAY
說明:用來設置服務器和客戶端之間會話的Socket選項,能夠優化傳輸速度。
[自定義小節]小節主要的參數以下:
說明:comment是對該共享的描述,能夠是任意字符串。
說明:path用來指定共享目錄的路徑。
說明:writable用來指定該共享路徑是否可寫。這裏咱們容許寫入,以知足文件雙向共享。
說明:browseable用來指定該共享是否能夠瀏覽。
說明:available用來指定該共享資源是否可用。
5、smbusers 文件
該文件格式以下:
系統用戶名 = 映射的虛擬帳號1,映射的虛擬帳號2,...
例如:
songyd用戶是samba用戶,也是一個Linux系統的帳號,爲了避免讓samba用戶知道存在songyd這個系統帳號,可用這個文件實現songyd帳號到虛擬帳號admin的一個映射。只需告訴使用者用admin帳號登錄便可,這樣就保護了songyd這個帳號。固然此時用songyd帳號登錄samba也是能夠的。
6、smbpasswd 文件
該文件格式以下:
- name:uid:Lanman Password Hash:NT Password Hash:Account Flags:Last Change Time:
該文件可能默認並不存在,須要手動創建。創建後使用如下命令添加samba帳號songyd的密碼:
這個命令會在/etc/samba/smbpasswd中寫入相似以下內容:
- songyd:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:BC53166B76BB840735D6AB4438B4CD5E:[U ]:LCT-4EA2F59B:
這些內容是命令本身添加的,咱們不用去管。
【注意】有時發現smbpasswd命令即便執行沒有錯誤,但/etc/samba/smbpasswd中卻沒有添加任何內容。這是因爲smb.conf的passdb backend參數配置不正確,此參數必須設置爲smbpasswd,這時smbpasswd -a songyd纔會在/etc/samba/smbpasswd文件中添加記錄。
7、最後結果
- [global]
- workgroup = WORKGROUP
- server string = samba server on ubuntu
- netbios name = ubuntu_smb
- interfaces = 127.0.0.0/8 eth0
- hosts allow = 192.168.1. 192.168.163. 192.168.153.
- security = user
- username map = /etc/samba/smbusers
- encrypt passwords = true
- passdb backend = smbpasswd
- smb passwd file =/etc/samba/smbpasswd
- log file = /var/log/samba/log.%m
- max open files = 1000
- socket options = TCP_NODELAY
-
- ;[homes]
- ; comment = home directories
- ; browseable = no
- ; writable = yes
- ; valid users = %S
- ; create mode = 0664
-
- ;[printers]
- ; printable = Yes
- ; browseable = No
- ; path = /var/spool/samba
-
- [code]
- comment = code
- path = /home/songyd/code
- writable = yes
- browseable = yes
- 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)協議向客戶機提供文件空間和打印服務。
- sudo service smbd restart
- sudo service nmbd restart
9、軟件環境
Linux系統 :ubuntu 11.10
Samba版本:Samba 3.5.11
10、小結
這僅是快速實現user安全級別的samba共享的一個例子,介紹得很粗淺,省略了不少未涉及內容。網上介紹samba配置的文章不少,如有更復雜需求,請你們google之,baidu之:)