如何进行LDAP查询,仅返回所有级别的OU = Groups的组?

sor*_*rin 2 ldap ldap-query

如果我正在寻找所有东西Groups,我会得到太多的垃圾。

如果我试图缩小基数,我会得到的太少。

这是一个例子:

CN=A Team,OU=Groups,OU=Americas,DC=example,DC=com
CN=B TEAM,OU=Groups,OU=EMEA,DC=example,DC=com
CN=C Team,OU=Legacy Groups,DC=example,DC=com
CN=D Team,OU=Groups,OU=Bangalore,OU=APAC,DC=example,DC=com
CN=E Team,OU=Common Groups,DC=example,DC=com
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个filter返回ABDE(不带C)的LDAP- 主要的逻辑是让我拥有所有最后一个OU=Groups或最后一个的组OU=Common Groups

我当前的搜索正在使用:

 Search base: CN=Users,DC=citrite,DC=net
 Filter: (objectCategory=Group)
Run Code Online (Sandbox Code Playgroud)

Ter*_*ner 5

首先,在Microsoft Active Directory上一次搜索是不可能做到这一点的,这是因为AD不完全兼容LDAP。

符合LDAP的服务器支持extensible-match提供必要过滤的过滤器。从RFC4511开始

如果dnAttributes字段设置为TRUE,则该匹配项将附加应用于条目可分辨名称中的所有AttributeValueAssertions,并且如果可分辨名称中至少有一个属性或子类型的过滤项对其求值为TRUE,则该匹配结果将为TRUE。 。dnAttributes字段用于缓解对通用匹配规则的多个版本(例如单词匹配)的需求,其中一个适用于条目,另一个适用于条目和DN属性。

请注意,可扩展匹配筛选器技术仅适用于LDAP兼容服务器,而AD则不是。

例如,我将以下条目添加到服务器:

dn: ou=legacy groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: legacy groups

dn: ou=common groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: common groups

dn: ou=groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: cn=a,ou=common groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: a

dn: cn=b,ou=groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: b

dn: cn=c,ou=legacy groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: c
Run Code Online (Sandbox Code Playgroud)

添加以上条目后,在以下搜索中检查过滤器:

ldapsearch --propertiesFilePath ds-setup/11389/ldap-connection.properties \
    --baseDN o=training \
    --searchScope sub '(|(ou:dn:=groups)(ou:dn:=common groups))' 1.1

dn: ou=common groups,o=training

dn: cn=a,ou=common groups,o=training

dn: ou=groups,o=training

dn: cn=b,ou=groups,o=training
Run Code Online (Sandbox Code Playgroud)

需要注意的是ou=common groupsou=groups和自己的下属被返回,但不能 ou=legacy groups和下属。

本示例使用ldapsearch命令行工具的现代语法。如果用户使用的是ldapsearch的旧OpenLDAP版本,则命令行工具的参数有些不同,但这无关紧要。重要的是过滤器。