我们有一个SELinux客户端,使用连接到Active Directory服务器的LDAP对网络用户进行身份验证。由于我们的机器必须运行“不受限制”,我们必须使用nscd来缓存组和密码信息。
这是问题所在。如果我们更改Active Directory服务器上的组信息,则登录客户端,如果该用户存在缓存,则LDAP似乎忽略服务器并仅使用缓存数据。我们能够获得更新的唯一方法是使passwd缓存无效。
/etc/nsswitch.conf的重要部分:
passwd: file ldap cache group: file ldap cache shadow: file ldap cache
感谢。
更新:计算出运行strace getent passwd
在读取/etc/nsswitch.conf之前检查nscd缓存,因此nss的配置无关紧要。
更新2:今天玩nss_updatedb以查看它是否有效。到目前为止,没有快乐,尽管this howto看起来正是我们需要做的。
答案 0 :(得分:1)
如果您不想从活动目录缓存结果,则需要关闭nscd或将其缓存生命周期设置为几分钟(编辑/etc/nscd.conf)。 我认为默认的生存时间是密码为10分钟,组为小时。
答案 1 :(得分:0)
我们最终通过使用nss_updatedb在本地缓存组和passwd数据库来解决这个问题。然后我们关闭了nscd。
我们将pam_exec模块添加到pam.d列表中,并在验证之前使用它运行nss_updatedb,以确保本地缓存是最新的。
答案 2 :(得分:0)
您可以使用以下命令轻松刷新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