使用红帽企业 Linux 7.9
Shell = sh
当我执行...
getent group <group-name>
-- 命令 1时
例如。
>>> getent group grp1
grp1:VAS:67458 usr3,usr2,usr1
>>> groups usr4
usr4: unixuser grp1
>>> getent group grp1
grp1:VAS:67458 usr4,usr3,usr2,usr1
结果不是最新的,响应中缺少某些用户。
当我执行...
groups <user-name>
-- 命令 2时
它返回用户所属的正确组,并且命令 1 现在将该用户包含在getent
之前丢失的命令的组中
请帮助我了解发生了什么以及是否有更好的方法来列出给定 UNIX 组的成员。
/etc/nsswitch.conf
答案1
从 Linux 的角度来看,您使用的命令没有问题。但这里发生的情况是 linux 不知道usr4
或他们的组,直到提示使用 查找它groups usr4
。
您的系统配置为使用 nisplus nsswitch.conf
,这意味着另一台计算机上有一个存储用户和组的数据库。此类桥实际上从不涉及将整个数据库复制到本地 UNIX 计算机上,特别是因为某些目录服务器可以容纳数千个用户。
那么会发生什么,groups usr4
触发 nisplus 去搜索用户usr4
并评估他们的组。这更新了信息的本地缓存,更新了后续的信息getent group grp1
。
但是,getent group grp1
不会触发 nisplus 发现目录服务器上该组中的每个可能的用户。该操作可能成本极高,并会吸引数千名用户。
不幸的是,您唯一的选择是询问远程服务器(AD 服务器)或要求系统管理员寻找您。
如果您在远程目录服务器上具有 LDAP 访问权限,那么您可以构建 ldap 查询并使用 openldap 或类似工具来运行查询。