【问题标题】:LDAP to change user passwordLDAP更改用户密码
【发布时间】:2011-01-27 02:45:50
【问题描述】:

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

是否有另一种方法,例如,其他语言 (JAVA / ASP) 无需 SSL 即可更改 LDAP 密码?

谢谢。

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

【问题讨论】:

  • 这可能取决于您使用的 LDAP 服务。

标签: ldap change-password


【解决方案1】:

ldappasswd 实用程序。例如

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我知道一个允许用户重置/更改密码的软件,尽管我当前的 LDAP 没有启用 SSL。 manageengine.com/products/self-service-password/index.html
    • @neobie 也许我误解了你的问题。听起来您试图绕过 ldap 服务器规定的 ssl 要求。我很高兴你能成功!
    • 不,它没有。那是第 3 方软件,但现在我正在尝试使用 PHP 进行开发。
    【解决方案3】:

    您使用的是 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

    【讨论】:

    • 另请注意,这两个操作是不同的:执行ldap_mod_replace(或ldap_modify_batchLDAP_MODIFY_BATCH_REPLACE)会导致密码重置操作,而使用ldap_modify_batch ..._REMOVE..._ADD密码更改 操作。主要区别在于 reset 操作无法访问以前加密的文件(因为它们是用旧密码加密的),而 change 操作不会受到影响这个限制(因为文件用旧密码解密并用新密码重新加密)。
    【解决方案4】:

    实际上,您可以在 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】:

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

      ldapmodify -h 主机 -p 端口 -D "cn=目录管理器" -w 密码 dn: uid=bjensen,ou=人,dc=example,dc=com 更改类型:修改 替换:用户密码 用户密码:ChAnGeMe

      【讨论】:

        【解决方案6】:

        使用 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"
        

        【讨论】:

          猜你喜欢
          • 2017-05-06
          • 1970-01-01
          • 2012-06-26
          • 2020-02-29
          • 1970-01-01
          • 2018-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多