关于管理AD域控的Python pyad库的用法
00 分钟
2024-6-5
2024-7-7
type
status
date
slug
summary
tags
category
icon
password
Active Directory(AD)是微软推出的一种企业级目录服务,它提供了集中化管理网络资源、用户账户和权限的能力。在一个大型网络环境中,通常有成千上万的用户账户和计算机,其中每个用户都属于一个或多个用户组。因此,了解用户组的信息对网络管理非常重要。幸运的是,Python提供了一些库和API,可以方便地获取AD域用户组的信息。
 
pyad 是一个Python库,用于管理Microsoft Active Directory(AD)。它提供了一组API来对用户、组、计算机等对象进行操作,并与AD交互。
 
Python官方文档:pyad · PyPI
 

安装:

 
我们可以去这个地址下载pyad · PyPI的安装包,也可以通过pip在线安装
 
pyad在github上有介绍,pyad的gitbub地址,还需要配合pywin32进行使用
 
 

基本操作-连接域控

 
如果我们的电脑已经加入了AD域,使用如下代码可直接连接到AD域查询用户:
 
我们也可以传入LDAP服务器、用户名和密码 来连接特定的域控制器和备用凭据,set_defaults中可设置的选项如下:ldap_server、gc_server、ldap_port、gc_port、用户名、密码和 ssl(True/False)
 
如上代码中,ldap_server填写你的Active Directory(AD)域控服务器的主机名或IP地址,username和password应该填写一个具有查询AD权限的用户的凭据,这个用户可以是一个专门用于程序连接AD的服务账号。
 
在连接查询特定用户时,也可以传入选项。options参数,传递一些额外的设置或配置给ADUser.from_cn方法,以便根据你的需求来定制查询的行为。
 
 

基本对象操作-查询账号

 
Active Directory 中不同类型的对象有一阶 Python 类,ADUser 表示用户对象,ADGroup 表示组。所有对象都是 ADObject 的子类。大多数方法都在 ADObject 中定义,但子类通常提供额外的帮助程序方法(例如,ADUser 具有 set_password,ADGroup 具有 add_member)。
 
如果您已经知道对象的类型,则可以按可分辨名称、CN、UPN 和 GUID 连接到对象。
 
 

GUID是什么呢?

 
在Active Directory中,每个对象都有一个全局唯一标识符(GUID),用于唯一标识该对象。GUID是一个128位(16个字节)的数字,通常以十六进制表示。在上述代码中,user3 = aduser.ADUser.from_guid("XXX-XXX-XXX") 中的GUID就是指代Active Directory中特定对象的全局唯一标识符。
 
要查询特定对象的GUID,可以通过Active Directory管理工具来获取。下面是一种获取AD对象GUID的方法:
  1. 使用Active Directory Users and Computers(ADUC)工具来查找对象的GUID。打开ADUC,找到你要查询的对象,右键点击属性,然后在属性窗口中找到Object属性,其中包含了该对象的GUID。
  1. 使用PowerShell命令来查询对象的GUID。可以使用类似以下的PowerShell命令来获取对象的GUID:
    1. 其中username是你要查询的用户名。
       
      notion image
       
一旦你获得了特定对象的GUID,就可以将其用于查找该对象或执行其他操作,就像上述代码中的user3 = aduser.ADUser.from_guid("XXX-XXX-XXX") 一样。
 
还可以将 pyad 工厂与任意 Active Directory 对象一起使用,并接收适当分类的 Python 对象:
 
 

创建账号

 
pyad库提供了pyad.aduser.ADUser类来表示域控中的用户账号。我们可以通过创建ADUser对象并设置相应的属性来创建新的用户账号。
 
下面是一个示例,演示如何创建一个新的用户账号:
输出:
 
这里可能出现用户创建成功,new_user.update_attribute 方法没有成功更新用户属性,大概有以下几种原因:
  1. 权限问题:确保你的账号具有足够的权限来修改AD域控用户的属性。如果权限不足,就无法成功更新用户属性。
  1. 属性名错误:确保你使用的属性名是正确的,要根据AD中的属性名来更新用户属性。
  1. AD域控设置:有些属性可能受到AD域控设置的限制,例如只读属性或者禁止修改的属性。
  1. 连接问题:如果连接到AD域控的过程中出现了问题,也会导致更新用户属性失败。
 
在使用 pyad 创建完 AD 域用户之后,还可以使用以下方法来更改用户的属性:
  1. update_attribute(attribute_name, value): 这个方法用于更新指定属性的值。
  1. update_password(new_password): 用于更改用户的密码。
  1. move_to(ou): 用于将用户移动到指定的组织单位(OU)下。
  1. unlock_account(): 用于解锁用户账户。
  1. disable_account() 和 enable_account(): 用于禁用和启用用户账户。
  1. delete(): 用于删除用户账户。
除了上述方法之外,你还可以获取用户的属性信息,如获取用户的名称、邮箱、部门等信息。
需要注意的是,具体可以更改的用户属性取决于你的 AD 域环境的设置和用户对象的属性。一般来说,常见的属性包括用户名、密码、显示名称、描述、邮箱、部门、电话等。通过这些方法,你可以对用户的各种属性进行增删改查的操作。

查询账号

 
输出:
notion image
 
 

完整代码

 

实现效果

 
notion image
notion image
notion image
 
上一篇
Ubuntu 20.0.4配置Python环境/安装Pycharm
下一篇
Python获取Windows系统已安装软件列表