sssd和ldap身份validationcaching

在运行OpenSUSE 12.2的机器上,我们安装了OpenLDAP和sssd守护进程。 我们正在使用这两个服务进行用户身份validation。 最近我们创build了一个脚本,dynamic地为我们的虚拟主机创build新的networking用户,但现在我们正在处理一个问题。

似乎sssd使用某种caching,在getent passwd它返回已经从LDAP中删除的用户。 有时它不会立即返回最近创build的用户,因为它需要在脚本中进一步(用setfaclchown设置权限)。

重新启动LDAP, sssdnscd没有帮助,既不用sss_cache -U刷新caching。 我们尝试降低caching在sssdconfiguration,但它似乎不影响任何东西。

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

有没有人遇到类似的问题?

从手册页(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 

(调整秒,因为它似乎适合)

  • 你不能用sssd完全禁用caching。

  • 您可以完全禁用sss作为身份validation提供程序,只需直接查询LDAP即可。

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

 passwd: files sss 

 passwd: files ldap 
  • 您可以通过删除/var/lib/sss/db/*来强制清除caching

我已经过类似的问题

我注意到了getent passwd | grep <username> getent passwd | grep <username>getent passwd <username>不会返回相同的结果,

使用strace我发现getent passwd <username>检查"/var/lib/sss/mc/passwd"

wheras getent passwd | grep <username> getent passwd | grep <username>将连接到/var/lib/sss/pipes/nss并从那里获取数据。

这真令我困惑,因为这两种方法似乎碰到不同的caching。 当我运行sudo su - <username>时,这些caching似乎得到更新,但似乎在几个小时内有效。

在实践中的结果是,例如,从LDAP中删除ssh访问将不会为用户几分钟工作,但getent passwd将继续显示它几个小时,所以我很难检查这个用户是否在事实被删除或没有(没有手动清除一些caching)

您可以尝试通过将指令添加到/etc/sssd/sssd.conf来禁用caching凭据:

 [domain/default] cache_credentials = False 

然后,您可以使用console命令validationsssd是否在凭据上使用caching:

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

试试sss_cache -E

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