我正在尝试将独立产品集成到 LDAP 环境中。
我有一个 RHEL 6.7 系统,配置为 ldap 身份验证(通过 sss),我需要以编程方式将本地用户和组添加到该系统。
输入的 xml 文件有一个用户和组的列表,以及他们应该使用的组成员、登录 shell、用户 ID 和组 ID。
现在问题来了,我有一个 Perl 脚本,它使用 XML 文件来配置用户和组,它使用 getgrnam 和 getpwnam 来查询用户和组,然后对 groupmod/groupadd 和 usermod/useradd 进行系统调用用户是否存在。我发现如果 LDAP 有一个与我尝试创建的组同名的组,我的脚本将看到该组已存在并跳转到 groupmod 而不是 groupadd。然后组二进制文件将只对本地组执行操作,并且失败,因为该组在本地不存在。 NSS 设置为先检查文件,然后检查 sss,这就是 getgrnam 返回 ldap 组的原因。
有没有办法让 getgrnam 和 getpwnam 只查询本地系统,而不必重新配置 nsswitch.conf 并可能在我运行脚本时停止/启动 SSSD?
我可以使用另一个 perl 函数来仅查询本地用户/组吗?
最佳答案
简短的回答是否定的 - 这些函数调用的目的是使身份验证机制透明。您可以使用各种各样的东西,没有人愿意手动滚动他们自己的本地文件/ldap/yp/nis+/任意 PAM 身份验证机制。
如果您特别对本地 passwd
和 group
文件的内容感兴趣,我建议答案是 - 阅读那些直接。
关于linux - 使用 getgrnam() 只查询本地组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34183843/