■枝江市職業(yè)教育中心 楊華 董華敏
Samba 是在Linux 和Unix系統(tǒng)上實現(xiàn)SMB協(xié)議的一個免費軟件,由服務器及客戶端程序構成,安全高效地實現(xiàn)異構網絡環(huán)境下Windows 與Unix/Linux 之間的資源共享,與全世界的電腦分享資源。當然安全高效是以復雜的訪問控制為代價的,這給初學者的學習設置了極大的障礙,讓他們在網絡之路上停止不前。
下面主要針對共享資源訪問用戶配置進行探討。
舊版本中(Centos 6.5),全局配置:security=share,認證模式為share,所有用戶都不需要登錄認證就可以訪問共享資源;局部配置:public=yes 或guest ok=yes。
新版本中(Centos 7.0),全局配置:security=user,map to guest=Bad User認證模式為user,實現(xiàn)匿名訪問無須輸入用戶名和密碼;局部配置public=yes 或guest ok=yes。
注意:security=share 在新版中已經被廢棄了,在配置文件中一段描述“Scurity canbesettouser,share(deprecated)orserver(deprecated) ”即安全性可以設置為用戶、共享(已棄用)或服務器(已棄用)。
1.“security=share”,通過檢測配置文件,可以得到出錯信息:
警 告:忽 略 參數(shù) 'security' 的 無 效值'share',加載服務時出錯。
【故障排除】新版本摒棄了'share',只要將以上錯誤配置取消即可。
2.“guest account=guest”,此項曾作用在老版中,將所有匿名用戶映射為guest 用戶,但在Centos 7中可以配置,而且testparm檢測配置文件也通過,但在啟動SMB 服務時出錯,通過顯示服務啟動狀態(tài)信息如下:
【故障排除】只要將以上錯誤配置取消即可。
其他的語法配置錯誤通過testparm 都可以檢測出來,根據(jù)出錯信息進行故障排除。
注 意:public 與guest ok 設置是否允許匿名用戶訪問共享資源,當“public=yes”時表示允許,“public=no”時表示不允許,默認為“public=no”。在Samba 服務guest ok 有相同的功能。當在一個共享資源參數(shù)中guest ok 與public 參數(shù)發(fā)生沖突時,在后面的參數(shù)優(yōu)先。如下面的例子中就不允許匿名用戶訪問hbzjzj。
用戶配置:
passdbbackend=tdbsam 用戶后臺驗證模式配置
samba 有三種用戶后臺:smbpasswd、tdbsam 和ldapsam。
因為普通用戶第三種較少使用,所以主要討論前面兩種方式。
(1)smbpasswd:使 用文本文件進行用戶配置,該方式是使用smb 工具smbpasswd 給系統(tǒng)用戶(真實用戶或者虛擬用戶)設置一個Samba 密碼,客戶端就用此密碼訪問Samba 資源。文件名為smbpasswd,路徑/var/lib/samba/private,也可以手工編輯該文件。
(2)tdbsam:使用數(shù)據(jù)庫文件創(chuàng)建用戶數(shù)據(jù)庫。數(shù)據(jù)庫文件叫passdb.tdb,文件路徑位于/var/lib/samba/private。
注意:新的版本安裝應使用tdbsam 或ldapsam。一般用戶配置選擇tdbsam 數(shù)據(jù)庫方式,管理安全、方便、高效,“smbpasswd”只是一種文本文件儲存方式,一般用戶可以輕易查看用戶信息(如下所示),之所以保留可用于向后兼容性。
samba 的早期版本默認使用tdb庫,也就是smb.conf 默認設定為passdb backend=tdbsam,如 果需要使用smbpasswd 文本文件保存smb 用戶,只需要注釋掉該行添加smb passwd file=/etec/samba/smbpasswd,即可使用smbpasswd 存儲加密密鑰。
Samba 新版本更加規(guī)范了passdb backend 參數(shù)的使用,取消了smb passwd file 設定,如果簡單注釋掉passdb backend 參 數(shù),密鑰文件也不會被存儲到smbpasswd,無論如何修改smb.conf 的配置,smbpasswd文件都無法生成,必須采用新版本的配置 passdb backend=smbpasswd。在進行pdbedit-L查看samba 用戶信息時,它會根據(jù)用戶驗證配置方式去查找smbpasswd 文件,從中讀取用戶信息,如果沒有該文件,會自動創(chuàng)建一個,如下所示:
Start smbfile pwent_internal:file/var/lib/samba/private/smbpasswd did not exist.File successfully created.
Samba 版本升級了,很多參數(shù)細節(jié)變化了?,F(xiàn)在無論是使用tdb 數(shù)據(jù)庫存儲密鑰還是smbpasswd 文本存儲密鑰都要設定對應的passdb backend 參數(shù)。
要用傳統(tǒng)的文本方式存儲只需這樣設定passdb backend=smbpasswd(/var/lib/samba/private默認是絕對路徑),如果寫成“passdb backend=/var/lib/samba/private/smbpasswd”,配置文件將報錯,因為路徑參數(shù)已經不適用于新版本的Samba 了。
用戶建立:
以上兩種方式在配置是即可以使用smbpasswd 工具,也可以使用pdbedit 工具來配置smb 用戶,但前提是必須系統(tǒng)用戶,即通過useradd添加的用戶。
這里的用戶名必須是Linux 中存在的用戶,可以使用useradd 命令在系統(tǒng)中添加一個用戶,然后再增加一個對應的Samba 用戶,也就是一個用戶名使用的是兩套密碼。一個是系統(tǒng)用戶密碼,另一個密碼存儲在/etc/samba/smbpasswd 文件中的samba 密碼,這樣可以防止系統(tǒng)用戶密鑰外泄帶來的安全隱患。
注意:在不同的用戶后臺配置模式下建立的用戶是不可以互訪的??梢酝ㄟ^pdbedit-L 顯示在當前用戶配置下建立起來的smb 訪問用戶,如圖1所示。
用戶名訪問控制:
invalid users=user1#指定哪些用戶不能訪問
valid users= user1 user2 # 指定哪些用戶可以訪問,多個用戶中間用空格隔開,如果是指定組,在組名前加上@,如果不指定則所有用戶都可訪問。
valid users 與invalid users 發(fā)生沖突,即如果在兩個選項配置中,同時出現(xiàn)用戶名,則拒絕項優(yōu)先級最高,如上面配置中用戶user1 是被拒絕訪問的。
用戶IP 訪問控制:
在Samba 中使用hosts allow、hosts deny 參數(shù)時,該參數(shù)可以出現(xiàn)在全局配置部分,用于允許或拒絕可連接到Samba 服務器的客戶端,也可以出現(xiàn)在具體的共享資源配置中,用于允許或拒絕可訪問該資源的客戶端。
全局配置中:
Hosts deny指定客戶端,此時無法訪問Samba 服務器任何共享資源。
hosts allow 指定客戶端,在具體共享資源中分以下幾種情況。
(1)如在具體共享資源中只是指定了hosts deny,且與全局配置不沖突時,客戶端可以訪問具體共享資源。
(2)如具體共享資源中只指定了hosts allow 且是全局配置的子集時,只有具體共享資源中指定的客戶端可以訪問。
(3)如具體共享資源中即指定了hosts allow 又指定了hosts deny 時,首先根據(jù)hosts allow 與hosts deny 生效規(guī)則得出具體共享資源允許或拒絕的客戶端,再根據(jù)上面兩條規(guī)則得出最終的結果。
注意:hosts deny 與hosts allow 發(fā)生沖突時,hosts allow 優(yōu)先;只有hosts allow,除了hosts allow 中指定的客戶端外其他所有客戶端都不能訪問;只有hosts deny,除了hosts deny 中指定的客戶端外其他所有客戶都可以訪問。
案例:
如果想設置Samba 中一共享目錄某個IP 段可以訪問,但要排除某地址,會想到hosts allow 和hosts deny 一起使用,但不會達到預期效果,如下所示,希望172.16.0.0/16 網段都能訪問,除了172.16.20.4 以外。
測試結果是在172.16.20.4 上還是可以訪問,因為兩個配置有沖突,都存在172.16.20.4 這個網址,而默認hosts allow 優(yōu)先。
當然,實現(xiàn)這種功能需要用到另一個參數(shù)了,改為下面的配置就可以了:
此共享名稱(默認情況下啟用)是一個特別共享,此共享名稱有特殊意義,為每個Samba 用戶定義其是否能夠通過Samba 服務訪問自己的家目錄,只對用戶訪問有意義,對于匿名訪問沒有意義,如果是匿名訪問可以顯示但無打開。
如果是用戶訪問,path選項沒有配置,就會映射到各自訪問用戶的家目錄,其它用戶家目錄不可見,但實質上是通過browseable=no選項進行了隱藏,可以通過UNC 路徑顯示共享名稱,但不能訪問。如果path 有配置,所有用戶訪問就會映射到具體的訪問路徑。
通過browseable 參數(shù)可控制用戶瀏覽權限,當browseable=yes 時,將顯示共享資源,當browseable=no時,將隱藏共享資源,默認為browseable=yes。但共享資源被隱藏后只是在瀏覽Samba服務器時不可見,與可不可以訪問該共享資源無關。
如上面例子中[hbzjzj]設置為隱藏共享,通過Windows 客戶端或smbclient-L 瀏覽時查看不到,但還是可以通過UNC(共享資源名稱,\IP 地址hbzjzj) 訪問,(此功能與Windows 中創(chuàng)建共享文件夾時在共享名后加$功能一樣)。