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 *))
>(&(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路径).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format='{{.LogPath}}' <container_name> 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户