天哪!回覆了那麼長長的一篇,
光打那麼多字一定很辛苦吧?
實在是
非~常~感~動~~~
阿信 寫:Tetralet兄好像誤會了pam_smbpass的用法了。(不知道小弟有無說錯,錯了還請原諒...
)
我當時的確是想不透...
阿信 寫:smb_passwd的用法不是用在認證的,所以不管怎麼嘗試,是沒辦法直接讀取/etc/passwd和/etc/shadow來做認證。
其實我們可以經由修改 /etc/samba.smb.conf 來讓 Samba 使用 /etc/passwd 來進行認証,
方法是修改 /etc/samba/smb.conf:
- 代碼: 選擇全部
encrypt passwords = false
obey pam restrictions = no
而 /etc/pam.d/samba 則保持原樣不要動它,
之後設定 Windows Client 使用 Plain Text 來進行認証即可。
這也就是上一篇阿信兄所提的做法。
使用這個做法時,
Samba 會使用 /etc/passwd 來進行認証,
所以使用者可以在使用 passwd 變更密碼後用新的密碼登入 Samba,
並且我們可以觀察一下,
這個做法下不管密碼怎麼變,
絕對不會動到 /etc/samba/smbpasswd 這個檔案,
因為它和 /etc/passwd 之間並不會進行同步的作業。
不過這樣子就必須設定 Windows Client 要使用 Plain Text 來進行認証,
我想這並不是一個好方法。
阿信 寫:從package info中可以看到是拿來做 "sync" 的動作,也就是說,今天samba依然要有smbpasswd這個密碼檔,但只要透過 pam_smbpass.so 的話,那就可以將系統中的 /etc/shadow 密碼做同步化的動作,那未來只要有人更動了 Linux 系統中的密碼,那samba就會自動同步了。
我那時一直在想,pam_smbpass.so 到底是如何做到這一點的呢?
它既不是一個 Daemon,
也不可能把 /etc/shadow 的密碼解碼後再寫入 /etc/samba/smbpasswd 中。
而在 Package Info 中提到的:
- 代碼: 選擇全部
Unlike other solutions, it does this without requiring users to change their existing passwords or login to Samba using cleartext passwords.
它並不用要求 Windows Client 使用 Plain Text 來進行認証,
更是讓我百思不得其解。
後來想了很久,
我想,應該是在使用者用 passwd 來變更密碼的同時,
也同時將新的密碼寫入 smbpasswd 中。
所以,答案就揭曉了!
其實正確的做法是去修改 /etc/pam.d/passwd,
改成像以下這個樣子:
- 代碼: 選擇全部
password required pam_unix.so nullok obscure min=4 max=8 md5
password sufficient pam_smbpass.so audit use_first_pass
而 /etc/samba/smb.conf 則保持原樣不要去修改它:
- 代碼: 選擇全部
encrypt passwords = true
obey pam restrictions = no
/etc/pam.d/samba 也是一樣不用去動它。
這樣子使用者用 passwd 來變更密碼的同時,
也會同時將新的密碼寫入 smbpasswd 中了。
而這也就是讓 /etc/samba/smbpasswd 和 /etc/passwd 之間保持同步的方法。
經過一些小小的測試,
使用 passwd 來變更 Linux 密碼時,
果然 Linux 的密碼和 Samba 的密碼真的可以保持同步!
不過使用 smbpasswd 來變更 Samba 密碼時,
並不會修改到 Linux 的密碼,
因為此時 Samba 並不使用 PAM 來處理密碼的變更。
多謝 阿信兄 的指點我才能想出真正的解決方法。
非常感謝!! ^_^