加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 02:49:06 所属栏目:Linux 来源:网络整理
导读:当我在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 S
当我在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 *))
>(&(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过滤器中的路径更改)

解决方法

不幸的是不是LDAP对象的通用名称不是全局唯一的;它仅相对于其父OU是唯一的.因此,如果您可以询问用户是否是组的成员,则基于组的CN,您可能会获得多个结果.

出于这个原因,用户对象的memberOf属性是DN列表(可分辨名称或完整X.500路径).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读