![/etc/group 中缺少一个有效的 Linux 组,但可以在 getent 组中找到](https://linux22.com/image/1568598/%2Fetc%2Fgroup%20%E4%B8%AD%E7%BC%BA%E5%B0%91%E4%B8%80%E4%B8%AA%E6%9C%89%E6%95%88%E7%9A%84%20Linux%20%E7%BB%84%EF%BC%8C%E4%BD%86%E5%8F%AF%E4%BB%A5%E5%9C%A8%20getent%20%E7%BB%84%E4%B8%AD%E6%89%BE%E5%88%B0.png)
一个奇怪的问题。我试图将一个用户(比如 myuser)添加到一个组(linuxadmins),但出现以下错误。
sudo usermod -a -G linuxadmins myuser
usermod: group 'linuxadmins' does not exist
然后我尝试排除故障,但发现在组数据库文件中找不到组,但可以通过getent
搜索返回。您可以找到第一行(linuxadmins:x:1000:some_ids) 的返回值和 /etc/group 的转储片段。有人知道这个组来自哪里吗?
[my_sit@myhost /]$ getent group
linuxadmins:x:1000:some_ids
root:x:0:my_sit,other_sit
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
[my_sit@myhost /]$ cat /etc/group
root:x:0:my_sit,other_sit
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
答案1
/etc/group
并不是群体信息的唯一来源。
所有查找首先经过神经胶质细胞缓存守护进程。如果 nscd 缓存了随后被删除的组,它仍会显示出来。
然后使用配置的模块
/etc/nsswitch.conf
。“files”模块从 /etc/group 读取,但可能还有其他模块,例如“ldap”、“nis”、“sss”(AD/LDAP)等等。
您可能从网络源或缓存模块中获取此条目。逐个测试已配置的模块(来自 nsswitch.conf),直到找到该组:
getent -s files group linuxadmins
getent -s ... group linuxadmins