![Linux 系统调用 getgroups 从哪里获取数据](https://linux22.com/image/1386299/Linux%20%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%20getgroups%20%E4%BB%8E%E5%93%AA%E9%87%8C%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE.png)
我正在调试一个问题,当我登录时出现错误cannot find name for group ID 387
。我试图弄清楚这个组应该是什么,以及为什么我的用户与它相关联。
使用strace
我发现getgroups
当我启动 bash 时它会被调用并且返回
getgroups(6, [20, 106, 387, 513, 2385, 2447]) = 6
当我查看时,/etc/group
我没有找到 387 组。但我的问题是为什么getgroups
首先会返回该数字。
我使用的是 Ubuntu 12.04,但我使用 LDAP 登录。当我使用同一帐户登录到另一台计算机时,我得到了不同的数字列表 ( getgroups(7, [106, 513, 515, 516, 519, 520, 2503]) = 7
)。
所以我想知道查询的信息来源getgroups
是什么。我猜我的问题是本地组和 LDAP 组之间不匹配,但我不确定这一切是如何运作的。
答案1
配置文件中定义了不同的信息源及其优先级。此配置文件列出了在使用或等/etc/nssswitch.conf
功能时应使用哪些 NSS 模块。getgroups()
getpwent()
您的帖子建议您的系统使用 LDAP 目录作为用户和组的来源,因此您看到的组可能来自模块libnss_ldap
。根据的配置/etc/nsswitch.conf
,本地定义的组可能会覆盖 LDAP NSS 模块返回的内容。LDAP NSS 模块在两台主机之间的配置也可能不同。