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删除此设置会损害该服务器上的安全性。