使用 getgrnam() 只查询本地组

Use getgrnam() to only query local groups

我正在尝试将独立产品集成到 LDAP 环境中。

我有一个 RHEL 6.7 系统,配置为 ldap 身份验证(通过 sss),我需要以编程方式将本地用户和组添加到该系统。

输入 xml 文件有一个用户和组的列表,包括他们的组成员身份、登录名 shell、应该使用的用户 ID 和组 ID。

现在问题来了,我有一个 Perl 脚本,它使用 XML 文件来配置用户和组,它使用 getgrnam 和 getpwnam 来查询用户和组,然后对 groupmod/groupadd 和 usermod/useradd 如果用户存在或不存在。我发现如果 LDAP 有一个与我尝试创建的组同名的组,我的脚本将看到该组已存在并跳转到 groupmod 而不是 groupadd。然后组二进制文件将只对本地组执行操作,并且失败,因为该组在本地不存在。 NSS 设置为先检查文件然后再检查 sss,这就是为什么 getgrnam returns ldap 组的原因。

有没有办法让 getgrnam 和 getpwnam 只查询本地系统,而不必在我 运行 脚本时重新配置 nsswitch.conf 和可能 stop/start SSSD?

是否有另一个 perl 函数可用于仅查询本地 users/groups?

简短的回答是否定的 - 这些函数调用的目的是使身份验证机制透明。您 可以 使用各种各样的东西,没有人愿意手动滚动他们自己的本地 files/ldap/yp/nis+/任意 PAM 身份验证机制。

如果您特别对本地 passwdgroup 文件的内容感兴趣,我建议答案是 - 阅读那些直接地。