OpenLDAP、Samba 和密碼老化
我正在配置一個系統,其中所有 IT 資源都可通過單個使用者密碼對獲得,無論是訪問伺服器上的 shell、登錄 Samba 域、WiFi、OpenVPN、Mantis 等(訪問受管理的特定服務)按組成員身份或使用者對象欄位)。因為我們的網路中有個人數據,所以我們需要根據歐盟數據保護指令(或者更確切地說是它的波蘭版本)實施密碼老化。
問題在於 LDAP 中的 Samba 和 POSIX 帳戶使用不同的密碼散列和老化資訊。雖然同步密碼本身很容易(
ldap password sync = Yes
insmb.conf
),但將密碼老化添加到混合中會破壞一些事情:Samba 不會更新 shadowLastChange。一起obey pam restrictions = Yes
創建了一個windows使用者無法更改舊密碼的系統,但如果我不使用它,則不會自動創建主目錄。另一種方法是使用 LDAP 擴展操作來更改密碼,但smbk5pwd
模組也沒有設置它。更糟糕的是,OpenLDAP 維護者不會更新它/接受更新檔,因為該欄位被認為已棄用。所以,我的問題是,最好的解決方案是什麼?它們的優點和缺點是什麼?
使用 LDAP
ppolicy
和內部 LDAP 密碼老化?它與 NSS、PAM 模組、samba 和其他系統的工作情況如何?
NSS 和 PAM 模組是否需要以特殊方式配置才能使用 ppolicy,而不是 shadow?
GOsa²是否適用於 ppolicy?
是否有其他管理工具可以與
ppolicy
啟用的 LDAP 一起使用?修改一個更改密碼腳本,用於更新 LDAP 中的欄位。(留下使用者自己更新欄位而不更改密碼的可能性)
我編寫了自己的 OpenLDAP 覆蓋,呼叫它來在 EXOP 密碼更改時
shadowlastchange
更新屬性。shadowLastChange
它在以下位置啟動slapd.conf
:moduleload smbk5pwd moduleload shadowlastchange ... database bdb ... overlay smbk5pwd overlay shadowlastchange
我已配置
smb.conf
通過 EXOP 更改密碼:ldap passwd sync = Only
然後,對於每個帳戶,設置
shadowMax
密碼的有效天數。OpenLDAP 模組負責其餘的工作!
作為權宜之計,我為 Samba 創建了將更新
shadowLastChange
密碼更改的腳本:#!/bin/sh # script to update shadowLastChange when samba updates passwords # it's not needed when using 'passwd', it does update the field, # even if pam_ldap is using LDAP Extented Operation to change password LDAP_MODIFY="/usr/bin/ldapmodify" LDAP_SEARCH="/usr/bin/ldapsearch" LDAP_USER="uid=shadow-update,ou=Services,dc=example,dc=com" LDAP_PASSWORD="change-me" LDAP_HOST="localhost" # get date SLC=$((`date '+%s'` / 24 / 3600)) # get user login name user=$1 # find user's DN dn=$($LDAP_SEARCH -x -h $LDAP_HOST -LLL -b dc=example,dc=com "(uid=$user)" dn) dn=${dn#dn:} # check if DN is not base64 encoded if [ "${dn:0:1}" = ":" ]; then # update password change date echo "dn:$dn changetype: modify replace: shadowLastChange shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \ -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1 else # update password change date echo "dn: $dn changetype: modify replace: shadowLastChange shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \ -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1 fi err=$? if [ ! $err -eq 0 ]; then echo "error: can't update shadowLastChange: $err" echo "`date`: shadow.sh: can't update shadowLastChange: $err"\ >> /var/log/shadow-update.log exit; fi echo OK
在 Samba 配置中,它需要
unix password sync
設置為yes
,passwd chat
設置為*OK*
和passwd program
上面的腳本"%u"
作為參數。
LDAP_USER
需要在 LDAP 中創建一個在 中指定的帳戶,並授予uid
所有 Samba 使用者的讀取權限和寫入權限shadowLastChange
。