linux – ldapquery属于名为X的组的用户的Active Directory服务
当我在CentOS 6.4上的bash提示符下执行此操作时
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 *)) 无济于事. 您可以从上面的输出中看到,testuser属于这些组 > CN = Group1,OU = Area,OU = Users,DC = example,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个选择: >找到适用于任何组名的过滤器,无论路径如何(此问题) 解决方法
不幸的是不是LDAP对象的通用名称不是全局唯一的;它仅相对于其父OU是唯一的.因此,如果您可以询问用户是否是组的成员,则基于组的CN,您可能会获得多个结果.
出于这个原因,用户对象的memberOf属性是DN列表(可分辨名称或完整X.500路径). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |