自己整的一個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()