检测是否在Python中使用LDAP锁定了Active Directory用户帐户

Dan*_*eis 17 python active-directory python-ldap

我正在使用python的ldap模块验证用户登录.登录失败时,我会收到ldap.INVALID_CREDENTIALS登录信息,但这可能是因为密码错误或帐户被锁定.在第3次尝试后帐户被锁定.

我想检测到该帐户已被锁定并向受挫的用户报告,而不是相同的"无效登录"消息.

寻找解决方案我发现:

  • AD不使用userAccountControl LOCKED标志;
  • 应该使用lockoutTime属性

我应该用来查找锁定用户的LDAP查询是:

(&(objectClass=user)(lockoutTime>=1))
Run Code Online (Sandbox Code Playgroud)

或者对于特定用户:

(&(objectClass=user)(sAMAccountName=jabberwocky)(lockoutTime>=1))
Run Code Online (Sandbox Code Playgroud)

但这不起作用,查询每次都不返回任何结果.

Har*_*wok 12

值为零lockoutTime意味着它没有被锁定.所以,你应该试试这个.

(&(objectClass=user)(!lockoutTime=0)) 
Run Code Online (Sandbox Code Playgroud)

实际上,上述查询仍然不是100%正确.如果您从MSDN读取了精细打印,Microsoft建议您将Lockout-Time属性添加到Lockout-Duration属性,然后将其与当前时间进行比较.那是因为存在一种称为锁定持续时间的事情.锁定持续时间过后,用户将自动解锁.Zero in Lockout-Duration表示帐户被永久锁定,直到管理员解锁.

请参阅此MSDN文章

仅当帐户成功登录时,才会重置此属性值.这意味着此值可能不为零,但帐户未锁定.要准确确定帐户是否已锁定,您必须将锁定持续时间添加到此时间,并将结果与​​当前时间进行比较,并考虑当地时区和夏令时.


Wer*_*eit 5

我还发现了这个属性标志列表:How to use the UserAccountControl flags

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
INTERDOMAIN_TRUST_ACCOUNT   0x0800  2048
WORKSTATION_TRUST_ACCOUNT   0x1000  4096
SERVER_TRUST_ACCOUNT    0x2000  8192
DONT_EXPIRE_PASSWORD    0x10000 65536
MNS_LOGON_ACCOUNT   0x20000 131072
SMARTCARD_REQUIRED  0x40000 262144
TRUSTED_FOR_DELEGATION  0x80000 524288
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
Run Code Online (Sandbox Code Playgroud)

userAccountControl您必须将属性与进行二元与0x002。为了获得所有锁定(即禁用)的帐户,您可以使用

(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))
Run Code Online (Sandbox Code Playgroud)

对于操作员,1.2.840.113556.1.4.803请参阅LDAP 匹配规则