AD 域 UserAccountControl 属性、AD 域重要用户属性
最编程
2024-05-06 08:24:46
...
武汉源创会回归,4月20聊聊大模型”
AD域UserAccountControl属性、AD域重要用户属性
-
- 1. UserAccountControl属性
- 2. 重要用户属性
1. UserAccountControl属性
因为在修改AD域用户状态的时候发现,一些博客给定的禁用和启用用户的状态值并不一致,参考官网文档和国外的博客发现用户在禁用状态下,也会包含其他属性,这些属性有些是相加的。全量的属性列表如下:
如何参考并使用这个对照表呢?
- 可以搜索表中关于
Disabled
的行对应的十进制值,在程序中可以使用作为状态的判断——
UserAccountControl属性为514
、546
、66050
、66080
、66082
里面的值的可以判断为禁用账号; - 搜索
Enabled
,值为544
、66048
、262656
的以及默认账户类型512
可以判断为启用账户;
在开发中,现在的做法是:
self.disabled_user_flag = [514, 546, 66050, 66080, 66082] # 禁用账户的userAccountControl值列表
self.enabled_user_flag = [512, 544, 66048, 262656] # 启用账户
...
if en['attributes']['userAccountControl'] in self.disabled_user_flag: # 遍历用户的userAccountControl属性,在self.disabled_user_flag标志列表中的则为禁用账户
pass
属性标志 | 十六进制 | 十进制 | 非官方值 |
---|---|---|---|
SCRIPT | 0x0001 | 1 | |
ACCOUNTDISABLE | 0x0002 | 2 | |
HOMEDIR_REQUIRED | 0x0008 | 8 | |
LOCKOUT | 0x0010 | 16 | |
PASSWD_NOTREQD | 0x0020 | 32 | |
PASSWD_CANT_CHANGE | 0x0040 | 64 | |
ENCRYPTED_TEXT_PWD_ALLOWED | 0x0080 | 128 | |
TEMP_DUPLICATE_ACCOUNT | 0x0100 | 256 | |
NORMAL_ACCOUNT 默认账户
|
0x0200 | 512 | |
Disabled Account 禁用账户
|
0x0202 | 514 | x |
Enabled, Password Not Required 启用账户 不需密码
|
0x0220 | 544 | x |
Disabled, Password Not Required 禁用账户 不需密码
|
0x0222 | 546 | x |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 | |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 | |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 | |
DONT_EXPIRE_PASSWORD | 0x10000 | 65536 | |
Enabled, Password Doesn’t Expire 启用账户 密码未过期
|
0x10200 | 66048 | x |
Disabled, Password Doesn’t Expire 禁用账户 密码未过期
|
0x10202 | 66050 | x |
Disabled, Password Doesn’t Expire & Not Required 禁用账户 密码未过期且不需密码
|
0x10220 | 66080 | x |
Disabled, Password Doesn’t Expire & Not Required 禁用账户 密码未过期且不需密码
|
0x10222 | 66082 | x |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 | |
SMARTCARD_REQUIRED | 0x40000 | 262144 | |
Enabled, Smartcard Required 下面几个都是需要使用智能卡登录账户(我们不涉及) | 0x40200 | 262656 | x |
Disabled, Smartcard Required | 0x40202 | 262658 | x |
Disabled, Smartcard Required, Password Not Required | 0x40222 | 262690 | x |
Disabled, Smartcard Required, Password Doesn’t Expire | 0x50202 | 328194 | x |
Disabled, Smartcard Required, Password Doesn’t Expire & Not Required | 0x50222 | 328226 | x |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 | |
Domain controller | 0x82000 | 532480 | |
NOT_DELEGATED | 0x100000 | 1048576 | |
USE_DES_KEY_ONLY | 0x200000 | 2097152 | |
DONT_REQ_PREAUTH | 0x400000 | 4194304 | |
PASSWORD_EXPIRED | 0x800000 | 8388608 | |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 | |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
属性说明(可不看):
- SCRIPT – 将运行登录脚本。
- ACCOUNTDISABLE – 用户帐户已禁用。
- HOMEDIR_REQUIRED – 主文件夹是必需的。
- PASSWD_NOTREQD – 不需要密码。
- PASSWD_CANT_CHANGE – 用户无法更改密码。这是对用户对象的权限。 有关如何以编程方式设置此权限的信息,请访问以下网站:Modifying User Cannot Change Password (LDAP Provider)
- ENCRYPTED_TEXT_PASSWORD_ALLOWED – 用户可以发送加密的密码。
- TEMP_DUPLICATE_ACCOUNT – 这是其主要帐户位于另一个域中的用户的帐户。该帐户为用户提供对该域的访问权限,但不提供对任何信任该域的域的访问权限。有时称为本地用户帐户。
- NORMAL_ACCOUNT – 这是代表典型用户的默认帐户类型。
- INTERDOMAIN_TRUST_ACCOUNT – 这是允许信任信任其他域的系统域的帐户的许可。
- WORKSTATION_TRUST_ACCOUNT – 这是运行Microsoft Windows NT 4.0工作站,Microsoft Windows NT 4.0 Server,Microsoft Windows 2000 Professional或Windows 2000 Server的计算机的计算机帐户,并且是此域的成员。
- SERVER_TRUST_ACCOUNT – 这是域控制器的计算机帐户,该域控制器是该域的成员。
- DONT_EXPIRE_PASSWD – 表示密码,该密码永远不会在该帐户上过期。
- MNS_LOGON_ACCOUNT – 这是MNS登录帐户。
- SMARTCARD_REQUIRED – 设置此标志后,它将强制用户使用智能卡登录。
- TRUSTED_FOR_DELEGATION – 设置此标志后,将为Kerberos委派信任运行该服务的服务帐户(用户或计算机帐户)。任何此类服务都可以模拟请求该服务的客户端。要为Kerberos委派启用服务,必须在服务帐户的userAccountControl属性上设置此标志。
- NOT_DELEGATED – 设置此标志时,即使将服务帐户设置为受Kerberos委派的信任,也不会将用户的安全上下文委派给服务。
- USE_DES_KEY_ONLY – (Windows 2000 / Windows Server 2003)将此主体限制为仅对密钥使用数据加密标准(DES)加密类型。
- DONT_REQUIRE_PREAUTH – (Windows 2000 / Windows Server 2003)此帐户登录时不需要Kerberos预身份验证。
- PASSWORD_EXPIRED – (Windows 2000 / Windows Server 2003)用户密码已过期。
- TRUSTED_TO_AUTH_FOR_DELEGATION –(Windows 2000 / Windows Server 2003)帐户已启用委派。这是对安全性敏感的设置。启用此选项的帐户应受到严格控制。使用此设置,可以在帐户下运行的服务采用客户端的身份,并以该用户身份向网络上的其他远程服务器进行身份验证。
- PARTIAL_SECRETS_ACCOUNT – (Windows Server 2008 / Windows Server 2008 R2)该帐户是只读域控制器(RODC)。这是对安全性敏感的设置。从RODC删除此设置会损害该服务器上的安全性。
2. 重要用户属性
AD域中的字段 | 含义 | 示例 | 说明 |
---|---|---|---|
objectGUID | 对象的唯一标识符 | 24699359-f8c2-482a-a3d6-e5557c31bd19 | 无需用户修改 |
sAMAccountName | SAM账号 | P009527 | 登录账号 |
distinguishedName | 对象dn | CN=李四9527,OU=研发支持,OU=上海总部,OU=XXX,OU=COM | 对象在AD域中的位置 |
pwdLastSet | 用户下次登录必须修改密码 | 0 | 默认不设置,需要强制其修改则设置为0 |
accountExpires | 账户过期时间 | 0 | 设置为0永不过期,否则设置为NT时间 |
whenCreated | 对象创建时间 | 2020-10-09 09:17:49+00:00 | 用于表示日期和时间的国际标准是ISO8601。其完整参考编号是ISO 8601:1988(E),其标题是“数据元素和交换格式-信息交换-日期和时间的表示”。 |
whenChanged | 对象修改时间 | 2020-10-09 09:17:50+00:00 | |
displayname | 显示名 | 李四 | |
sn | 姓 | 李 | |
givenName | 名 | 四 | |
电子邮件 | si.li@XXX.com | ||
mobile | 移动电话 | 15002510721,13341667654 | |
telephoneNumber | 电话号码 | 051632423534 | |
company | 公司 | 小米 | |
department | 部门 | 研发支持 | |
title | 职务 | 技术顾问 |
accountExpires
如果您在AD中设置了一个帐户,该帐户于2020年10月15日下午5:00到期,则该帐户在AD中有效的最后一天是7月14日。
如果使用Microsoft管理控制台将帐户设置为在2020年10月15日到期,则“登录到期时间”的accountExpires
属性设置为在2020年10月16日上午12:00到期,因为Microsoft管理控制台不允许使用要设置的时间值,默认值为12:00 am
在AD中将accountExpires的值设置为“ -1”将导致eDirectory设置为:2106年2月7日,美国东部标准时间(2860207062815Z)1:28:15。
**accountExpires**字段在创建用户的时候可以给定限制,假设当前时间是2020年11月23日,我们给这个用户三个月的有限期,则有如下`python`代码:
def current_time2nt_time_plus_mouths ( M ):import timeimport datetimefrom dateutil.relativedelta import relativedelta'''当前时间加一个时间差并转换为NT时间'''now = datetime.datetime.now() # 当前时间now += relativedelta( months =M) # 当前时间加上时间差timestamp = time.mktime(now.timetuple())timestamp *= 1000timestamp -= 57599875timestamp *= 10000timestamp += 116445312000000000timestamp = ' %d ' % timestampreturn timestampif __name__ == "__main__" :ts = current_time2nt_time_plus_mouths( 3 )print (ts)
最后的ts假设为:
`132585363281250000`
则为三个月后的此刻过期。
代码直接修改一个用户的过期时间字段为:
modify()方法中第一个参数为用户dn,第二个参数为待修改的内容:{'待修改字段': (2, [值])},2的意思是修改;con = con_ad()是AD服务器的连接,这里不写了。
# con = con_ad()# modify_res = con.modify("CN=xxx,OU=xxx,OU=xxx,OU=xxx,DC=xxx,DC=com", {# 'accountExpires': (2, [ts])})# print(modify_res)