【问题标题】:LDAP won't update if cached data exists如果缓存数据存在,LDAP 不会更新
【发布时间】:2010-10-01 00:29:45
【问题描述】:

我们有一个 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 看看它是否会工作。到目前为止还没有任何乐趣,尽管this howto 看起来正是我们需要做的。

【问题讨论】:

  • 我没有在其中看到与编程相关的问题。
  • EBGreen,对于所有其他标记为 SELinux 的问题都可以这么说,并且可能还有许多标记为 nss、ldap 和 activedirectory 的问题。配置是解决方案的一部分。
  • 很公平。我仍然认为配置(尤其是 AD 和 LDAP 等企业级配置)与 IT 无关。因为这不是我一个人做的决定,所以我的意见分歧不会造成伤害。

标签: active-directory ldap nss selinux


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。我们需要在本地缓存 ldap 查找,但仅在未连接到 ldap(Active Directory)服务器时才使用它们。如果用户断开连接并前往现场,他们需要能够登录长达一周或更长时间。
  • 如果您遇到问题 nss_updatedb ,请尝试使用每晚批处理填充您的 /etc/passwd & 组。然后更改 nsswitch.conf 以在 LDAP 之后引用它们。您需要一个可以快速故障转移的 Nss 模块/或让进程根据 ldap 和文件的顺序交换它们是在局域网上还是不在。
【解决方案2】:

您可以使用以下命令轻松刷新 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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2019-08-20
      • 1970-01-01
      • 2021-12-10
      • 2020-09-15
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2016-11-19
      相关资源
      最近更新 更多