某些AD用户在RHEL Linux上缺less补充组

我的组织正在尝试将我们的RHEL / CentOS 7服务器join到我们的Microsoft AD域中。 域控制器由2个Windows 2008R2服务器和1个Windows 2016服务器组成。

在Linux方面,我使用realmjoin到我已经成功做到的领域:

 # 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: %[email protected] login-policy: allow-realm-logins 

我想只允许某个组的成员访问SSH:

 # realm permit -g [email protected] 

那是我遇到问题的时候 当在两个用户(userA和userB)上testing时,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 [email protected] (Tue Sep 19 20:53:37 2017) [sssd[be[mydomain.net]]] [simple_check_get_groups_send] (0x0400): User [email protected] 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 [email protected] uid=1918001261([email protected]) gid=1918000513(domain [email protected]) groups=1918000513(domain [email protected]),1918001757([email protected]),1918003900(sccm [email protected]),1918004006(ts remote desktop [email protected]),1918004329([email protected]) # id [email protected] uid=1918003883([email protected]) gid=1918000513(domain [email protected]) groups=1918000513(domain [email protected]) 

最终,我们发现userA在其AD / LDAP对象中的adminCount属性设置为1 。 我不完全确定这个属性具有什么含义,但似乎是SSSD可以find所有补充组的原因,因此它没有finduserB。

任何帮助将不胜感激! 我一直在这个问题上打了很久很久。


/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 = [email protected] debug = 6 

当我阅读SSSD故障排除指南时,我发现了这个问题。 在指南中简要提到:

如果使用非标准LDAPsearch库,请通过设置ldap_use_tokengroups=False禁用TokenGroups性能增强。 否则,AD提供商将通过一个特殊的调用来接收群组成员,这个调用不受自定义search基地的限制,从而导致不可预知的结果

并且在博客文章限制用户是SSSD的成员组的集合,更多关于TokenGroups的解释:

第一步是使客户端使用普通LDAP查找来查找用户所属的组,而不是查找特定于AD的tokenGroups属性。 通常情况下,如果要返回所有组,则使用tokenGroups属性会带来显着的性能优势,因为所有组的列表都是用户条目的一个BASE范围search返回的成员。 但是,tokenGroups属性是用户所属的SID的多值列表,如前所述,所有SID都必须分解为组名称。

看来TokenGroups是一种优化技术,在parsing用户的组时,默认情况下是启用的。 但是,正如这些文章所暗示的那样,这可能会certificate是有问题的,就像我的情况一样。

通过简单地将参数设置为false

 [domain/mydomain.net] ldap_use_tokengroups = false 

在我的sssd.conf文件中。