设想

设想

我继承了几台 RHEL5 服务器,这些服务器设置为通过 winbind 根据 AD 帐户对用户进行身份验证。在我更新 AD 中的组成员身份之前,一切正常。对于某些用户,更改永远不会出现在“groups”命令的输出中,尽管它们反映在“getent group <groupname>”的输出中。

例如,考虑以下情况:

[root@hcc1pl1 ~]# groups plubans
plubans:域用户系统基础设施开发
[root@hcc1pl1 ~]# getent group q1esb
q1esb:*:23136:q1qai,q1prodi

如果我将自己添加到 winbind 正在使用的 DC 上的 q1esb,您可以看到成员资格已更新:

[root@hcc1pl1 ~]# lsof -i | grep winbind
winbindd 31339 root 17u IPv4 63817934 TCP hcc1pl1:56541->hcnas01:microsoft-ds (已建立)
winbindd 31339 root 21u IPv4 63817970 TCP hcc1pl1:53622->hcnas01:ldap (已建立)
[root@hcc1pl1 ~]# ldapsearch -u -x -LLL -h hcnas01 -D "[电子邮件保护]“-W -b”CN=Peter Lubans,OU=Standard User Accounts,OU=Users,OU=XXX,DC=XXX,DC=XXX“ “(sAMAccountName=*)”memberOf
输入 LDAP 密码:
...
memberOf:CN=q1esb,OU=Security Groups,OU=Groups,OU=XXX,DC=XXX,DC=XXX
...

请注意,winbind 运行时没有缓存(-n 标志):

[root@hcc1pl1 ~]# ps -ef | grep winbind
root 31339 1 0 13:50 ? 00:00:00 winbindd -n
root 31340 31339 0 13:50 ? 00:00:00 winbindd -n root
31351 31339 0 13:50 ? 00:00:00 winbindd -n
root 31352 31339 0 13:50 ? 00:00:00 winbindd -n
root 31353 31339 0 13:50 ? 00:00:00 winbindd -n

现在 getent 显示该组具有正确的成员:

[root@hcc1pl1 ~]# getent group q1esb
q1esb:*:23136:q1qai,plubans,q1prodi

但更新后的会员资格并未反映在我的帐户详细信息中:

[root@hcc1pl1 ~]# 群组 plubans
plubans : 域用户系统基础设施开发
[root@hcc1pl1 ~]#

这个问题真正令人烦恼的部分是,它对这台机器上的其他帐户以及我从头开始配置的机器上的帐户都运行良好。

有任何想法吗?

答案1

看来这是由于登录时将组信息缓存在 /var/cache/samba/netsamlogon_cache.tdb 中造成的。我猜想,尽管“-n”指示 winbind 不要缓存其针对 LDAP 的查询,但该 TDB 文件中的成员资格信息的存在足以使事情变得混乱。

答案2

我设法找到了 Marcin 丢失的文章(https://marcinm.co.uk/group-membership-not-updating-in-winbind/) 通过电子邮件询问他。我确信这至少会对一些人有所帮助,所以这里是他的整个博客文章:


设想

运行 smbd 的文件服务器security=ads(即充当域成员),用户连接到 Samba 共享并在第一次连接时正确捕获组成员身份 - 此后它永远不会更新。

根本原因

Samba 在由 AD 域控制器计算时更新组成员身份,并且仅当用户登录到运行 smbd 和 winbind 的服务器时才计算。这wbinfo -a仅由或使用 Kerberos 的 SMB 登录触发。由于这是一个严重的限制,意味着在用户从未登录的机器上根本不知道组成员身份,因此开发了后备组成员身份代码,该代码可在用户未登录的情况下从 AD 中提取用户的组成员身份,但由于 winbind 使用的机器帐户无权要求用户组成员身份,因此它被认为是不稳定的,其结果也不可靠。因此,winbind 从不依赖它 - 当根本不知道组成员身份时它会调用它,但绝不会用它来刷新缓存的组成员身份。因此 - 在某些情况下,winbind 会捕获一次用户组成员身份,之后再也不会更新它们。

无法禁用组成员缓存,即无法通过添加一行来禁用此类行为smb.conf。请注意,这不是 Samba 问题,而是 AD 设计问题,此类行为与 Windows 的行为方式一致,实际上是在用户登录期间进行身份验证时更新 AD 组成员身份。

如何强制用户刷新组成员身份

组成员身份缓存在名为的文件中netsamlogon_cache.tdb,该文件可通过 tdbtool(所有版本的 Samba)或net cache samlogon(Samba 4.7 或更新版本)进行调查。从该文件中删除缓存的条目会触发一次组成员身份更新,方法是调用后备更新代码并将其结果放回原处netsamlogon_cache.tdb- 之后它们将再次被永久缓存。

tdbtool 方式:

$ wbinfo -n user.name
S-1-5-21-3023451936-689652692-1079546996-40725 SID_USER (1)

附加\0到 SID 并将其放在引号中:

$ tdbtool netsamlogon_cache.tdb delete "S-1-5-21-3023451936-689652692-1079546996-40725\0"

操作系统第一次需要时,组成员身份将会更新,请等待几分钟,以便 tdb 文件填充,

net cache samlogon方式:

$ net cache samlogon list|head
SID                                                Name                                     When cached
---------------------------------------------------------------------------------------------------------------------------
S-1-5-21-3023451936-689652692-1079546996-40725     DOM\user.name                            Tue Apr 27 07:59:19 AM 2018 BST
S-1-5-21-3023451936-689652692-1079546996-41432     DOM\user.name2                           Tue Apr 27 02:13:33 PM 2018 BST

$ net cache samlogon delete S-1-5-21-3023451936-689652692-1079546996-40725

与之前相同 - 操作系统第一次需要时将更新组成员身份,等待几分钟即可填充 tdb 文件。


答案3

我唯一的想法,而且非常模糊,就是它可能与与基础设施主机(负责跨域更新组成员身份)的通信有关。

答案4

我遇到过类似的事情。为了解决这个问题,我运行了“authconfig --disablecache --update”。当然,这会使登录速度变慢。

相关内容