LDAP更改用户密码

时间:2011-01-27 02:45:51

标签: ldap change-password

据我所知,在PHP中,我们需要通过SSL连接LDAP以更改用户密码。

还有其他方法,E.G,其他语言(JAVA / ASP)在没有SSL的情况下更改LDAP密码吗?

感谢。

更新: 当我尝试修改自己的帐户密码时,我收到“警告:ldap_mod_replace()[function.ldap-mod-replace]:修改:访问不足”。 如果我尝试更改其他用户密码,我没有收到任何错误消息,但密码仍然坚持旧密码。

6 个答案:

答案 0 :(得分:4)

许多LDAP实现确实需要SSL或TLS才能更改/设置密码。这是LDAP服务器设置的要求,而不是用于访问它的语言。更改语言不允许您覆盖此特定服务器要求。

据我所知,在某些情况下,您可能无法建立SSL / TLS连接,但一般情况下,您绝对希望加密这样的密码功能 - 即使服务器不需要它。

编辑:我敢打赌答案可以在slapd日志中找到。另外值得查看ACL:OpenLDAP Software 2.4 Administrator's Guide, Section 8. Access Control

答案 1 :(得分:3)

该目录将密码值存储在用户的userPassword属性中 条目。根据服务器的访问控制设置,用户可以设置 userPassword的值,根据您指定的密码策略,使用 标准工具,例如ldapmodify。

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: ChAnGeMe

答案 2 :(得分:2)

您使用的是OpenLDAP还是Active Directory?它们都需要安全连接才能让您更改密码。

您无法使用ldap_mod_replace使用PHP更改Active Directory密码,如果您不是管理员,则必须使用ldap_modify_batch。

看看:https://msdn.microsoft.com/en-us/library/cc223248.aspx

如果您使用替换(您没有发送旧密码),则只有管理员才能更改密码。但是,如果您使用带有删除(使用旧密码)和添加(使用新密码)的批处理,则用户可以更改自己的密码:http://php.net/ldap-modify-batch

答案 3 :(得分:2)

ldappasswd实用程序。 e.g。

ldappasswd -H ldap://ldap.example.com:389 -D "uid=account-name,ou=serviceaccounts,dc=example,dc=com" -S -W -ZZ

如果返回referral,则需要尝试使用该服务器。通常当有一个主服务器和多个只读服务器时。

答案 4 :(得分:1)

实际上,您可以在PHP中执行此操作,不使用PHP COM扩展名进行SSL / TLS连接(但使用COM表示您必需才能使用Windows适合您应用的操作系统)。

使用COM也会绕过AD服务器的密码策略复杂性要求(不确定原因)。

$dn = 'cn=John Doe,dc=acme,dc=org';

$ldap = new COM('LDAP:');

$user = $ldap->OpenDSObject('LDAP://ACME-DC01.corp.acme.org/'.$dn, 'admin-username', 'admin-password', 1);

$user->SetPassword('NewPassword');

$user->SetInfo(); // Saved

答案 5 :(得分:0)

使用 RootDN 绑定更改用户的密码

ldappasswd -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W -S "uid=bob,ou=people,dc=example,dc=com"