Debian

在 Debian Jessie 上使用 rootbinddn 更改 pam_ldap 使用者密碼

  • July 25, 2015

在 Debian Jessie 上配置 pam_ldap 時,最終使用者密碼更改使用 rootbinddn,繞過 OpenLDAP 的 ppolicy 覆蓋。這允許最終使用者在不遵守 OpenLDAP 中定義的密碼策略的情況下更改他們的密碼,例如,他們可以重複密碼並忽略最小密碼長度。我希望使用最終使用者 dn 完成密碼更改,並強制執行密碼策略。

我能想到的每個相關配置都與我在 Debian Squeeze/Wheezy 上的工作配置相匹配,但是這個問題發生在所有經過測試的 Debian Jessie 安裝上。

我已經創建了一個 Debian 錯誤,但正在繼續探索它是配置錯誤的可能性(可能性)。 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=790488

相關配置文件塊如下:

/etc/pam_ldap.conf 和 libnss-ldap.conf 是相同的:

debug 0
base dc=internal,dc=net
uri ldaps://ldap-server/
ldap_version 3
rootbinddn cn=admin,dc=internal,dc=net
port 636
pam_password exop
ssl on
tls_checkpeer yes
tls_cacertfile /etc/ssl/certs/ldap-server.pem

/etc/pam.d/common-passwd:

password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 user_unknown=ignore default=die]   pam_ldap.so try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so

/etc/nsswitch.conf:

passwd:         compat ldap
group:          compat ldap
shadow:         compat

從 OpenLDAP 伺服器上的審計日誌中確認 rootbinddn 正在更改密碼,這是從 Debian Wheezy 伺服器和 Debian Jessie 伺服器更改密碼的範例條目:

# modify 1435351337 dc=internal,dc=net uid=wrttest,ou=People,dc=internal,dc=net IP=172.16.11.141:48084 conn=1066
dn: uid=wrttest,ou=People,dc=internal,dc=net
changetype: modify
replace: userPassword
userPassword:: e1NTSEFUdIkewk5eUlOaFA4bmMvMzlvVjg=
-
replace: pwdChangedTime
pwdChangedTime: 20150626204217Z
-
delete: pwdHistory
pwdHistory: 20150327201545Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}NxOHHViV
zwlUZs2TKWKJsdatrfeO3OF
-
add: pwdHistory
pwdHistory: 20150626204217Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}DJJkErb9
CEyPPPYYYAAAAESjR3wDqRj9
-
replace: entryCSN
entryCSN: 20150626204217.320385Z#000000#001#000000
-
replace: modifiersName
modifiersName: uid=wrttest,ou=People,dc=internal,dc=net
-
replace: modifyTimestamp
modifyTimestamp: 20150626204217Z
-
# end modify 1435351337


# modify 1435595556 dc=internal,dc=net cn=admin,dc=internal,dc=net IP=172.16.11.158:34413 conn=1080
dn: uid=wrttest,ou=People,dc=internal,dc=net
changetype: modify
replace: userPassword
userPassword:: e1HUHJFIzFeQHpacEJQGd2VvU08=
-
replace: pwdChangedTime
pwdChangedTime: 20150629163236Z
-
delete: pwdHistory
pwdHistory: 20150626204102Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}Xi1p3Z44556K5c
5tcFOeLaBIL1i
-
add: pwdHistory
pwdHistory: 20150629163236Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}13lTJmGHfgf
Y45672xoyuVVswcgIP
-
replace: entryCSN
entryCSN: 20150629163236.253982Z#000000#001#000000
-
replace: modifiersName
modifiersName: cn=admin,dc=internal,dc=net
-
replace: modifyTimestamp
modifyTimestamp: 20150629163236Z
-
# end modify 1435595556

為了確定問題出在哪裡,我已將 Debian Jessie 軟體包降級為 Wheezy 版本的 libpam-ldap。我對 PAM 配置進行了各種更改,要麼沒有改變問題,要麼完全破壞了 LDAP 身份驗證。從在 pam_ldap 中打開調試而在 libnss-ldap 中將其關閉,我對密碼更改路由由 pam_ldap 而不是 libnss-ldap 處理感到滿意。我查看了 pam_ldap 包的程式碼,看看我是否可以確定哪裡出了問題。

更新:為了調試這個,我有一個正在執行的 Jessie 系統,我已經降級了以下軟體包,以嘗試確定導致問題的軟體包:libpam-modules 1.1.3-7.1 libpam-modules-run 1.1.3- 7.1 libpam-runtime 1.1.3-7.1 passwd 1:4.1.5.1-1 libpam0g 1.1.3-7.1 libpam-ldap 184-8.6

我也試過解除安裝 libpam-systemd

更新 2:經過各種測試,我確定問題出在 libldap 上。如果 wheezy 系統升級到 backports 版本 2.4.31+really2.4.40+dfsg-1~bpo70+1,它就會開始表現出這種行為。如果 jessie 系統降級到 2.4.31-2,它就會停止顯示該問題。我已向 Debian 錯誤發送了更新,並嘗試將其重新分配給 libldap-2.4-2

導致此特定問題的錯誤已在 libpam-ldap 源中存在很長時間,但只有在 libldap-2.4-2 使用的 gnutls 庫中修復了一個單獨的錯誤後才能看到它的影響。細節可以在來自 Ryan Tandy 的一封啟發性的電子郵件中找到,該電子郵件位於 Debian 錯誤頁面中。(Debian 錯誤 790488)。

我已經知道 libpam-ldap 並沒有被積極開發,但它提供了 libpam-ldapd 錯過的功能(特別是密碼策略支持)。我認為最好的選擇實際上是將較新的系統遷移到 sssd 系統,該系統正在積極開發中,支持密碼策略覆蓋和其他功能。

停止使用目錄的 RootDN 作為本地系統 root 帳戶的 dn。目錄的 rootdn 不受訪問控制。對 LDAP 伺服器使用(如有必要,創建)具有適當權限的 dn 條目以正確修改密碼。

引用自:https://serverfault.com/questions/701984