使用 winbind 的 Linux 嵌套组

使用 winbind 的 Linux 嵌套组

我们有几个使用 winbind 连接到 Active Directory 的 RHEL6 服务器。所有服务器都使用配置管理工具进行了相同的配置。但是,在使用 groups 命令和/或 sudo 查询组时,服务器会产生不同的结果。但是,Getent 和 winbind 在所有服务器上都返回了正确一致的结果。

user.name1 和 user.name2 是组 test.group1 的成员。 test.group1 是组 test.group2 的成员

在所有服务器上运行以下命令都是一致的:

# getent group test.group1 
test.group1:*:16126:user.name1,user.name2

# getent group test.group2
test.group2:*:16125:user.name1,user.name2

# wbinfo --group-info test.group1 
test.group1:*:16126:user.name1,user.name2

# wbinfo --group-info test.group2
test.group2:*:16125:user.name1,user.name2

然而服务器 A 错误地返回:

# groups user.name2
test.group1

服务器B正确返回:

# groups user.name2
test.group1
test.group2

Samba 配置如下:

   winbind use default domain = true
   winbind offline logon = false
   winbind separator = + 
   winbind enum users = Yes
   winbind enum groups = Yes
   winbind nested groups = Yes
   winbind expand groups = 10
   server string = Linux Server
   strict locking = no
   wins server = 192.168.0.1
   idmap config * : range = 10000-50000000
   idmap config * : backend = rid
   idmap config SENT : range = 10000-50000000
   idmap config SENT : default = yes 
   idmap config SENT : backend = rid
   idmap uid = 10000-50000000
   idmap gid = 10000-50000000

nsswitch.conf 如下所示:

passwd:     files winbind
shadow:     files winbind
group:      files winbind

我大胆猜测答案可能在 PAM 的某个地方,或者可能是 winbind 查找错误,对于查找位置,您有什么想法或建议吗?Winbind/服务器已重新启动,tdb 文件已重建。问题也可能是间歇性的。


编辑:

终于再次审视这个问题了。我使用 SSSD 而不是 winbind 重建了身份验证,但还是出现了同样的情况

sssd.conf

[sssd] 
config_file_version = 2 
domains = sent.local 
services = nss, pam 
debug_level = 1

[nss] 

[pam] 

[domain/sent.local]
id_provider = ad 
auth_provider = ad 
access_provider = ad

default_shell = /bin/bash 
fallback_homedir = /home/domain/%u

use_fully_qualified_names = False

现在我们得到了一些有趣的结果,从未担任过域管理员的用户的结果与以前相同,直到我们预先缓存我们知道他们是其成员的组,例如:

[root@test-smg1 - (11:46:40) sssd]#  id test.user5
uid=1084806380(test.user5) gid=1084800513(domain users) 
groups=1084800513(domain users)

[root@test-smg1 - (11:46:43) sssd]#  getent group testg2
testg2:*:1084806126:test.user5,test.user4,test.user3,test.user2

[root@test-smg1 - (11:46:46) sssd]#  id test.user5
uid=1084806380(test.user5) gid=1084800513(domain users) 
groups=1084800513(domain users),1084806126(testg2)

[root@test-smg1 - (11:46:49) sssd]#  getent group testg2-nest
testg2-nest:*:1084806125:test.user4,test.user3,test.user2,test.user5

[root@test-smg1 - (11:46:54) sssd]#  id test.user5
uid=1084806380(test.user5) gid=1084800513(domain users) 
groups=1084800513(domain users),1084806126(testg2),1084806125(testg2-nest)

这让我认为问题可能更多地出在 Active Directory 和 AD 的特定实现上,而不是 Linux 方面的问题。将用户设为域管理员的成员会导致其所有组都正确显示。将用户从域管理员中删除会使用户处于此“固定”状态。

答案1

看起来这是我们 AD 设置中的一个非常具体的问题,对于当前有效的用户,会检查经过身份验证的用户的“读取组成员身份”,而对于无效的用户,则不会检查。添加此权限可解决此问题(尽管 winbind 需要大量时间才能发现更改)。

安全面板

相关内容