我在 Debian Stable 上的 OpenLDAP 上实现了密码策略覆盖。服务器端和策略都按预期工作。但是,过期后我无法强制用户更改密码。用户登录后,会收到一条消息,提示其密码已过期,必须立即更改。但是,无论是在本地登录还是 SSH 登录中,用户都会被踢出。客户端正在使用 libnss_ldap、pam_ldap。pwdMustChange
,pwdAllowUserChange
都设置为true
。使用passwd
更改密码也按预期工作。
客户端配置文件
/etc/nsswitch.conf:
passwd: files ldap
group: files ldap
shadow: files
/etc/pam.d/通用帐户:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so
/etc/pam.d/common-auth:
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
/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
/etc/pam.d/通用密码:
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session required pam_unix.so
session optional pam_ldap.so
/etc/libnss-ldap.conf:
base dc=testldap,dc=example,dc=com
uri ldap://192.168.56.102/
ldap_version 3
pam_lookup_policy yes
pam_password exop
/etc/pam_ldap.conf:
base dc=testldap,dc=example,dc=com
uri ldap://192.168.56.102/
ldap_version 3
pam_lookup_policy yes
pam_password exop
有任何想法吗?
答案1
我已经解决了这个问题。我唯一需要做的就是在 common-account 文件中添加new_authtok_reqd=done
LDAP 行。因此,生成的文件如下所示,一切正常:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so