nss_ldap:“getent passwd”有效,“getent passwd“失败了?

nss_ldap:“getent passwd”有效,“getent passwd“失败了?

我已经安装了 nss_ldap,并编辑了 nsswitch.conf 以使用 ldap;以下是我的/etc/ldap.conf内容:

host ldap.<mycompany>.com
base o=<mycompany>,c=<cc>
bind_policy soft
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2

当我做

getent passwd

我获得了公司所有用户名的正确视图。但如果我

getent passwd <some user>

对于已知的有效用户名,不会返回任何内容,就像用户不存在一样。(适用于本地非 ldap 用户)

如果我启用调试来编译 nss_ldap,前者会打印出很多调试消息,例如:nss_ldap:==> do_result nss_ldap:<== do_result nss_ldap:==> _nss_ldap_assign_userpassword nss_ldap:<== _nss_ldap_assign_userpassword

但后者什么都没显示。系统日志中也没有任何内容。

这让我很困惑。我应该从哪里开始寻找问题?你知道问题可能出在哪里吗?

客户端运行的是 Gentoo Linux,nss_ldap-264。LDAP 服务器不受我的控制。

答案1

您是否使用命名缓存守护程序 nscd ?它可能具有用户的负面缓存,在这种情况下运行/usr/sbin/nscd -i passwd将使缓存无效并导致重新获取。

getent passwd可以工作是因为它绕过了 nscd。

相关内容