一些 AD 使用者在 RHEL Linux 上缺少補充組
我的組織正在嘗試將我們的 RHEL/CentOS 7 伺服器加入我們的 Microsoft AD 域。域控制器由 2 個 Windows 2008R2 伺服器和 1 個 Windows 2016 伺服器組成。
在 Linux 方面,我
realm
用來加入域,我已經成功地做到了:# realm list mydomain.net type: kerberos realm-name: MYDOMAIN.NET domain-name: mydomain.net configured: kerberos-member server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools login-formats: %U@mydomain.net login-policy: allow-realm-logins
我想只允許某個組的成員訪問 SSH:
# realm permit -g mygroup@mydomain.net
那是我遇到問題的時候。在對兩個使用者 userA 和 userB 進行測試時,允許 userA 進入,但拒絕 userB。/var/log/sssd/sssd_mydomain.net.log文件顯示userB 沒有補充組:
(Tue Sep 19 20:53:37 2017) [sssd[be[mydomain.net]]] [simple_access_check_send] (0x0200): Simple access check for userB@mydomain.net (Tue Sep 19 20:53:37 2017) [sssd[be[mydomain.net]]] [simple_check_get_groups_send] (0x0400): User userB@mydomain.net is a member of 0 supplemental groups (Tue Sep 19 20:53:37 2017) [sssd[be[mydomain.net]]] [simple_check_get_groups_send] (0x0400): All groups had name attribute
或者更確切地說,確實如此,但 SSSD 看不到。以下命令確認:
# id userA@mydomain.net uid=1918001261(userA@mydomain.net) gid=1918000513(domain users@mydomain.net) groups=1918000513(domain users@mydomain.net),1918001757(devops_aws@mydomain.net),1918003900(sccm administrators@mydomain.net),1918004006(ts remote desktop users@mydomain.net),1918004329(macbook_users@mydomain.net) # id userB@mydomain.net uid=1918003883(userB@mydomain.net) gid=1918000513(domain users@mydomain.net) groups=1918000513(domain users@mydomain.net)
最終,我們發現 userA在其 AD/LDAP對像中
adminCount
設置了屬性。1
我不完全確定這個屬性有什麼含義,但這似乎是 SSSD 可以找到其所有補充組並因此找不到 userB 的原因。任何幫助將不勝感激!長期以來,我一直在努力解決這個問題。
/etc/sssd/sssd.conf
[sssd] domains = mydomain.net config_file_version = 2 services = nss, pam [domain/mydomain.net] ad_domain = mydomain.net krb5_realm = MYDOMAIN.NET realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = simple simple_allow_groups = mygroup@mydomain.net debug = 6
當我閱讀SSSD 故障排除指南時,我發現了這個問題。在指南中,它簡要提到:
如果您使用非標準 LDAP 搜尋庫,請通過設置禁用 TokenGroups 性能增強
ldap_use_tokengroups=False
。否則,AD 提供者將通過不受自定義搜尋庫限制的特殊呼叫接收組成員身份,這會導致不可預測的結果在部落格文章Restrict the group of the user is a member with SSSD中,更多地解釋了 TokenGroups:
第一步是讓客戶端使用普通 LDAP 查找而不是查找特定於 AD 的 tokenGroups 屬性來查找使用者所屬的組。通常,如果要返回所有組,則使用 tokenGroups 屬性可提供顯著的性能優勢,因為可以通過對使用者條目的單個 BASE 範圍搜尋返回所有組的成員列表。但是,tokenGroups 屬性是使用者所屬的 SID 的多值列表,並且如前所述,無論如何,所有 SID 都必須解析為組名。
似乎 TokenGroups 是一種優化技術,預設啟用,用於解析使用者組。然而,正如這些文章所暗示的那樣,它可能會出現問題,就像我的情況一樣。
只需將參數設置為
false
:[domain/mydomain.net] ldap_use_tokengroups = false
在我的sssd.conf文件中。