Active-Directory

一些 AD 使用者在 RHEL Linux 上缺少補充組

  • September 21, 2017

我的組織正在嘗試將我們的 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文件中。

引用自:https://serverfault.com/questions/874523