我正在尝试允许 ldap 用户在客户端计算机上更改密码。我已经尝试过 pam 的所有我能想到的方法,以及/etc/ldap.conf
& /etc/pam_ldap.conf
。此时我陷入了困境。
客户端:Ubuntu 11.04
服务器:Debian 6.0
当前输出是这样的:
sobrien4@T-E700F-1:~$ passwd
passwd: Authentication service cannot retrieve authentication info
passwd: password unchanged
/var/log/auth.log
在命令期间给出以下内容:
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_unix(passwd:chauthtok): user "sobrien4" does not exist in /etc/passwd
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: ldap_simple_bind Can't contact LDAP server
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: reconnecting to LDAP server...
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: ldap_simple_bind Can't contact LDAP server
getent passwd |grep sobrien4
(请注意,由于使用该帐户进行测试,因此请保持简短,但是它会输出所有 ldap 用户):
sobrien4:Ffm1oHzwnLz0U:10000:12001:Sean O'Brien:/home/sobrien4:/bin/bash
getent group
显示所有 ldap 组。
/etc/pam.d/common-password
(请注意,这只是最新的,我尝试了很多不同的选项):
password required pam_cracklib.so retry=3 minlen=8 difok=3
password [success=1 default=ignore] pam_unix.so use_authtok md5
password required pam_ldap.so use_authtok
password required pam_permit.so
也打开了 wireshark,服务器和客户端正在对话。
我在服务器上更改了密码。即运行 slapd 的服务器,我可以使用 ldap 用户登录并更改密码。我最初尝试从服务器复制工作配置,但没有成功。
我也尝试过克隆它,并且只更改了 ip 和主机,但还是不行。我猜想客户端没有通过 ip 或主机名授权更改密码。
关于 slapd conf,我在指南中看到了这一点并尝试过:
access to attrs=loginShell,gecos
by dn="cn=admin,dc=cengineering,dc=etb" write
by self write
by * read
access to *
by dn="cn=admin,dc=cengineering,dc=etb" write
by self write
by * read
因此 ldap 似乎运行正常,只是无法更改密码。
答案1
我认为您需要允许 auth-bind 才能使其工作。我的意思是,用户连接到 ldap(或 pam 代理)并提供其凭据。如果 ldap 服务器喜欢它所看到的内容,则 authbind 成功,并且 PAM 知道您的用户/密码对是正确的。请参阅示例在 zytrax 的书中
调整 ACL 以包含类似以下内容的部分
# ACL1
access to attrs=userpassword
by self write
by anonymous auth
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by * none
答案2
我以前也遇到过同样的问题;为了解决这个问题,我需要删除use_authtok
- 这允许我们使用...更改用户的密码passwd
。我不确定如果您的身份验证链需要令牌,这会产生什么影响,但如果您只通过 LDAP 进行身份验证,这应该可以解决问题
答案3
我使用以下配置来支持 PAM 密码:
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_ldap.so try_first_pass use_authtok
password sufficient pam_unix.so sha512 shadow nullok use_authtok try_first_pass
password required pam_deny.so
还要记住,ACL 的配置应从最具体到最不具体,因为第一个匹配的条目获胜。我的配置如下:
access to attrs=userPassword
by dn="cn=admin,dc=hell" write
by set="[cn=admins,ou=access groups,ou=groups,dc=hell]/memberUid & user/uid" write
by anonymous auth
by self write
by * none
(顺便说一句,我宁愿推荐原始的 OpenLDAP 管理指南而不是 Zytrax 书籍;该书无论如何都使用指南作为来源,但在偏离原文时经常会引入错误。)