在运行 OpenSUSE 12.2 的机器上,我们安装了 OpenLDAP 和sssd
守护进程。我们使用这两个服务进行用户身份验证。最近,我们创建了一个脚本,可以动态地为我们的虚拟主机创建新的 Web 用户,但现在我们遇到了一个问题。
sssd 似乎使用了某种缓存,在此期间getent passwd
它返回了已从 LDAP 中删除的用户。有时它不会立即返回最近创建的用户,因为脚本中还需要进一步操作(使用 和 设置权限setfacl
)chown
。
重新启动 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/*