自己整的一个demo能用的
#!/usr/bin/env python # -*- coding: utf-8 -*- import json from ldap3 import Server, Connection, ALL, NTLM from ldap3 import ALL_ATTRIBUTES # 注意:ldap3库如果要使用tls(安全连接),需要ad服务先安装并配置好证书服务,才能通过tls连接,否则连接测试时会报LDAPSocketOpenError('unable to open socket' # 如果是进行账号密码修改及账户激活时,会报错:“WILL_NOT_PERFORM” from ldap3 import Connection, NTLM, Server from ldap3 import MODIFY_REPLACE server1 = Server("192.168.98.143", get_info=ALL, connect_timeout=5) LDAP_SERVER_POOL = [server1] SERVER_USER = 'cn=admin,dc=my-company,dc=com' SERVER_PASSWORD = '123456' class AD(object): ''' AD用户操作 ''' def __init__(self): '''初始化''' self.conn = Connection( #配置服务器连接参数 server=LDAP_SERVER_POOL, auto_bind=True, read_only=False, #禁止修改数据:True user=SERVER_USER,#管理员账户 password=SERVER_PASSWORD, ) def create_obj(self,dn="cn=dayss,dc=my-company,dc=com",type="user",attr=None): print('connet-------') print(self.conn) print('3211') ''' 新建用户or 部门,User需要设置密码,激活账户 :param dn: dn = "ou=人事部3,ou=罗辑实验室,dc=adtest,dc=intra" # 创建的OU的完整路径 dn = "cn=张三,ou=人事部3,ou=罗辑实验室,dc=adtest,dc=intra" # 创建的User的完整路径 :param type:选项:ou or user :param attr = {#User 属性表,需要设置什么属性,增加对应的键值对 "SamAccountName": "zhangsan", # 账号 "EmployeeID":"1", # 员工编号 "Sn": "张", # 姓 "name": "张三", "telephoneNumber": "12345678933", "mobile": "12345678933", "UserPrincipalName":"zhangsan@adtest.com", "Mail":"zhangsan@adtest.com", "Displayname": "张三", "Manager":"CN=李四,OU=人事部,DC=adtest,DC=com",#需要使用用户的DN路径 } attr = {#OU属性表 'name':'人事部', 'managedBy':"CN=张三,OU=IT组,OU=罗辑实验室,DC=adtest,DC=intra", #部分负责人 } :return:True and success 是创建成功了 (True, {'result': 0, 'description': 'success', 'dn': '', 'message': '', 'referrals': None, 'type': 'addResponse'}) object_class = {'user':['user', 'posixGroup', 'top'], 'ou':['organizationalUnit', 'posixGroup', 'top'], } res = self.conn.add(dn=dn,object_class=object_class[type],attributes=attr) if type == "user": # 如果是用户时,我们需要给账户设置密码,并把账户激活 self.conn.extend.microsoft.modify_password(dn, "123456") #设置用户密码 self.conn.modify(dn, {'userAccountControl': [('MODIFY_REPLACE',512)]}) #激活用户 print(self.conn.result) return res, self.conn.result ''' # 添加一个组织 dn = 'cn=day323,dc=my-company,dc=com' res = self.conn.add(dn, attributes={'userPassword':'312321'},object_class=['simpleSecurityObject','organizationalRole']) print(res) print(self.conn.result) if __name__ == '__main__': ad = AD() ad.create_obj()