我已经安装了 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。