问题

对 LDAP 用户运行“id”命令时,它只显示某些辅助组的 gid,并且不会打印组名:

# id user1
uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4),56971

并且在 /var/log/sssd/sssd_nss.log 中报错如下:

(Tue Mar 14 05:40:09 2020) [sssd[nss]] [nss_cmd_getgrgid_search] (0x0010): getgrgid call returned more than one result !?!

getgrgid调用返回了多个结果
CentOS/RHEL:“id”命令无法查看LDAP 用户的组名
之路教程 https://onitr oad .com

解决方案

添加的新组与现有组具有相同的 GID。

# id user1
uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4),56971(group6)
# getent group group5
group5:*:56971:
# id user1
uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4)

相同的 ID 映射到 2 个组,group5 和 group6.
因此,当我们执行 id 时,我们为用户获得了正确的结果(显示了所有用户组)。
然后我们为另一个组运行 getent group:

# getent group group5

但在那之后,似乎该组从 id 结果中删除了。

SSSD 在 SysDB 中有一个硬性限制,即只能存在一个具有特定 ID 的组。
当一个组在服务器上被重命名时,我们是否正确处理它就成为一个操作顺序问题。
我们不支持具有相同 GID 的多个条目,这样做会导致意外行为。

所以下面的错误记录在 /var/log/sssd/sssd_nss.log 中:

(Tue Mar 14 05:40:09 2020) [sssd[nss]] [nss_cmd_getgrgid_search] (0x0010): getgrgid call returned more than one result !?!

因此,一旦我们更正了 LDAP 服务器中的条目,sssd 应该能够再次正确地提取它。
如果没有,则等待 300 秒,因为该缓存刷新自身的默认时间为 300 秒(即五分钟)。
我们也可以使用以下命令根据要求使用合适的选项刷新 sssd 缓存:

-E 标志可用于使所有缓存条目无效。
例外是 sudo 规则。

# sss_cache -E

我们还可以使用 -u 标志后跟用户名仅从缓存中使特定用户无效。

# sss_cache -u user1

此外,我们可以从 /var/lib/sss/db/ 目录中删除 sss_cache 文件。

# service sssd stop
# rm -rf /var/lib/sss/db/*
# service sssd start
日期:2020-09-17 00:12:40 来源:oir作者:oir