专栏首页BigYoung小站Ldap3 库使用方法(三)

Ldap3 库使用方法(三)

前一篇文章我们讲解了Ldap3库的连接AD服务器的方法

今天给大家讲解如何使用Ldap3 库创建AD中用户和部门(OU)

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import json
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("adtest.com", port=636, use_ssl=True, get_info=ALL, connect_timeout=5)
LDAP_SERVER_POOL = [server1]
SERVER_USER = 'adtest\\administrator'
SERVER_PASSWORD = "XXXXXXX"


class AD(object):
'''    AD用户操作    '''
def __init__(self):
'''初始化'''
self.conn = Connection( #配置服务器连接参数
server=LDAP_SERVER_POOL,
auto_bind=True,
authentication=NTLM,  #连接Windows AD需要配置此项
read_only=False,  #禁止修改数据:True
user=SERVER_USER,#管理员账户
password=SERVER_PASSWORD,
)


self.leaved_base_dn = 'ou=Leaved,dc=adtest,dc=intra'#离职账户所在OU
self.active_base_dn = 'ou=测试部门,dc=adtest,dc=intra'#正式员工账户所在OU
self.search_filter = '(objectclass=user)'#只获取【用户】对象
self.ou_search_filter = '(objectclass=organizationalUnit)'#只获取【OU】对象


def create_obj(self,dn,type,attr=None):
'''
新建用户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, "XXXXXXXXX")    #设置用户密码
self.conn.modify(dn, {'userAccountControl': [('MODIFY_REPLACE',512)]})    #激活用户
return res, self.conn.result

以上是Ldap3库对AD的User和OU新增的方法。具体的文档,可以参考官网文档:Ldap3 文档

本文分享自微信公众号 - BigYoung小站(bigyoungs),作者:Young文人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Ldap3 库使用方法-完整版修改连接

    BigYoung小站
  • 我终于弄懂了Python的装饰器(一)

    好吧,您只具备了解装饰器所需的所有信息。您会看到,装饰器是“包装器(wrappers)”,这意味着**它们使您可以在装饰函数之前和之后执行代码,**而无需修改函...

    BigYoung小站
  • Ldap3 库使用方法(五)

    今天给大家讲解如何使用Ldap3 库删除AD中用户和部门(OU),以及封装一个账户密码认证方法

    BigYoung小站
  • java使用spark/spark-sql处理schema数据

    1、spark是什么? Spark是基于内存计算的大数据并行计算框架。 1.1 Spark基于内存计算 相比于MapReduce基于IO计算,提高了在大数据环境...

    用户1225216
  • EasyNVR调取接口在web页实现多通道同时直播

    EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,E...

    EasyNVR
  • 人工智能简史

    《人工智能简史》全面讲述人工智能的发展史,几乎覆盖人工智能学科的所有领域,包括人工智能的起源、自动定理证明、专家系统、神经网络、自然语言处理、遗传算法、深度学习...

    iOSDevLog
  • MySQL可更新视图

    可更新视图是指通过视图,来更新、插入、删除基本表中的数据。视图是一个虚拟表,即对视图的更新,实质上是更新基表。但是视图的构造很多时候是由多个表连接查询,以及结合...

    Leshami
  • 循环语句For each...next语句

    大家好,前面已经介绍过循环结构的for..next和do...loop系列语句。还有一种用于处理对象集合的循环语句,即for each...next语句,在本节...

    无言之月
  • 海康、大华等网络摄像头RTSP_Onvif网页无插件直播流媒体服务器EasyNVR接入EasyNVS显示“请求服务不存在或以停止”文字如何处理?

    EasyNVR核心在于摄像机的音视频流的获取、转换、转码与高性能分发,同时同步完成对实时直播流的录像存储,在客户端(PC浏览器、Android、iOS、微信)进...

    EasyNVR
  • opencv2.4.9:为caffe编译精简的opencv_core,opencv_imgproc,opencv_highgui全静态库

    编译caffe时用到了opencv,其实caffe只用到OpenCV很小一部功能 ,具体就是opencv_core,opencv_imgproc,opencv_...

    用户1148648

扫码关注云+社区

领取腾讯云代金券