我们的用户和组 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 获取组成员身份,并使用setgid
和setgroups
系统调用为用户的初始进程赋予正确的权限。从那里继承的所有进程都继承相同的权限(执行 set-id 程序时除外)。
如果配置的权限发生变化,在用户登录时,现有进程不会受到影响。您必须注销并再次登录才能获得权限,如果您试图撤销权限,您必须终止所有用户进程才能完成工作。
nscd
这可能会增加额外的缓存层,但预先存在的用户进程实际上是特权缓存,存在于全部配置。