Linux 系统调用 getgroups 从哪里获取数据

Linux 系统调用 getgroups 从哪里获取数据

我正在调试一个问题,当我登录时出现错误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 模块在两台主机之间的配置也可能不同。

相关内容