ldapquery属于名为X的组的用户的Active Directory服务器

当我在CentOS 6.4的bash提示符下执行此操作时

ldapsearch -LLL -H ldap://adserver.example.com -x -D [email protected] -w somepass -b 'OU=Users,DC=example,DC=com' '(&(objectClass=person)(sAMAccountName=testuser))' 

我明白了

 dn: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com ... objectClass: person ... cn: TestUser Surname sn: Surname ... distinguishedName: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com ... memberOf: CN=Group1,OU=Area,OU=Users,DC=example,DC=com memberOf: CN=Gropu2,OU=Users,DC=example,DC=com ... sAMAccountName: testuser 

只有在testuser属于名为X的组时,我才想得到响应,而不pipe组X在AD层次结构中的位置。 例如:我想要一个叫做testuser的用户的数据,它是一个名为Group1的组的成员。

我曾尝试更改filter:

  1. (&(objectClass的=人)(sAMAccountName赋= TESTUSER)(的memberOf = CN =组别1 *))
  2. (&(objectClass的=人)(sAMAccountName赋= TESTUSER)(的memberOf = *组别1 *))

无济于事。

您可以从上面的输出中看到,testuser属于组

  1. CN =组别1,OU =面积,OU =用户,DC =例如,DC = com的
  2. CN = Gropu2,OU =用户,DC =例如,DC = COM。

当我使用filter'(&(objectClass = person)(sAMAccountName = testuser)(memberOf = CN = Group1,OU = Area,OU = Users,DC = example,DC = com))'它工作,但我需要仅使用组名查询(不使用完整的“path”)。

有没有办法做到这一点?

我正在尝试这样做,因为我需要使用Active Directory定义的组作为squid(linux代理)ACL。 要做到这一点,我需要定义一个外部ACLtypes,如

 external_acl_type ADGroup %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "OU=Users,DC=example,DC=com" -D [email protected] -w somepass -f "(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=example,DC=com))" -h adserver.example.com 

然后使用该types来定义这样的ACL

 acl ADGroup_Group1 external ADGroup Group1 acl ADGroup_Group2 external ADGroup Group2 ... http_access allow ADGroup_Group1; http_access deny ADGroup_Group2; 

当squid检查这个“允许”时,它会用%u用用户login名和%greplaceACL(Group1,Group2)中定义的组名,然后进行LDAP查询。

正如你可以从上面看到“http_access allow ADGroup_Group1;” 将按预期工作,但“http_access拒绝ADGroup_Group2;” 将不起作用,因为Group1和Group2的父OU是不同的。

所以我有3个select:

  1. find一个适用于任何组名称的filter,而不pipepath如何(这个问题)
  2. 所有 AD组移到相同的OU(呃…将一个对象移动到不同的OU将带来更多的工作,因为那时我必须重新调整GPO – 或者至less检查已经定义的GPO,移动可以带来)
  3. 为组的每个OU定义(有力地)一个external_acl_type。 (在这种情况下,我将只有N个外部进程来检查LDAPfilter中的path更改)

不幸的是, LDAP对象的通用名称不是全局唯一的; 它只是相对于其父OU而言是唯一的。 所以,如果你可以问一个用户是否是一个组的成员,根据一个组的CN,你可能会得到多个结果。

正是由于这个原因,用户对象的memberOf属性是一个DN列表(可分辨名称或全X.500path)。