上一小節由於是採取最寬鬆的等級,所以 everybody 都可以存取 Samba。如果您所分享的目錄是希望使用者需經認證程序方能存取,那麼就需做一些調整才行。以下是筆者對整個 samba 認證的設定步驟: 建立分享目錄
- suse:~ # mkdir /home/authdir
- # 建立認證目錄。
- suse:~ # cp /etc/passwd /home/authdir/file
- # 複製 passwd 至 /home/authdir/file 。
- suse:~ # chmod 1777 /home/authdir
- # 讓所有人對 authdir 具所有權限,且讓 authdir 有 Sticky bit 的屬性。
- suse:~ # chmod 666 /home/authdir/file
- # 讓所有人皆可修改 file 檔案。
複製代碼 |
- 設定 smb.conf
- suse:~ # vi /etc/samba/smb.conf
- [global]
- workgroup = workgroup
- server string = Samba Server
- security = user
- # 使用者在存取 SAMBA 時,需輸入帳號密碼,且是透過此台 SAMBA 做認證。
- netbios name = suse
- encrypt passwords = yes
- # 在 SAMBA 與 Client 端之間,是以加密方式來傳送密碼。
- smb passwd file = /etc/samba/smbpasswd
- # 使用者認證時所依據的檔案。
- # 以上兩個參數為預設,所以也可以不做設定。
- hosts allow = 192.168.1.0/24 192.168.5.
- # 設定允許存取的來源端。
- [Auth]
- comment = Authentication
- public = no
- # 因為要做認證,所以這裡設定為不公開分享。這是預設值。
- path = /home/authdir
- # 分享目錄的實際路徑。
- browseable = yes
- # 在網芳中,允許看到 Auth 這個分享目錄名稱。這是預設值。
- write list = barry,tina
- # 設定擁有寫入權限的使用者或群組名單。
-
- valid users = barry,tina
- # 設定能存取此目錄的有效使用者及群組名單。
- create mask = 0600
- # 設定使用者在該目錄下新增檔案時的預設權限為 600。
- directory mask = 0700
- # 設定使用者在該目錄下新增目錄時的預設權限為 700。
- suse:~ # rcsmb restart
複製代碼 |
針對這個範例,稍微補充幾個參數的詳細用法:
| | hosts allow、hosts deny | | | 當您只想允許少數來源端做存取時,設定 hosts allow 即可 ﹔若只想拒絕少數來源端做存取,則設定 hosts deny 就行了。如 hosts allow 及 hosts deny 同時做設定時,則會先 allow 再 deny。當來源端符合 hosts allow 的設定,就不再往下比對,否則繼續比對 hosts deny,若是兩者都不符合時,則結果是會被 allow 的。建議您在對來源端做控管時,只設定這兩個參數中的其中一個就行了,這樣也才不容易搞混。
再來就是其設定格式可以使用主機名稱或 IP 位址,之間可用「, 」或空白字元做區隔,比如:
hosts allow = 192.168.10.0/255.255.255.0 , .paching.com.tw | | | browseable | | | 是否可以在網芳中看到此分享目錄的名稱。若設定成 No,則使用者無法看見此目錄,就好像被隱藏起來一樣。不過如果 Client 事先已經知道此分享目錄名稱時,則可藉由 [開始] → [執行],然後輸入「\\suse\auth」來作存取:
| | | write list | | | 這個參數需要在預設「read-only = yes」的情況下才有效。假使您同時設定了「writable = yes」與「write list」時,那麼當本身具有寫入權限的使用者,其雖未被列在「write list」的名單之中,但這個使用者還是具有寫入權限的。
另外也可以針對群組來設限,只要在群組名稱之前加上「@」即可。比如:
write list = barry,mary,@group01,@group02
而名稱與名稱之間可用「 ,」或空白字元做區隔。 | | | valid users | | | 當某個目錄設定此參數時,則只有在列表之中的使用者或群組成員,才可存取這個目錄。至於其設定格式與「write list」相同,不再贅述。 |
設定完成後,請重新啟動 SAMBA:
- 建立使用者認證資料
待會兒所建立的認證帳號,必須已經存在於 /etc/passwd 之中才行。至於密碼部分,可設定成與 Linux 系統上的密碼 ( /etc/shadow ) 相同或不同,但不管如何設定,使用者最終還是要以這裡所設定的 Samba 密碼為主。
建立 Samba 認證資料的指令為 smbpasswd,至於所建立完成後的帳號密碼,則會產生在 /etc/samba/smbpasswd 檔案內,也就是說使用者在做認證時,所依據的就是這個檔案啦。
- suse:~ # smbpasswd -a barry
- New SMB password :
- Retype new SMB password :
- Added user barry.
- suse:~ # cat /etc/samba/smbpasswd
- barry:1000:2A89DBF8EE6DF912AAD3B435B51404EE:782E8614AE676814F2C0A1E5994E09E8:[U ]CT-436E9104:
複製代碼
第一次建立該使用者認證資料時,需加上 -a ( add 之意 ) 參數,爾後想要修改這個使用者的 Samba 密碼,則執行「smbpasswd barry」即可。而當您想把某個使用者從認證檔案中移除時,可執行「smbpasswd -x username」,不然也可以用 vi 進去編輯,直接將該帳號刪除就行了。 [size=+1] [ homes ] 區段說明
在 smb.conf 裡,會看到一個 homes 的 section,此乃一個特殊的區段設計,其主要作用是為了讓每個認證進來的使用者都能存取自己的家目錄。請注意,homes 這個名稱請勿隨意更改。至於其它相關說明,請參考以下:
- [homes]
- comment = Home Directories
- valid users = %S
- browseable = No
- read only = No
- inherit acls = Yes
複製代碼 |
「valid users = %S」,是表示認證進來的使用者會被當成有效的使用者,且在使用者連線成功後,SAMBA 會以使用者的登入帳號名稱作為分享目錄名稱,比如使用者 barry 登入後,就會看到 barry這個分享目錄,因為那個 homes 已經被 barry 名稱取代掉了。
另外在 [homes] 區段中,並沒有使用 path 去指定路徑,這沒關係啦,因為系統會自動幫您指定到預設的家目錄位置,當然您也可以改變這個預設的路徑,例如當設定成「path = /userdir/%S」時,則在 barry 登入後,對於 barry 這個分享目錄的實際存取路徑為 /userdir/barry。
再來是「browseable = No」,這可不是說使用者看不到自己的家目錄噢,因為這裡的 browseable 是繼承 global 裡的設定值 ( global 預設是 browseable = Yes ),也就是說每個使用者都能看到自己的家目錄,但對其它 user 來說,您的家目錄是會被隱藏起來的。
最後是「inherit acls = Yes」,這是說如果目前的目錄有設定 default acl 的話,則將來在此目錄下所新增的子目錄,其權限會繼承這個目錄的 default acl 設定。另外把這個參數設定成 yes 時,會凌駕在 create mask 及 directory mask 之上,但如果該目錄沒設定 default acl 的話,則不受影響。
[size=+1] Client 端測試
打開網路芳鄰並點選 Suse 主機,此時會出現要求您輸入帳號密碼的對話視窗: 認證通過後,就可以看到 Suse 主機所分享的目錄: 有留意到多一個 barry 的分享目錄嗎 ? 這就是 [homes] 區段所帶來的效果。
另外可嘗試在 Auth 目錄中去新增檔案目錄,並檢視這些檔案目錄的預設權限是不是與 "create mask" 與 "directory mask" 所指定的相同 ? 再來去修改 Auth 目錄下的 file 檔案,看能否成功寫入 ? 萬一練習過程發生問題的話,請再好好檢查一下您相關權限的設定。[size=+1]
|