如果使用 LDAP,Linux 是否会保留组成员的缓存?(组与 getent 组之间的区别)

如果使用 LDAP,Linux 是否会保留组成员的缓存?(组与 getent 组之间的区别)

我们的用户和组 LDAP 配置正在运行。

我们的服务器使用 LDAP 来存储用户和组。

# /etc/nsswitch.conf :
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

但是今天我们在 LDAP 中添加了一个新组,其中有 3 个用户,然后添加了其他用户。这 3 个用户在该组中,但其他用户不在组中。

我们可以通过使用“groups”来看到这一点:更准确地说,“getent group GROUPNAME”显示组中的用户,而“groups”不显示该用户的组......?!

因此我试图理解:

  • 是否存在某种用于群组 - LDAP 列表的缓存?
  • 或者同步是否可能失败,如果是,如何手动重新启动它?

抱歉,我的问题不够精确,但我真的不知道从哪里开始......

PS 配置文件

# /etc/ldap/ldap.conf
URI     ldap://172.16.1.232
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt


# /etc/pam_ldap.conf
base dc=ourdomain,dc=ch
uri ldap://172.16.1.232/
ldap_version 3
rootbinddn cn=admin,dc=ourdomain,dc=ch
pam_password crypt

答案1

pam_ldap并且nsswitch没有缓存机制,但是您的系统上nscd可能sssd存在实现缓存的机制。

nscd要使组缓存无效或刷新,请使用:

sudo nscd --invalidate=group

sssd要使组缓存无效或刷新,请使用:

sudo sss_cache -G

答案2

jopasserat 的评论引出了另一个可能的答案。

groups命令不报告用户的组成员身份。它报告当前进程的组 ID 权限。它仅使用 NSS 将数字组 ID 转换为名称。

当用户登录时,将从 NSS 获取组成员身份,并使用setgidsetgroups系统调用为用户的初始进程赋予正确的权限。从那里继承的所有进程都继承相同的权限(执行 set-id 程序时除外)。

如果配置的权限发生变化,在用户登录时,现有进程不会受到影响。您必须注销并再次登录才能获得权限,如果您试图撤销权限,您必须终止所有用户进程才能完成工作。

nscd这可能会增加额外的缓存层,但预先存在的用户进程实际上是特权缓存,存在于全部配置。

相关内容