在 Debian Jessie 上使用 rootbinddn 更改 pam_ldap 用户密码

在 Debian Jessie 上使用 rootbinddn 更改 pam_ldap 用户密码

在 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/通用密码:

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 软件包降级为 libpam-ldap 的 Wheezy 版本。我对 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 系统升级到反向移植版本 2.4.31+really2.4.40+dfsg-1~bpo70+1,它就会开始出现这种行为。如果将 jessie 系统降级到 2.4.31-2,它就不会再出现这个问题。我已向 Debian 错误发送了更新,并尝试将其重新分配给 libldap-2.4-2

答案1

停止使用目录的 RootDN 作为本地系统 root 帐户的 DN。目录的 rootdn 不受访问控制。使用(如有必要,创建)具有适当权限的 DN 条目和 LDAP 服务器来正确修改密码。

答案2

导致此特定问题的错误已在 libpam-ldap 源代码中存在很长时间,但其影响仅在 libldap-2.4-2 使用的 gnutls 库中修复了单独的错误后才显现出来。有关此问题的详细信息,请参阅 Debian 错误页面中 Ryan Tandy 发来的一封启发性电子邮件。(Debian 错误 790488)。

我已经知道 libpam-ldap 并未积极开发,但它提供了 libpam-ldapd 所缺少的功能(特别是密码策略支持)。我认为最好的选择实际上是将较新的系统迁移到 sssd 系统,该系统正在积极开发中,支持密码策略覆盖和其他功能。

相关内容