我们有几个使用 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 需要大量时间才能发现更改)。