在Windows與Linux之間共享文件,Samba是一個很常見的選擇:Linux運行Samba服務,Windows訪問Linux上共享的文 件。在不需要用戶訪問控制的場景下,Samba服務的安全級別設置爲共享(share)就可以了。我的需求是想對Samba服務的訪問者進行身份驗證,所 以選擇用戶安全級別(user)。user級別要求用戶訪問samba服務時提供用戶名和密碼,而且身份驗證由 samba server 負責。下面是用smbpasswd方式做的,因我的需求很單一,所以Samba的配置文件也非常簡單。這裏做個筆記記錄一下以備忘。
一、準備Samba軟件
1. 安裝Samba相關軟件包,安裝過程略
2. 備份samba配置文件,我們後面要自己從頭新建一個配置文件
sudo mv /etc/samba/smb.conf /etc/samba/smb-original.conf
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文件註釋很多,例子給的也不少,容易讓人覺得這個文件很複雜,其實它的框架很簡單,主要包括下面幾個小節:
[global]
[homes]
[printers]
[自定義小節]
其中[自定義小節]可以有多個,分別共享不同的目錄。
我不關心打印機共享,所以註釋掉了[printers]小節。
我 也不想讓用戶登陸samba之後看到自己的“家”目錄,所以也註釋掉了[homes]小節。因爲登陸samba server的用戶也同時必須是linux系統的用戶,即存在於/etc/passwd文件中的用戶,所以每個samba用戶會有自己的“家”目錄,在 /home下,目錄名稱是使用者自己的帳號。
我們主要關注[global]小節和[自定義小節],[global]小節中我們此次關注的重要參數有以下幾個:
workgroup = WORKGROUP
說明:指明共享所在的工作組,可以是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。
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級別的安全驗證就可以了。
username map = /etc/samba/smbusers
說 明:用來定義用戶名映射,比如可以將root換成administrator、admin等。要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,以保護Linux的系統賬號root。後面會介紹這個文件。
encrypt passwords = true
說明:是否將認證密碼加密。因爲現在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代表客戶端主機名)。
max open files = 1000
說明:同一客戶最多能打開的文件數目
socket options = TCP_NODELAY
說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。
[自定義小節]小節主要的參數如下:
comment = code
說明:comment是對該共享的描述,可以是任意字符串。
path = /home/songyd/code
說明:path用來指定共享目錄的路徑。
writable = yes
說明:writable用來指定該共享路徑是否可寫。這裏我們允許寫入,以滿足文件雙向共享。
browseable = yes
說明:browseable用來指定該共享是否可以瀏覽。
available = yes
說明:available用來指定該共享資源是否可用。
五、smbusers 文件
該文件格式如下:
系統用戶名 = 映射的虛擬賬號1,映射的虛擬賬號2,...
例如:
songyd = admin
songyd 用戶是samba用戶,也是一個Linux系統的賬號,爲了不讓samba用戶知道存在songyd這個系統賬號,可用這個文件實現songyd賬號到虛 擬賬號admin的一個映射。只需告訴使用者用admin賬號登陸即可,這樣就保護了songyd這個賬號。當然此時用songyd賬號登陸samba也 是可以的。
六、smbpasswd 文件
該文件格式如下:
name:uid:Lanman Password Hash:NT Password Hash:Account Flags:Last Change Time:
該文件可能默認並不存在,需要手動建立。建立後使用以下命令添加samba賬號songyd的密碼:
sudo smbpasswd -a 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文件中添加記錄。
七、最後結果
[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
八、重啓服務
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
九、軟件環境
Linux系統 :ubuntu 11.10
Samba版本:Samba 3.5.11
十、小結
這僅是快速實現user安全級別的samba共享的一個例子,介紹得很粗淺,省略了很多未涉及內容。網上介紹samba配置的文章很多,若有更復雜需求,請大家google之,baidu之:)