我似乎遇到了在AD中重置密码的经典错误,即使我在网上找到的所有内容都指向我应该是金色的事实。
代码优先。
from ldap3 import *
username = '<account with the proper permissions>'
password = '<totally@realpassword>'
server = Server('<fqdn of server>', use_ssl=True, get_info=ALL)
conn = Connection(server, user='<domain>\\' + username, password=password, authentication=NTLM, auto_bind=True)
print(conn)
user_dn = 'CN=Test,OU=US,OU=NA,OU=Employees,OU=Users,DC=domain,DC=com'
new_pass = 'U^mod2olla'
r = conn.extend.microsoft.modify_password(user_dn, new_pass)
print(conn.result)
这似乎是通过SSL实例化与LDAP服务器的连接的正确方法,如此连接打印输出所证实的那样:
ldaps://ldap.domain.com:636 - ssl - user: domain.com\samaccountname - not lazy - bound - open - <local: IP:62368 - remote: IP:636> - tls not started - listening - SyncStrategy - internal decoder
但我仍然收到此错误:
{'result': 53, 'description': 'unwillingToPerform', 'dn': '', 'message': '0000001F: SvcErr: DSID-031A1248, problem 5003 (WILL_NOT_PERFORM), data 0\n\x00', 'referrals': None, 'type': 'modifyResponse'}
从我的Google搜索中,这通常意味着密码未正确编码,或者根据LDAP服务器连接不够安全。
我此时已经迷路了。想法?
@cannatag如果你在外面......我需要你:)
https://github.com/cannatag/ldap3/issues/130
Python 3.5, ldap3 and modify_password()
答案 0 :(得分:0)
您需要将AD绑定到域管理员。
之后搜索userdn并修改
我使用c.modify(user_dn,{&#34; userAccountControl&#34; :( MODIFY_REPLACE,512)})确保用户可以登录(如果锁定或我们无法更改密码或密码已经过了)
admin = CONF['admin']['user']
passwdadm = CONF['admin']['pass']
with connect_ldap(authentication=SIMPLE, user=admin, password=passwdadm) as c:
c.bind()
user_dn = find_user_dn(c, username)
c.modify(user_dn,{"userAccountControl":(MODIFY_REPLACE,512)})
print(c.result)
c.unbind()
with connect_ldap(authentication=SIMPLE, user=admin, password=passwdadm) as c:
c.bind()
user_dn = find_user_dn(c, username)
c.extend.microsoft.modify_password(user_dn, new_pass, old_pass)
print(c.result)
c.unbind()
答案 1 :(得分:0)
不幸的是,我认为没有与代码相关的问题我是对的。
我与我们的一些域管理员聊天,他们向我确认我使用LDAPS连接的服务器实际上是F5,LDAPS在那里终止。这意味着在没有特定证书和IP的情况下,无法与任何单个域控制器建立LDAPS连接。这样做对我的系统来说不可扩展或不现实,所以我不会使用这种方法来重置AD中的密码。
如果有人发现自己处于类似情况,我建议您从Linux查看PowerShell远程处理。现在可以在Linux上运行本机PowerShell并在Windows Server上打开会话以在本地执行命令。目前您需要PS 6.0测试版。