Active directory LDAP赢得';如果缓存数据存在,则不会更新

Active directory LDAP赢得';如果缓存数据存在,则不会更新,active-directory,ldap,nss,selinux,Active Directory,Ldap,Nss,Selinux,我们有一个SELinux客户端,它使用连接到Active Directory服务器的LDAP对网络用户进行身份验证。因为我们的机器必须“不受限制地”运行,所以我们必须使用nscd来缓存组和密码信息 问题就在这里。如果我们更改Active Directory服务器上的组信息,然后登录到客户端,如果该用户存在缓存,LDAP似乎会忽略该服务器,而只使用缓存的数据。我们获得更新的唯一方法是使passwd缓存无效 /etc/nsswitch.conf的重要部分: passwd: file ldap cac

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

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

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

passwd: file ldap cache group: file ldap cache shadow: file ldap cache passwd:文件ldap缓存 组:文件ldap缓存 影子:文件ldap缓存 谢谢

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


更新2:今天玩nss_updatedb,看看它是否能工作。到目前为止还没有什么乐趣,尽管看起来正是我们需要做的。

如果您不想缓存来自active directory的结果,则需要关闭nscd或将其缓存生存时间设置为几分钟(编辑/etc/nscd.conf)。
我相信passwd的默认生存时间是10分钟,而group的默认生存时间是1小时。

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


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

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

sudo nscd -i passwd
sudo nscd -i group
使用给定命令刷新nscd缓存后,您将看到更改的LDAP数据


有关更多详细信息,请参阅:

我在那里看不到与编程相关的问题。EBGreen,这可以说是标记为SELinux的所有其他问题,可能还有许多标记为nss、ldap和activedirectory的问题。配置是解决方案的一部分,这很公平。我仍然认为配置(尤其是企业级配置,如AD和LDAP)与编程无关。既然这不是我自己的决定,我的不同意见也不会带来任何伤害。谢谢你的回复。我们需要在本地缓存ldap查找,但仅在未连接到ldap(Active Directory)服务器时使用它们。如果用户断开连接并前往现场,他们需要能够登录长达一周或更长时间。如果您在nss_updatedb中遇到问题,请尝试使用夜间批处理填充/etc/passwd&组。然后更改nsswitch.conf以在LDAP之后引用它们。您需要一个Nss模块,该模块可以快速故障转移/或根据ldap和文件在局域网上还是在异地进行进程交换。