linux - 使用 getgrnam() 只查询本地组

标签 linux perl ldap

我正在尝试将独立产品集成到 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 身份验证机制。

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

关于linux - 使用 getgrnam() 只查询本地组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34183843/

相关文章:

linux - 从 perl 启动 bash 时命令失败,但从命令行启动时没有,权限问题

linux - 从多个文件复制数据并添加到不同的文件

regex - 如何转义要插入正则表达式的文字字符串?

python - 在将文件导入 SQL Server 2008 之前解析包含随机更改顺序的列的文件的最佳方法?

PHP:死掉还是检查结果?

java - Tomcat 可以使用 JWT token 吗

linux - 即使在 LINUX 上给定的缓冲区足够,套接字 UDP recvfrom 也不适用于大数据包

c - 如何在 Linux 中创建具有特定安全权限的文件? (即相当于 Win32 CreateFile+SECURITY_ATTRIBUTES)

C 在 LINUX 中运行同一程序两次