python:ldap3連接openldap


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM