Python 3.5、ldap3 和 modify_password()
Python 3.5, ldap3 and modify_password()
我一直在努力尝试通过脚本发送更新我自己的密码的请求。这是代码:
#!/usr/bin/python3.5
from ldap3 import Server, Connection, NTLM, ALL
server = Server('ldap://192.168.0.80', use_ssl=True)
conn = Connection(server, user="local\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)
dn = "CN=dctest,CN=Users,DC=home,DC=local"
conn.extend.microsoft.modify_password(dn, new_password="Pa55word2", old_password="Pa55word1")
我得到的错误是:
{'dn': '', 'type': 'modifyResponse', 'description':
'unwillingToPerform', 'referrals': None, 'result': 53, 'message':
'00002077: SvcErr: DSID-03190E44, problem 5003 (WILL_NOT_PERFORM),
data 0\n\x00'}
知道我做错了什么吗?
我拥有对 DC 的完全访问权限,并且我已确保密码正确等。我已经阅读了所有文档,只是无法理解它。
任何帮助都会很棒!!
尝试使用 ldaps:// 而不是 ldap://。或者根本不使用该方案并在服务器定义中传递 use_ssl=True 。 AD连接必须使用ssl修改密码
您使用的是哪个版本的 ldap3?从 ldap3 2.2 版的源代码来看,在我看来,该函数应该以类似的方式使用:
#!/usr/bin/python3.5
from ldap3 import Server, Connection, NTLM, ALL
server = Server('ldap://192.168.0.80', use_ssl=True)
conn = Connection(server, user="local\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)
res = ldap3.extend.microsoft.modifyPassword(conn, user, "new_Pa55word2", "old_Pa55word1")
ldap3.modify_password() 版本 0.9.4.2 不适用于 Active Directory,因为它使用 AD 不支持的密码修改扩展操作。 MS好像找到了way to do things different with AD。 ldap3 作者 (cannatag) 意识到了这一点,并在不久之后添加了 ad_modify_password() 。您必须使用较新版本的 ldap3。
好的,感谢大家的帮助,以及 github 上的开发人员。
我最终用来完成这项工作的代码是...
from ldap3 import Server, Connection
server = Server('ldaps://<AD server address>', use_ssl=True)
conn = Connection(server, user="<domain>\<username>", password="<current password>", auto_bind=True)
dn = 'CN=<username>,OU=Users,DC=<dominaname>'
res = conn.extend.microsoft.modify_password(dn, old_password='<current password>', new_password='<new password>')
print(res)
我想 post 可行的解决方案,因为互联网上似乎没有任何解决方案!!上帝加速我的同胞 devops 人。
我一直在努力尝试通过脚本发送更新我自己的密码的请求。这是代码:
#!/usr/bin/python3.5
from ldap3 import Server, Connection, NTLM, ALL
server = Server('ldap://192.168.0.80', use_ssl=True)
conn = Connection(server, user="local\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)
dn = "CN=dctest,CN=Users,DC=home,DC=local"
conn.extend.microsoft.modify_password(dn, new_password="Pa55word2", old_password="Pa55word1")
我得到的错误是:
{'dn': '', 'type': 'modifyResponse', 'description': 'unwillingToPerform', 'referrals': None, 'result': 53, 'message': '00002077: SvcErr: DSID-03190E44, problem 5003 (WILL_NOT_PERFORM), data 0\n\x00'}
知道我做错了什么吗?
我拥有对 DC 的完全访问权限,并且我已确保密码正确等。我已经阅读了所有文档,只是无法理解它。
任何帮助都会很棒!!
尝试使用 ldaps:// 而不是 ldap://。或者根本不使用该方案并在服务器定义中传递 use_ssl=True 。 AD连接必须使用ssl修改密码
您使用的是哪个版本的 ldap3?从 ldap3 2.2 版的源代码来看,在我看来,该函数应该以类似的方式使用:
#!/usr/bin/python3.5
from ldap3 import Server, Connection, NTLM, ALL
server = Server('ldap://192.168.0.80', use_ssl=True)
conn = Connection(server, user="local\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)
res = ldap3.extend.microsoft.modifyPassword(conn, user, "new_Pa55word2", "old_Pa55word1")
ldap3.modify_password() 版本 0.9.4.2 不适用于 Active Directory,因为它使用 AD 不支持的密码修改扩展操作。 MS好像找到了way to do things different with AD。 ldap3 作者 (cannatag) 意识到了这一点,并在不久之后添加了 ad_modify_password() 。您必须使用较新版本的 ldap3。
好的,感谢大家的帮助,以及 github 上的开发人员。
我最终用来完成这项工作的代码是...
from ldap3 import Server, Connection
server = Server('ldaps://<AD server address>', use_ssl=True)
conn = Connection(server, user="<domain>\<username>", password="<current password>", auto_bind=True)
dn = 'CN=<username>,OU=Users,DC=<dominaname>'
res = conn.extend.microsoft.modify_password(dn, old_password='<current password>', new_password='<new password>')
print(res)
我想 post 可行的解决方案,因为互联网上似乎没有任何解决方案!!上帝加速我的同胞 devops 人。