1

我们有一个 SELinux 客户端,它使用连接到 Active Directory 服务器的 LDAP 对网络用户进行身份验证。由于我们的机器必须“不受限制”地运行,我们必须使用 nscd 来缓存组和密码信息。

这就是问题所在。如果我们在 Active Directory 服务器上更改组信息,然后登录客户端,如果该用户存在缓存,LDAP 似乎会忽略服务器并仅使用缓存的数据。我们能够获得更新的唯一方法是使 passwd 缓存无效。

/etc/nsswitch.conf 的重要部分:

    passwd:文件 ldap 缓存
    组:文件 ldap 缓存
    shadow:文件 ldap 缓存

谢谢。

更新:发现strace getent passwd在读取 /etc/nsswitch.conf 之前会检查 nscd 缓存,因此 nss 的配置无关紧要。

更新 2:今天玩 nss_updatedb 看看它是否有效。到目前为止还没有任何乐趣,尽管这个方法看起来正是我们需要做的。

4

3 回答 3

1

如果您不想缓存来自活动目录的结果,那么您需要关闭 nscd 或将其缓存寿命设置为几分钟(编辑 /etc/nscd.conf)。我相信 passwd 的默认生存时间是 10 分钟,组的默认生存时间是 10 分钟。

于 2009-01-12T23:58:24.363 回答
1

您可以使用以下命令轻松刷新 nscd 缓存:

sudo nscd -i passwd
sudo nscd -i group

使用给定命令刷新 nscd 缓存后,您会看到更改的 LDAP 数据。

有关详细信息,请参阅:http ://sysadmin-notepad.blogspot.rs/2013/05/how-to-flush-nscd-cache-in-linux.html

于 2015-12-10T12:34:47.067 回答
0

我们最终通过使用 nss_updatedb 在本地缓存 group 和 passwd 数据库来解决这个问题。然后我们关闭了 nscd。

我们将 pam_exec 模块添加到 pam.d 列表中,并使用它在身份验证之前运行 nss_updatedb 以确保本地缓存是最新的。

于 2009-02-04T21:31:45.557 回答