為什麼所有群組都將所有使用者顯示為具有 Google 安全 LDAP 的成員?
啟用並配置 SSSD 以使用 Google 的 Secure 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
,所有帳戶都會在結果中返回。我怎樣才能解決這個問題?
這似乎是由於G-Suite 推薦的 sssd 配置中的這些行:
ldap_groups_use_matching_rule_in_chain = true ldap_initgroups_use_matching_rule_in_chain = true
刪除這些,組開始正確顯示成員(嗯,大多數情況下,具有偽實體“Everyone”作為成員的組只顯示明確列出的成員)。
具體來說,這是由於
ldap_groups_use_matching_rule_in_chain
. 來自man sssd-ldap
:ldap_groups_use_matching_rule_in_chain
此選項告訴 SSSD 利用特定於 Active Directory 的功能,該功能可以加快對具有復雜或深層嵌套組的部署的組查找操作。在最常見的情況下,最好禁用此選項。它通常只在非常複雜的嵌套上提供性能提升。
如果啟用此選項,SSSD 將在初始連接期間檢測到伺服器支持它時使用它。所以這裡的“真”本質上意味著“自動檢測”。
注意:目前已知此功能僅適用於 Active Directory 2008 R1 及更高版本。有關詳細資訊,請參閱 MSDN(TM) 文件2。
預設值:假
並檢查 MSDN 文件:
- 1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN 此規則僅限於適用於 DN 的過濾器。這是一個特殊的“擴展”匹配運算符,它將對像中的祖先鏈一直遍歷到根,直到找到匹配項。
並且
1.2.840.113556.1.4.1941
是 sssd 在查詢中使用的規則。我的 LDAP 查詢不夠好,無法判斷 SSSD 的查詢或 Google 的 LDAP 服務中的哪一個已損壞。目前還不清楚我應該如何在幫助中心報告這些技術缺陷,所以我沒有向Google報告。