【问题标题】:Find All AD groups recursively given SAM account in single query在单个查询中以递归方式查找所有给定 SAM 帐户的 AD 组
【发布时间】:2019-10-24 20:45:20
【问题描述】:

是否可以在给定用户的 SAM 帐户标识符的情况下递归检索所有 AD 组?

我一直在使用以下ldapsearch 过滤器

ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(member:1.2.840.113556.1.4.1941:=CN=John Doe,OU=Users,OU=World,DC=domain,DC=local)' dn

查询我们的本地 LDAP 服务器(基于 AD)以检索用户的 AD 组,但这是一个两步过程,因为我需要用户的完整 DN。

以前我使用非递归过滤器来获取用户的直接组:

ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' dn

是否有可能获得第一个查询的结果(递归所有 AD 组)和第二个查询的单步结果(因为我只需要知道用户名的用户的电子邮件地址

【问题讨论】:

    标签: active-directory ldap


    【解决方案1】:

    不,你不能不执行多个查询。

    如果您的服务器基于 AD,它可能会使用 memberOf 属性,在这种情况下,您可以在一个查询中获取用户组,但 没有嵌套组

    ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' memberOf
    

    如果我们可以在上面的查询中使用可扩展匹配作为属性请求,那就太好了,使用memberof:1.2.840.113556.1.4.1941: 而不是memberOf,但它不是一个维护属性,您可以在搜索组时获取值,它只能用于过滤器中的可扩展匹配(参见LDAP_MATCHING_RULE_IN_CHAIN),并且它特定于 AD(未在 OpenLDAP 中实现)。

    另一方面,您可以使用过滤器member:1.2.840.113556.1.4.1941: 搜索组,但问题恰恰在于它首先需要知道用户的 dn。

    人们可能会想到使用与memberUid 与用户登录或sAMAccountName 匹配的过滤器来查询组,但这取决于此属性是否保留在您的目录中,我很确定您可以t 与这个有可扩展的匹配,这意味着这个过滤器不能匹配嵌套的组成员。

    因此,最后您需要使用第二个查询来获取所有用户 dn,并为每个用户构建查询以获取该用户的组成员身份,包括嵌套组。

    【讨论】:

    • 虽然memberUid 属性存在于 Active Directory 中,但我从未见过它有值。我同意这是一个两步过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2012-10-08
    • 2022-10-04
    • 2017-10-27
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多