sssd 和 ldap 身份验证缓存

sssd 和 ldap 身份验证缓存

在运行 OpenSUSE 12.2 的机器上,我们安装了 OpenLDAP 和sssd守护进程。我们使用这两个服务进行用户身份验证。最近,我们创建了一个脚本,可以动态地为我们的虚拟主机创建新的 Web 用户,但现在我们遇到了一个问题。

sssd 似乎使用了某种缓存,在此期间getent passwd它返回了已从 LDAP 中删除的用户。有时它不会立即返回最近创建的用户,因为脚本中还需要进一步操作(使用 和 设置权限setfaclchown

重新启动 LDAPsssd或 都nscd无济于事,使用 刷新缓存也无济于事sss_cache -U。我们尝试降低 的配置中的缓存sssd,但似乎没有影响任何东西。

将新用户添加到 LDAP 后,我们需要以某种方式明确刷新缓存或完全禁用缓存。

有谁遇到过类似的问题吗?

答案1

从手册页(sssd.conf)中:

NSS configuration options
       These options can be used to configure the Name Service Switch (NSS)
       service.

       enum_cache_timeout (integer)
           How many seconds should nss_sss cache enumerations (requests for
           info about all users)
       Default: 120

我会插入类似这样的内容:

[nss]
enum_cache_timeout 10

(调整秒数以使其合适)

答案2

尝试sss_cache -E

或者尝试停止 sssd,删除 /var/lib/sss/db/* 中的文件,然后重新启动 sssd

答案3

您可以尝试通过向 /etc/sssd/sssd.conf 添加指令来禁用缓存凭据:

[domain/default]
cache_credentials = False

然后,您可以使用控制台命令验证 sssd 是否在凭据上使用缓存:

# authconfig --test|grep credential
credential caching in SSSD is disabled

答案4

  • 您无法使用 sssd 完全禁用缓存。

  • 如果您愿意,可以完全禁用 sss 作为身份验证提供程序,而只需直接查询 LDAP。

例如,在 中/etc/nsswitch.conf,更改如下行:

passwd:     files sss

passwd:     files ldap
  • 您可以通过删除以下方法强制清除缓存:/var/lib/sss/db/*

相关内容