我如何为 AD 构建 LDAP 查询以返回特定安全组中帐户未被禁用的所有用户?

我如何为 AD 构建 LDAP 查询以返回特定安全组中帐户未被禁用的所有用户?

我如何为 AD 构建 LDAP 查询以返回特定安全组中帐户未被禁用的所有用户?

我试过

(&(objectClass=person)(!(userAccountControl=账户禁用)))

但这似乎不起作用。

我正在尝试设置 Google Apps Directory Sync,并希望它同步“Google Apps 用户”安全组中所有帐户未被禁用的用户(或者,如果这些帐户在 AD 中被禁用,则可选择仅在 GA 中暂停这些帐户)。

答案1

有时,一组是/否值通过设置各个位存储在单个值中。您可以使用位掩码检查它们是否已设置。

例如,十进制中的 546 是二进制值 10 0010 0010 - 以十进制表示,是 512、32 和 2 的总和。(所有这些数字都是 2 的幂,这意味着它们在二进制表示中只有一个“1”):这意味着这三个是/否值已设置。

根据用户帐户控制文档这意味着设置了以下值:

NORMAL_ACCOUNT (512)
PASSWD_NOTREQD (32)
ACCOUNTDISABLE (2)

但是,例如,如果您有一个用户没有PASSWD_NOTREQD设置(因此他们的 userAccountControl 值为 512),或者有一个用户也DONT_EXPIRE_PASSWORD设置了 (65536)(意味着他们的值为 66082),那么您将无法在查询中找到这些用户。

你需要做的是使用按位与为了仅查询该位的值:

10 0010 0010
00 0000 0010
------------
00 0000 0010

如果该位的值为 1,则设置该位。其他位设置为何值并不重要,因此您实际上是在询问是否userAccountControl & 2 == 2

使用 AND 检查位的 LDAP 语法是 1.2.840.113556.1.4.803,因此您可以ACCOUNTDISABLE使用 (userAccountControl:1.2.840.113556.1.4.803:=2) 查看位是否已设置。在其周围添加 (!(foo)) 可让您获得所有不是已禁用。

答案2

看起来这可行,但它不会选取嵌套的组成员:

(&
    (memberOf=CN=GApsUsers,DN=....)
    (!(userAccountControl=546))
)

答案3

这有效!

(&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

答案4

接近,但是

(&(objectClass=person)(!(userAccountControl=ACCOUNTDISABLE)))

应该

(&(objectClass=person)(!userAccountControl=ACCOUNTDISABLE))

请注意,我无法从我所在的地方真正测试这一点!

相关内容