问题描述
我们正在尝试通过Python中的Ldap3库创建一个服务帐户。服务帐户已成功创建,但是存在一个小问题。用于“用户无法更改密码”的复选框之一未被选中。
我们进行了一些研究,发现要设置此属性,我们需要遵循此处给出的一些步骤:https://docs.microsoft.com/en-us/windows/win32/adsi/modifying-user-cannot-change-password-ldap-provider。在此链接中给出的逻辑与Python使用不同的编程语言,因此我们尝试在Python中复制相同的逻辑。根据我们的理解,我们实现了该功能,该功能已成功执行,但是在AD服务器上看不到预期的效果(“用户无法更改密码”复选框未选中)。
下面是用于创建ACL对象并将其添加到服务帐户的代码。
def create_object_ace(privguid,sid):
print("creating ace object")
nace = ldaptypes.ACE()
nace['AceType'] = ldaptypes.ACCESS_DENIED_OBJECT_ACE.ACE_TYPE
nace['AceFlags'] = 0x00
acedata = ldaptypes.ACCESS_DENIED_OBJECT_ACE()
acedata['Mask'] = ldaptypes.ACCESS_MASK()
acedata['Mask']['Mask'] = ldaptypes.ACCESS_ALLOWED_OBJECT_ACE.ADS_RIGHT_DS_CONTROL_ACCESS
acedata['ObjectType'] = string_to_bin(privguid)
acedata['InheritedObjectType'] = b''
acedata['Sid'] = ldaptypes.LDAP_SID()
acedata['Sid'].fromCanonical(sid)
assert sid == acedata['Sid'].formatCanonical()
acedata['Flags'] = ldaptypes.ACCESS_DENIED_OBJECT_ACE.ACE_OBJECT_TYPE_PRESENT
nace['Ace'] = acedata
return nace
s = Server('ad_server.com',get_info=ALL)
c = Connection(s,user="testdomain\\username",password="password",authentication=NTLM)
c.search(search_base="DC=testad,DC=com",search_filter="(CN=svc_account_47)",search_scope=SUBTREE,attributes=['objectSid','sAMAccountName'])
entry = c.entries[0]
usersid = entry['objectSid'].value
controls = security_descriptor_control(sdflags=0x04)
c.search(search_base="DC=testahs,search_filter='(&(objectCategory=domain))',attributes=['SAMAccountName','nTSecurityDescriptor'],controls=controls)
entry = c.entries[0]
secDescData = entry['nTSecurityDescriptor'].raw_values[0]
secDesc = ldaptypes.SR_SECURITY_DESCRIPTOR(data=secDescData)
secDesc['Dacl']['Data'].append(create_object_ace('ab721a53-1e2f-11d0-9819-00aa0040529b',usersid)) # This GUID is for 'User cannot change password'
dn = entry.entry_dn
data = secDesc.getData()
c.modify(dn,{'nTSecurityDescriptor': (ldap3.MODIFY_REPLACE,[data])},controls=controls)
print(c.result) # gives -> {'result': 0,'description': 'success','dn': '','message': '','referrals': None,'type': 'modifyResponse'}
Python代码参考来自以下链接:
有人可以在这里帮助我。预先感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)