ldapsearch -LLL -H ldap://adserver.example.com -x -D someuser@example.com -w somepass -b 'OU=Users,DC=example,DC=com' '(&(objectClass=person)(sAMAccountName=testuser))'
我明白了
dn: CN=TestUser Surname,OU=Area,OU=Users,DC=com ... objectClass: person ... cn: TestUser Surname sn: Surname ... distinguishedName: CN=TestUser Surname,DC=com ... memberOf: CN=Group1,DC=com memberOf: CN=Gropu2,DC=com ... sAMAccountName: testuser
我想仅在testuser属于名为X的组时才获得响应,而不管组X在AD层次结构中的位置.例如:我想要一个名为testuser的用户的数据,该用户是名为Group1的组的成员.
我尝试将过滤器更改为:
>(&(objectClass = person)(sAMAccountName = testuser)(memberOf = CN = Group1 *))
>(&(objectClass = person)(sAMAccountName = testuser)(memberOf = * Group1 *))
无济于事.
您可以从上面的输出中看到,testuser属于这些组
> CN = Group1,OU = Area,OU = Users,DC = example,DC = com
> CN = Gropu2,OU =用户,DC =示例,DC = com.
当我使用过滤器'(&(objectClass = person)(sAMAccountName = testuser)(memberOf = CN = Group1,DC = com))’它有效,但我需要仅包含组名的查询(不使用完整的“路径”).
有什么办法吗?
我正在尝试这样做,因为我需要使用Active Directory定义的组作为squid(Linux代理)ACL.为此,我需要定义一个外部ACL类型,如
external_acl_type ADGroup %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "OU=Users,DC=com" -D someuser@example.com -w somepass -f "(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,DC=com))" -h adserver.example.com
然后使用该类型定义ACL,例如this
acl ADGroup_Group1 external ADGroup Group1 acl ADGroup_Group2 external ADGroup Group2 ... http_access allow ADGroup_Group1; http_access deny ADGroup_Group2;
当squid检查此“允许”时,它将使用用户登录名替换%u,并使用ACL(Group1,Group2)中定义的组名替换%g,然后在上面进行LDAP查询.
从上面可以看到“http_access允许ADGroup_Group1;”将按预期工作,但“http_access拒绝ADGroup_Group2;”因为Group1和Group2的父OU不同,所以不起作用.
所以我有3个选择:
>找到适用于任何组名的过滤器,无论路径如何(此问题)
>将(可能)所有AD组移动到同一个OU(呃…将对象移动到不同的OU将为我带来更多工作,因为我必须重新调整GPO – 或者至少检查已定义的GPO以进行任何更改王动可带来)
>为每个具有组的OU定义(可能)一个external_acl_type. (在这种情况下,我将只有N个外部进程来检查LDAP过滤器中的路径更改)