![为什么所有群组都显示所有用户为 Google Secure LDAP 的成员?](https://linux22.com/image/740840/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%89%80%E6%9C%89%E7%BE%A4%E7%BB%84%E9%83%BD%E6%98%BE%E7%A4%BA%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%E4%B8%BA%20Google%20Secure%20LDAP%20%E7%9A%84%E6%88%90%E5%91%98%EF%BC%9F.png)
启用和配置 SSSD 以使用 Google 的安全 LDAP 服务,当通过 查询时getent group
,所有 G-Suite 组都会显示所有 G-Suite 用户作为成员:
$ getent group admin
admin:*:202851646:muru,user1,user2,....
$ getent group jira-users
admin:*:202851646:user5,user3,....
所有用户都在场,但顺序不同。
具体来说,Google LDAP 日志显示 SSSD 使用以下查询(网站已删除):
(&(memberOf:1.2.840.113556.1.4.1941:=cn=all,ou=Groups,dc=<site>,dc=com)(objectClass=posixAccount))
事实上,如果我使用相同的查询ldapsearch
,则所有帐户都会在结果中返回。
我怎样才能解决这个问题?
答案1
似乎是由于这些行G-Suite 针对 sssd 的推荐配置:
ldap_groups_use_matching_rule_in_chain = true
ldap_initgroups_use_matching_rule_in_chain = true
删除这些后,组就会开始正确显示成员(嗯,大多数情况下,具有伪实体“每个人”作为成员的组仅显示明确列出的成员)。
具体来说,这是由于 ldap_groups_use_matching_rule_in_chain
。从man sssd-ldap
:
ldap_groups_use_matching_rule_in_chain
此选项告知 SSSD 利用 Active Directory 特定的功能,该功能可能会加快具有复杂或深层嵌套组的部署中的组查找操作。在大多数情况下,最好将此选项禁用。它通常只会在非常复杂的嵌套上提供性能提升。
如果启用此选项,SSSD 将在初始连接时检测到服务器支持此功能,并使用该功能。因此,此处的“True”本质上意味着“自动检测”。
注意:目前已知此功能仅适用于 Active Directory 2008 R1 及更高版本。请参阅 MSDN(TM) 文档2更多细节。
默认值:False
并检查 MSDN 文档:
- 1.2.840.113556.1.4.1941LDAP_MATCHING_RULE_IN_CHAIN 此规则仅限于适用于 DN 的过滤器。这是一个特殊的“扩展”匹配运算符,它会沿着对象中的祖先链一直走到根,直到找到匹配项。
是1.2.840.113556.1.4.1941
sssd 在查询中使用的规则。
我对 LDAP 查询不太熟悉,无法判断 SSSD 查询或 Google 的 LDAP 服务中哪个出现了问题。我不清楚如何在帮助中心报告此类技术缺陷,所以我没有向 Google 报告。