Ubuntu 12.04 LDAP客户端问题

我按照这里描述的指南配置LDAP进行操作,但是在运行"getent passwd"时一直出现以下错误,有什么原因吗?
错误:
Jul 16 15:58:33 wso2-VirtualBox getent: nss_ldap: could not search LDAP server - Server is unavailable
^[[AJul 16 15:59:34 wso2-VirtualBox getent: nss_ldap: failed to bind to LDAP server ldapi:///192.168.4.152/: Invalid credentials
Jul 16 15:59:34 wso2-VirtualBox getent: nss_ldap: could not search LDAP server - Server is unavailable

配置文件:
vi /etc/ldap.conf

base dc=example,dc=com

uri  ldapi:///192.168.4.152/

ldap_version 3

timelimit 4

bind_timelimit 4

bind_policy soft

pam_password md5

nss_initgroups_ignoreusers avahi,avahi-
autoipd,backup,bin,colord,daemon,games,gnats,hplip,irc,kernoops,libuuid,lightdm,list,lp,mail,man,messagebus,news,nslcd,openldap,proxy,pulse,root,rtkit,saned,speech-dispatcher,sshd,sync,sys,syslog,usbmux,uucp,whoopsie,www-data
4个回答

使用ldapsearch命令行工具来验证服务器是否运行,并且您使用的凭据是否正确:
ldapsearch -D the-dn-you-use -w -the-password-you-use \
    -H 192.168.4.152:389 -s base -b dc=example,dc=com '(&)' 1.1

如果ldapsearch成功,服务器正在侦听,LDAP客户端具有足够的权限执行此搜索,并且身份验证是正确的。

我认为问题在于:
uri  ldapi:///192.168.4.152/

应该是:
uri  ldap://192.168.4.152/

我使用了官方文档,虽然getent passwd在输出中显示了LDAP条目,但最终得到了类似的消息。甚至用户名称的bash自动补全也与LDAP值一起工作。当我尝试使用LDAP用户名id username时,它失败并记录了与您相同的错误消息。
几分钟后,我想起LDAP数据包含一个管理员名称cn=admin,dn=...,而在/etc/ldap.conf中,rootbinddn被设置为cn=mananger,dn=...。 我将/etc/ldap.conf更改为与LDAP数据匹配,问题解决了。后来我找到了你提到的博客,上面写着: 注释掉"rootbinddn"这一行[不确定为什么需要这样做] 可能是同样的问题。

我猜你需要做的第一件事是确定你的LDAP服务器是否接受连接...在客户端上安装ldap-utils,这样你就有了ldapsearch工具。然后尝试使用ldapsearch -x命令。这将使用简单身份验证,如果你得到结果,那么你可以确定你的LDAP服务器可以从客户端查询。
接下来,查看你的slapd.conf文件。仔细查看字段binddnbindpw。如果你忘记了bindpw,你可以更改它。生成编码的bindpw的命令是在你的简单文本密码上使用slappasswd。之后,你可以使用Terry Gardner上面提到的命令。如果连接成功,那么你可以放心地认为LDAP身份验证正常工作。如果不起作用,请发布错误消息,描述你遇到的问题,并发布你的slapd.conf文件,希望我们能够为你提供解决方案。 :)