无法更新 LDAP 管理员密码

无法更新 LDAP 管理员密码

我有以下 python 脚本来更新 LDAP 密码。

import ldap
from ldap import LDAPError
user_dn = "CN=******,OU=Admins,OU=Example Users,DC=Example,DC=com"
old_password = "pass01"
new_password = "pass02"

def change_password(user_dn, old_password, new_password):
    #ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,0)
    #l = ldap.initialize("ldap://ds.example.com:3268")
    l = ldap.initialize("ldap://ds.example.com:389")
    l.set_option(ldap.OPT_REFERRALS,0)
    l.set_option(ldap.OPT_PROTOCOL_VERSION,3)
    l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
    l.set_option(ldap.OPT_X_TLS_DEMAND,True)
    l.set_option(ldap.OPT_DEBUG_LEVEL,255)
    try:
        l.simple_bind_s("[email protected]", old_password)
    except ldap.LDAPError, e:
        print "LDAP error1: {}".format(e)

    # Reset Password
    unicode_pass = unicode('\"' + str(new_password) + '\"', 'iso-8859-1')
    password_value = unicode_pass.encode('utf-16-le')
    add_pass = [(ldap.MOD_REPLACE, 'unicodePwd', [password_value])]
    try:
        l.modify_s(user_dn,add_pass)
    except ldap.LDAPError, e:
        print "LDAP error2: {}".format(e)
    l.unbind_s()

change_password(user_dn, old_password, new_password)

这引发了第二个例外:

LDAP error2: {'info': 'Referral:\nldap://example.com/CN=*******,OU=Admins,OU=Example%20Users,DC=example,DC=com', 'desc': 'Referral'}

user_dn 条目是正确的 - 与内部帐户管理系统上显示的完全一样。我收到此错误是因为它是管理员密码并且需要以不同方式处理吗?任何帮助都将不胜感激。

答案1

显而易见的问题:您是否在有权更改帐户的用户上下文中运行此操作?

除非您的域没有安全性 - 这看起来像一个 AD 域 - 否则您需要绑定一个有效帐户,并且该帐户需要具有修改另一个帐户的权限。

第二:对于 Windows 域,如果您没有先使用 NTLM 或 Kerberos 进行身份验证,则必须通过 SSL 执行此操作。https://support.microsoft.com/en-au/help/269190/how-to-change-a-windows-active-directory-and-lds-user-password-through-ldap

最后,如果您必须使用 Python 而不是 .NET 或 Powershell,我强烈建议使用 PyAD 模块,它使用比普通 LDAP 好得多的 ADSI 样式的方法。https://zakird.com/pyad/index.html

相关内容