Python ldap3库使用方法

ldap3是一个python进行LDAP操作相关的一个库,这里主要是用ldap3来对微软的AD进行一些用户相关的操作。

安装

在命令行中使用以下命令安装 ldap3

pip install ldap

使用

初始化连接

# 创建服务器对象
server = Server("LDAP://127.0.0.1", use_ssl=True, get_info=ALL)
# 创建连接对象
conn = Connection(server, "admin@test.com", password, auto_bind=True)

在上述代码中,将 'LDAP://127.0.0.1'替换为实际的 LDAP 服务器地址,'admin@test.com''password'替换为有效的用户 DN 和密码。

注意,需要启用use_ssl,否则后续的更新会出现异常。

查询组组架构

def get_ou():
     conn.search(
           search_base="DC=test,DC=com",
           search_filter="(objectclass=organizationalUnit)",
           attributes=ALL_ATTRIBUTES,
     )
     res = self._conn.response_to_json()  # 将查询结果转换为json格式
     res = json.loads(res)["entries"]
     print(res)

查询用户

1、根据用户名查询

def search_user_by_account_name(AccountName):
  conn.search(
    search_base="DC=test,DC=com",  # 坐标
    search_filter=f"(&(objectclass=user)(sAMAccountName={AccountName}))",  # 查询条件
    attributes=ALL_ATTRIBUTES, # 返回的属性
  )  # attributes 限制查询出来的属性包括
  res = self._conn.response_to_json()  # 将查询结果转换为json格式
  res = json.loads(res)["entries"]

2、查询某个部门下面所有用户

def search_user_by_dept():
  conn.search(
    search_base="OU=总公司,DC=test,DC=com", # 坐标
    search_filter=f"(objectclass=user)", # 查询条件
    attributes=ALL_ATTRIBUTES, # 返回的属性
  )  # attributes 限制查询出来的属性包括
  res = self._conn.response_to_json()  # 将查询结果转换为json格式
  res = json.loads(res)["entries"]

注意:
关于search_filter的查询条件之间的与查询使用&, 或使用|,示例如下:

# 与查询
(&(objectclass=user)(sAMAccountName={AccountName}))
# 或查询
(|(objectclass=user)(sAMAccountName={AccountName}))

用户操作

新增用户

当新员工加入组织时,可以编写脚本使用 ldap3 自动在 LDAP 目录中创建用户条目,分配初始密码,并将用户添加到相应的组织单元和组中。

def add_user():
    user_attributes = {
        'objectClass': ['top', 'person', 'organizationalPerson', 'user'],
        'givenName': "小三", # 名字
        'sn': '张',  # 姓
        'cn': '张小三',  # 完整的姓名
        'sAMAccountName': "zhangxs", # 唯一账号
        'userPrincipalName': "zhangxs@test.com",  # 域帐号
        'mail': "zhangxs@test.com", # 邮箱
        'pwdLastSet': [-1], # 是否在登录后重置密码,0->表示每次登录后都需重置密码,-1 -> 表示密码永不过期
        "userAccountControl": "544", 
        'displayName': "张小三",  # 显示的名称
        'userPassword': "ad@101131"   # 用户密码
    }
    user_dn = "cn=张小三,dc=test,dc=com"
    conn.add(user_dn, attributes=user_attributes)

这将在指定的 DN(例如 张小三,dc=test,dc=com)处添加一个新的用户条目。

修改密码

将员员忘记密码或是密码过期时,可以使用LDAP接口进行密码重置。注意需要在conn时,使用LDAPS://xxxx,然后设置use_ssl=True

# 创建服务器对象
server = Server("LDAPS://127.0.0.1", use_ssl=True, get_info=ALL)
# 创建连接对象
conn = Connection(server, "admin@test.com", password, auto_bind=True)
user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
conn.extend.microsoft.modify_password(user_dn, new_password="123456")

修改用户信息

可以修改已存在用户的各种属性。比如更新用户的姓名、密码、所属组等信息。

user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
conn.modify(user_bn, {
   "userAccountControl": [(ldap3.MODIFY_REPLACE, [512])]  # 用户的属性信息
})

启用用户

当员工入职时,将其在LDAP 中的账户置为启用状态。

user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
conn.modify(user_bn, {
   "userAccountControl": [(ldap3.MODIFY_REPLACE, [512])]  # 用户的属性信息
})

禁用用户

当员工离职时,删除其在 LDAP 中的条目。例如,离职员工可以从所有相关组中移除,并标记其账户为禁用状态。

user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
conn.modify(user_bn, {
   "userAccountControl": [(ldap3.MODIFY_REPLACE, [514])]  # 用户的属性信息
})

授权用户到某权限组

user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
admin_dn = "CN=Domain Admins,CN=Users,DC=test,DC=com"
conn.extend.microsoft.add_members_to_groups(user_bn, admin_dn)

移除用户权限

user_bn = "CN=张小三,OU=总公司,DC=test,DC=com"
admin_dn = "CN=Domain Admins,CN=Users,DC=test,DC=com"
conn.extend.microsoft.remove_members_from_groups(user_bn, admin_dn)

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/2235

Previous 2024年8月28日 上午11:39
Next 2024年9月26日 下午5:51

相关推荐