在 Fedora 12 上安装 OpenLDAP:ldap_bind:无效凭据(49)

在 Fedora 12 上安装 OpenLDAP:ldap_bind:无效凭据(49)

我一直试图设置 Fedora 12 上默认安装的 OpenLDAP,但一直没有成功。我的最终目标是使用 LDAP 身份验证进行用户登录和 Apache,使用在同一台机器上运行的 OpenLDAP 服务器。

服务器正在运行,但是当我尝试使用 ldapsearch 或 ldapadd 时总是出现以下错误:ldap_bind:无效凭证(49)

我一直在关注这些教程,但它们都没有帮助我:

  • http://www.howtoforge.com/openldap_fedora7
  • http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/s1-ldap-quickstart.html
  • http://www.howtoforge.com/linux_ldap_authentication
  • http://docs.fedoraproject.org/deployment-guide/f12/en-US/html/s1-ldap-pam.html
  • http://www.openldap.org/doc/admin24/quickstart.html

首先,一些组件已经安装,我使用 yum 安装了这些:

yum install openldap-servers openldap-devel

然后,我在 /etc/openldap 中创建了一个基本的 slapd.conf 文件:

database        bdb
suffix          "dc=sniejana-sandbox,dc=com"
rootdn          "cn=root,dc=sniejana-sandbox,dc=com"
rootpw          {SSHA}cxdz55ygPu4T3ykg7dgu+L0VRvsFSeom
directory       /var/lib/ldap/sniejana-sandbox.com

我使用以下命令获取了 rootpw:

slappasswd -s changeme

我还创建了/var/lib/ldap/sniejana-sandbox.com目录并确保其所有内容/var/lib/ldap都归 ldap 用户所有。

我找到了两个 ldap.conf 文件,一个在 /etc 中,一个在 /etc/openldap 中。我不知道哪个是正确的。如果我理解正确的话,这个文件是用来配置客户端的。我把这个放在了两个文件中:

HOST localhost
BASE dc=sniejana-sandbox,dc=com

然后我使用以下命令运行服务器:

service slapd start

它说“好的”。

上面的大多数教程都说要使用该命令ldapsearch -D "cn=Manager,dc=my-domain,dc=com" -W来确保一切正常。当我执行此命令时,会出现密码提示,输入密码后,出现错误。

ldapsearch -D "cn=root,dc=sniejana-sandbox,dc=com" -W
Enter LDAP password:
ldap_bind: Invalid credentials (49)

尝试使用 ldapadd 时也会发生同样的事情。我尝试在 slapd.conf 中使用加密和未加密的密码,但没有任何变化。添加 -x 进行简单身份验证也不会改变任何东西。

netstat -ap 确认服务器正在监听:

tcp   0   0 *:ldap    *:*       LISTEN      4148/slapd          
tcp   0   0 *:ldap    *:*       LISTEN      4148/slapd

ps -ef|grep slapd 确认进程正在运行:

ldap   4148  1  0 15:22 ?   00:00:00 /usr/sbin/slapd -h  ldap:/// -u ldap

运行 slaptest procudes配置文件测试成功

我读到过一些文章说该命令ldapsearch -x -b '' -s base '(objectclass=*)' namingContext可以确认服务器正在运行。它似乎有效:

# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContext 
#

#
dn:

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

我没什么主意了。我是否忽略了某些显而易见的东西?

答案1

啊哈!我的问题解决了!我只需要使用 删除目录。这将强制 OpenLDAP在启动服务时rm -rf /etc/openldap/slapd.d查找我的文件。slapd.conf

答案2

我在 Fedora 12 中也遇到了这个 openldap 问题!但如果您尝试使用以下命令手动启动 openldap,它的行为就会恢复正常。/usr/sbin/slapd -f /etc/openldap/slapd.conf

我怀疑默认命令(我指的是“service slapd start”)没有加载我在 yum 安装后手动创建的 openldap 配置文件(我指的是 /etc/openldap/slapd.conf)。

答案3

我第一次尝试时也遇到了同样的问题。

经过分析,我删除了/etc/openldap/slapd.d/目录,并删除了目录的内容/var/lib/ldap/(其中包含数据库)。之后一切正常。

注意:var/lib/ldap目录必须存在,否则slapd服务将永远不会启动。

我通过阅读/etc/init.d/slapd脚本理解了这一点。在该脚本中,他们盲目地检查/etc/openldap/slapd.d目录是否存在。如果是,则意味着他们只是忽略了该slapd.conf文件。该脚本还检查/var/lib/ldap/目录中是否存在数据库。如果是,则意味着他们使用该数据库,否则他们将创建一个新的空数据库。

/etc/openldap/slapd.d目录就是将配置信息保存在一个目录数据结构中,用来代替slapd.conf文件。我猜 Fedora 默认使用这个目录。

相关内容