我的 LDAP 生产服务器运行了 1 年没有任何问题,我在通过 pam_ldap 进行身份验证时突然收到密码失败错误。因此它显示以下错误消息,我能够使用 ldap 客户端实用程序(如 ldapsearch)进行身份验证,也可以通过一些java应用程序,
在客户端,我在 /var/log/secure 中收到以下错误消息
Failed password for [username] from xx.xx.xx.xx port 38473 ssh2
fatal: Access denied for user [username] by PAM account configuration
在 LDAP 服务器日志上。
=> access_allowed: read access denied by auth(=xd)
send_search_entry: conn 1711 access to attribute userPassword, value #0 not allowed
LDAP 服务器上的 ACL 配置
access to attrs=userPassword
by self write
by anonymous auth
by dn.base="cn=Manager,dc=example,dc=com" write
by * none
access to attrs=shadowLastChange
by self write
by * read
access to *
by self write
by dn.base="cn=Manager,dc=example,dc=com" write
by * read
pam_ldap (/etc/pam.d/system-auth) 配置 - 客户端
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_ldap.so try_first_pass
auth sufficient pam_unix.so nullok use_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 debug minclass=4 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so
奇怪的是,很长一段时间以来我都没有对服务器端或客户端进行任何更改。
好吧,我发现了问题,我们 LDAP 服务器中的所有帐户都设置为在同一天过期 (shadowExpiry),因为我们同时使用 shadow 和 ppolicy 导致了这个问题。另一个问题是错误信息不够清晰易懂。