转载自:http://www.linuxfly.org/post/671/
某项目,需要在Asianux 4.0上配置LDAP服务。参考以前的[原]操作ldap 数据库一文,在执行ldapadd 命令时报错:
引用
ldap_bind: Invalid credentials (49)
经分析及查询相关资料,原来该版本的OpenLDAP已改用其他格式保存配置数据,原来的slapd.conf 仅作为模板使用。
一、软件版本
先来看看具体的版本信息:
引用
# cat /etc/asianux-release
Asianux Server 4 (Hiranya)
# rpm -qa|grep openldap
openldap-2.4.19-15.AXS4.x86_64
openldap-servers-2.4.19-15.AXS4.x86_64
openldap-devel-2.4.19-15.AXS4.x86_64
openldap-clients-2.4.19-15.AXS4.x86_64
compat-openldap-2.4.19_2.3.43-15.AXS4.x86_64
二、配置LDAP
1.修改配置文件
这里假设系统是新安装好的,没有遗留数据。若非如此,请参考附录。
在/etc/openldap目录下,有一个slapd.conf.bak文件,拷贝一份为slapd.conf。
# cd /etc/openldap
# cp slapd.conf.bak slapd.conf
(为什么这里会没有slapd.conf,第一次配置时已觉得有点问题,后来才知道,因为该文件现仅作为模板使用,服务真正读取的配置数据不在这里)
然后,使用slappasswd命令创建一个密码:
引用
# slappasswd
New password:
Re-enter new password:
{SSHA}3c6DQ4xIKU/7Qz22Y2S2MgOoHhQkasR/
接着,参考以前的文档,修改slapd.conf中相关的信息,例如:
引用
database bdb
suffix "dc=example,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=example,dc=com"
#rootpw secret
rootpw {SSHA}3c6DQ4xIKU/7Qz22Y2S2MgOoHhQkasR/
access to *
by dn.exact="cn=Manager,dc=example,dc=com" read
by * none
蓝色标注的是密码,默认是注释的或为明文的“secret”,这里直接使用slappasswd命令生成的密码。
2.生成配置数据
正如前面所说的,服务运行时并不会读取slapd.conf 文件,而是从/etc/openldap/slapd.d目录中读取相关信息。
我们打开slapd.d/cn=config/olcDatabase={1}bdb.ldif 文件会看到以slapd.conf.bak生成的信息:
引用
# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}bdb.ldif
olcDatabase: {1}bdb
olcSuffix: dc=my-domain,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=Manager,dc=my-domain,dc=com
所以,接下来要做的,就是先把这些数据删掉:
# rm -rf /etc/openldap/slapd.d/*
然后重新生成新配置数据:
引用
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
看看新生成的配置数据是否匹配:
引用
# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}bdb.ldif
dn: olcDatabase={1}bdb
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {1}bdb
olcSuffix: dc=example,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=Manager,dc=example,dc=com
不错吧。但为了便于slapd服务读取,需要改一下宿主:
引用
# chown -R ldap.ldap slapd.d/
# ll slapd.d/
drwxr-x---. 3 ldap ldap 4096 10月 18 05:17 cn=config
-rw-------. 1 ldap ldap 1007 10月 18 05:17 cn=config.ldif
默认权限是没问题的,不需修改。
3.生成bdb数据
配置文件中,默认指定把数据存放在/var/lib/ldap目录下。启动LDAP服务前,还需要拷贝一个DB_CONFIG文件:
# cp /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap.ldap /var/lib/ldap/DB_CONFIG
若不拷贝该文件,会报错,请见附录。启动slapd服务:
引用
# service slapd start
正在启动 slapd: [确定]
4.导入数据
为了可正确访问LDAP数据库,还需要导入初始数据。使用vi 创建一个ldif文件,内容如下:
引用
# cat example.ldif
dn:dc=example,dc=com
objectclass:dcObject
objectclass:organization
o:Example,Inc.
dc:example
dn:cn=Manager,dc=example,dc=com
objectclass:organizationalRole
cn:Manager
执行ldapadd命令导入:
引用
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,dc=example,dc=com"
提示输入密码时,输入开始由slappasswd生成,并写入slapd.conf 配置模板rootpw部分后面的密码。
至此,LDAP配置已完成。
5.备份配置模板
为免出现误会,通常建议把配置文件sladp.conf 拷贝为.bak 文件,作为模板保存:
引用
# mv slapd.conf slapd.conf.bak
mv:是否覆盖"slapd.conf.bak"? y
三、使用phpLDAPadmin访问
phpLDAPadmin是使用php编写的,易于访问LDAP数据库的Web工具。从官网下载后,解压到/var/www/html 目录下,并改名、赋予合适的属主。
引用
# ll /var/www/html/phpldapadmin/ -d
drwxr-xr-x. 11 apache apache 4096 10月 18 03:45 /var/www/html/phpldapadmin/
然后,拷贝一个配置文件:
# cd /var/www/html/phpldapadmin/config
# mv config.php.example config.php
即可配置完成。
访问http://ip/phpladpadmin:
输入slapd.conf 配置模板中的rootdn 部分作为登陆DN,rootpw 部分为密码。
登录成功
四、附录
1.若系统存在遗留数据,可删除相关数据后重新配置
# rm -rf /var/lib/ldap/*
# rm -rf /etc/openldap/slapd.d/*
2.执行ldapadd 命令时报错
引用
ldap_bind: Invalid credentials (49)
这是由于/etc/openldap/slapd.d 目录中使用的数据与执行导入命令时设置的DN 路径不符。
解决办法是,修改ldapadd 中-D 参数后面指定的DN值,或使用slapd.conf 配置模板生成新的配置数据。方法可见上面。
3.执行ldap_add命令时报错
引用
Invalid syntax (21)
这通常的原因是导入的ldif 中存在不合法的Class,与Schema 中定义不符。例如:objectclass:organizationalRole 写成 objectclass:organizational 等等。
解决方法是,修改Schema文件,或使用正确的Class定义。
4.重启slapd服务或执行slaptest 时报错
引用
bdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).
原因是/var/lib/ldap目录中缺少DB_CONFIG文件,参考上面的方法从openldap-servers 包中拷贝一份,并赋予合适的属主即可。
五、参考资料
Red Hat 6: How to resolve ldapadd ldap_bind: Invalid credentials (49)
centos 简单安装 openldap
相关日志
[原]操作ldap 数据库
[原]LDAP服务介绍