LDAP 更改客户端上的用户通行证

Sea*_*ean 6 openldap ldap

我试图允许 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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

getent passwd |grep sobrien4 (注意在使用该帐户进行测试后保持简短,但它会输出所有 ldap 用户):

sobrien4:Ffm1oHzwnLz0U:10000:12001:Sean O'Brien:/home/sobrien4:/bin/bash 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

也打开了wireshark,服务器和客户端正在交谈。

我在服务器上更改了密码。IE 运行 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
Run Code Online (Sandbox Code Playgroud)

所以 ldap 似乎工作正常,只是无法更改密码。

小智 0

我认为你需要允许身份验证绑定才能正常工作。我的意思是用户连接到 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
Run Code Online (Sandbox Code Playgroud)