2008年9月5日 星期五

Debian下實現samba密碼與系統密碼同步

一.前言

本篇環境:Debian sid/ samba ver. 3.2.3。
參考moto學園幾位前輩的文章:
http://moto.debian.org.tw/viewtopic.php?t=3066&start=0&postdays=0&postorder=asc&highlight=
http://moto.debian.org.tw/viewtopic.php?t=1810&start=0&postdays=0&postorder=asc&highlight=
samba預設密碼與/etc/shadow是不同步的。本篇目的希望:
------------------------------------------------------------------------------------------------------------
A.系統密碼與samba密碼同步。
B.系統所有使用者都可存取samba,無須大量建立samba client。

------------------------------------------------------------------------------------------------------------

二.smbpasswd與passwd同步

01.修改/etc/pam.d/common-password
password required pam_unix.so nullok obscure min=4 max=8 md5
password sufficient pam_smbpass.so audit use_first_pass

02.確認/etc/samba/smb.conf
encrypt password = true
obey pam restrictions = yes
unix password sync = yes
pam password change = no

03.由於新版的samba其密碼資料庫檔已經不放在/etc/samba/smbpasswd,而是放在
/var/lib/samba/secrets.tdb
/var/lib/samba/account_policy.tdb
/var/lib/samba/passdb.tdb
(利用smbstatus查看版本資訊)
此時,手動使用
smbpasswd -a maxsolar 並設定其密碼,便可以使smbpasswd與shadow同步,此時user利用passwd或是smbpasswd改自己的密碼,都會同步。 缺點在於:第一次使用samba之前,需要手動變更自己的密碼,如果變更密碼有與前次不同的限制,則需額外克服。

三.大量建立samba user

早期samba版本的作法是:
cat /etc/passwd | mksmbpasswd > /etc/samba.d/smbpasswd
並且需要在/etc/samba/smb.conf裡新增一條
smb passwd file = /etc/samba/smbpasswd
(以上作法在新版必須忽略)
新版的作法應該要改成:
umaks 0066
getent passwd | grep '/bin/bash' | /usr/sbin/mksmbpasswd > /etc/samba/smbpasswd
pdbedit -i smbpasswd -e tdbsam
rm /etc/samba/smbpasswd
umask 0022
以上所產生的效果是,從/etc/passwd的entries擷取有用的使用者來建立samba密碼,並寫入到smbpasswd這個暫存檔案內。
再把smbpasswd裡的使用者資訊寫到samba password database裡,並移除smbpasswd這個過度的暫存檔案。
此時samba database就有了/etc/passwd裡的有效使用者。
不過samba要能有效登入,還需root先變更使用者的密碼,smbpasswd方能生效,但至少解決了大量建制使用者的問題。

四.結論

不過要使用samba,無論是否利用smbpasswd建立使用者或是由shadow->tdbsam,都需要系統管理員先替每個使用者做一次調校,我認為要全面同步可能還是要靠LDAP來幫忙。

沒有留言: