我们有几个使用 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/servers 已重新启动,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)
这让我认为这个问题可能更多地是在活动目录和这个 AD 特定实现的方向上,而不是 linux 方面的问题。使用户成为域管理员的成员会导致其所有组正确显示。从域管理员中删除用户会使用户处于此“固定”状态。
看起来这是我们的 AD 设置中的一个非常具体的问题,“读取组成员身份”会针对当前工作的用户检查经过身份验证的用户,而对于那些不工作的用户则取消检查。添加此权限可解决问题(尽管 winbind 需要花费大量时间来处理更改)。
我在winbind上遇到了同样的麻烦。
这是我的案例的一些分析细节:
- 几个用户受到此问题的影响(总共 800 个用户)。
- 只有少数组丢失(wbinfo -r ; id)(一些仍然被分配)到有问题的帐户 - 可能不是由 AD 中的有问题的用户权限引起
- 组中的用户列表是完整的(getent 组;不幸的是我没有找到了通过 wbinfo 列出组用户的方法)
- 我所有的服务器都使用相同版本的 samba,并且问题出现在所有具有相同用户的服务器上。
我将尝试设置 SSSD 以确认,此问题与 AD 有关,而不是与 SAMBA 有关。