红联Linux门户
Linux帮助

RHEL5.4下配置openldap

发布时间:2015-02-23 15:29:19来源:linux网站作者:linux人

RHEL5.4系统中要实现openLDAP的功能必须要安装openldap,openldap-servers,openldap-cLients三个软件包。

其中openldap包已经默认安装,用来提供LDAP服务的基本文件目录。Openldap-servers提供服务端功能,openldap-clients提供客户端的搜索工具,这两个包必须手动安装。


一、服务器端配置:

#rpm –ivh openldap-servers-2.3.27-8.e15-1.3.i386.rpm

或者

#yum install  openldap* -y

[root@station3 Server]# rpm -vih openldap-servers-2.3.43-3.el5.i386.rpm
Preparing...                ############################ [100%]
1:openldap-servers       ########################### [100%]
[root@station3 Server]# rpm -vih openldap-servers-overlays-2.3.43-3.el5.i386.rpm
Preparing...                ############################## [100%]
1:openldap-servers-overla############################## [100%]
[root@station3 Server]# rpm -vih openldap-servers-sql-2.3.43-3.el5.i386.rpm
Preparing...                ########################### [100%]
1:openldap-servers-sql   ############################### [100%]
[root@station3 Server]# cd /var/lib/ldap/    (现在安装完成-目录只有一个文件)
openldap-severs-update.log

下面的这一步非常重要 ( 必须要第一步就执行这个 slapd 命令)
[root@station3 ldap]# slapd        (会生成一些库文件)
[root@station3 ldap]# ls
alock     __db.003  __db.006      log.0000000001
__db.001  __db.004  dn2id.bdb     openldap-severs-update.log
__db.002  __db.005  id2entry.bdb

查看服务器进程:

#ps aux | grep ldap

查看端口:

[root@station3 ldap]# netstat -ntlp | grep 389
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      3782/slapd         
tcp        0      0 :::389                      :::*                        LISTEN      3782/slapd  

问题一:

[root@station3 ldap]# service ldap restart
停止 slapd:                                               [确定]
/var/lib/ldap/id2entry.bdb is not owned by "ldap"          [警告]
/var/lib/ldap/__db.002 is not owned by "ldap"              [警告]
/var/lib/ldap/__db.001 is not owned by "ldap"              [警告]
/var/lib/ldap/dn2id.bdb is not owned by "ldap"             [警告]
/var/lib/ldap/__db.005 is not owned by "ldap"              [警告]
/var/lib/ldap/__db.006 is not owned by "ldap"              [警告]
/var/lib/ldap/__db.003 is not owned by "ldap"              [警告]
/var/lib/ldap/__db.004 is not owned by "ldap"              [警告]
正在检查 slapd 的配置文件: bdb_db_open: alock package is unstable
backend_startup_one: bi_db_open failed! (-1)
slap_startup failed (test would succeed using the -u switch)
                                                           [失败]
/var/lib/ldap 中可能存在无效的锁文件                       [警告]
[root@station3 ldap]# service ldap status
slapd 已停
解决方法:
[root@station3 ldap]# pwd
/var/lib/ldap
[root@station3 ldap]# chown ldap:ldap *
[root@station3 ldap]# service ldap restart
停止 slapd:                                               [失败]
正在检查 slapd 的配置文件: bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)
Expect poor performance for suffix dc=my-domain,dc=com.
config file testing succeeded
                                                                    [确定]
启动 slapd:                                                [确定]

bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)   也是一个问题
解决方法:
[root@station3 ldap]# cp /etc/openldap/DB_CONFIG.example   /var/lib/ldap/DB_CONFIG
[root@station3 ldap]# ll
总计 756
-rw-r--r-- 1 ldap ldap     2048 04-23 15:32 alock
-rw------- 1 ldap ldap    24576 04-23 15:23 __db.001
-rw------- 1 ldap ldap   278528 04-23 15:23 __db.002
-rw------- 1 ldap ldap   270336 04-23 15:23 __db.003
-rw------- 1 ldap ldap    98304 04-23 15:23 __db.004
-rw------- 1 ldap ldap   352256 04-23 15:23 __db.005
-rw------- 1 ldap ldap    24576 04-23 15:23 __db.006
-rw-r----- 1 root root      921 04-23 15:35 DB_CONFIG
-rw------- 1 ldap ldap     8192 04-23 15:23 dn2id.bdb
-rw------- 1 ldap ldap    32768 04-23 15:23 id2entry.bdb
-rw------- 1 ldap ldap 10485760 04-23 15:29 log.0000000001
-rw-r--r-- 1 ldap ldap       37 04-23 15:19 openldap-severs-update.log
[root@station3 ldap]# chown ldap:ldap *
[root@station3 ldap]# service ldap restart
停止 slapd:                                               [确定]
正在检查 slapd 的配置文件: bdb_db_open: DB_CONFIG for suffix dc=my-domain,dc=com has changed. Performing database recovery to activate new settings. bdb_db_open: Recovery skipped in read-only mode. Run manual recovery if errors are encountered.
config file testing succeeded
                                                                  [确定]
启动 slapd:                                               [确定]
[root@station3 ldap]# chmod 600 *
[root@station3 ldap]# service ldap restart
停止 slapd:  [确定]
正在检查 slapd 的配置文件: config file testing succeeded  [确定]
启动 slapd:  [确定]
OK!


二、服务器数据初始化

2)配置/etc/openldap/slapd.conf
备份原始配置档 (Linux/Unix管理员都应该养成这样的好习惯)
[root@mail openldap]# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf-orig
配置openldap的主配置文件
[root@mail openldap]# vi /etc/openldap/slapd.conf
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/corba.schema
database bdb
suffix "dc=example,dc=com"    #一条记录所属区域#
rootdn "cn=admin,dc=example,dc=com"
rootpw 1234567                 #定义LDAP根管理员的密码(强烈建议使用加密的密码)
[root@station3 nks]# service ldap status
slapd (pid 5840) 正在运行...
[root@station3 nks]# service ldap stop
停止 slapd:                                               [确定]

将系统账户转移到openldap中
[root@mail openldap]# vi /usr/share/openldap/migration/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "example.com";
Default base
$DEFAULT_BASE = "dc=example,dc=com";

[root@mail openldap]# cd /usr/share/openldap/migration/
[root@mail migration]#  ./migrate_passwd.pl /etc/passwd > /etc/openldap/user.ldif
[root@mail migration]#  ./migrate_group.pl /etc/group > /etc/openldap/group.ldif
建立example.ldif,ou_people.ldif, ou_group.ldif三个文件
[root@mail migration]# cd /etc/openldap/
再次提醒,注意每行后面不要留有空格。
[root@mail openldap]# cat example.ldif
dn: dc=example,dc=com
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example.com
[root@mail openldap]# cat ou_people.ldif
dn: ou=people, dc=example, dc=com
objectclass: organizationalUnit
ou: people
[root@mail openldap]# cat ou_group.ldif
dn: ou=group, dc=example, dc=com
objectclass: organizationalUnit
ou: group
停止ldap服务
[root@mail openldap]# service ldap stop

转换原有Linux 账号至OpenLDAP服务器上:
[root@mail openldap]# slapadd -vl example.ldif
added: "dc=example,dc=com" (00000001)
[root@mail openldap]# slapadd -vl ou_people.ldif
added: "ou=people,dc=example,dc=com" (00000002)
[root@mail openldap]# slapadd -vl ou_group.ldif
added: "ou=group,dc=example,dc=com" (00000043)
[root@mail openldap]# slapadd -vl user.ldif
[root@mail openldap]# slapadd -vl group.ldif

为了检查服务是否正在运行并且被正确配置,可以对服务器运行一个搜索命令,使用ldapsearch
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts;
注意命令行参数中单引号的使用,它们阻止特殊的字符被shell解析。这应该返回:
   
[root@station3 Server]# rpm -vih openldap-clients-2.3.43-3.el5.i386.rpm
Preparing...                ################################ [100%]
1:openldap-clients       ############################### [100%]
[root@station3 Server]# ldap
ldapadd      ldapdelete   ldapmodrdn   ldapsearch 
ldapcompare  ldapmodify   ldappasswd   ldapwhoami 

[root@mail openldap]# service ldap start
入以下命令可查询到刚才输入的信息。
查询:
ldapsearch -x -H ldap://192.168.1.209 -b  'dc=example,dc=com'
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

# ldapsearch -x -b 'dc=it,dc=com'

-b设置目录起点,如果设置了BASE参数,该项可不用。
如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的
userPassword and mail。要查询到这些受限内容,需要通过验证才可以。

# ldapsearch -x -LLL -h it.com -b 'dc=it,dc=com' -D 'uid=qq,dc=it,dc=com' -W 'uid=qq'

为了检查服务是否正在运行并且被正确配置,可以对服务器运行一个搜索命令,使用ldapsearch
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts;
注意命令行参数中单引号的使用,它们阻止特殊的字符被shell解析。这应该返回:
   
[root@station3 Server]# rpm -vih openldap-clients-2.3.43-3.el5.i386.rpm
Preparing...                ############################### [100%]
1:openldap-clients       ############################## [100%]
[root@station3 Server]# ldap
ldapadd      ldapdelete   ldapmodrdn   ldapsearch 
ldapcompare  ldapmodify   ldappasswd   ldapwhoami 

[root@mail openldap]# service ldap start
入以下命令可查询到刚才输入的信息。
查询:
ldapsearch -x -H ldap://192.168.1.209 -b  'dc=example,dc=com'
或者
[root@vm ~]# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
出现不显示任何条目————ldap.conf没配
在debug调试模式下看到下面的信息
[root@station3 openldap]# service ldap stop
# /usr/sbin/slapd -d 256 -u ldap      进入调试模式
slapd starting
conn=0 fd=10 ACCEPT from IP=127.0.0.1:32769 (IP=0.0.0.0:389)
conn=0 op=0 BIND dn="" method=128
conn=0 op=0 RESULT tag=97 err=0 text=
conn=0 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"
conn=0 op=1 SEARCH RESULT tag=101 err=32 nentries=0 text=
conn=0 op=2 UNBIND
conn=0 fd=10 closed
slapd shutdown: waiting for 0 threads to terminate
slapd stopped.
赶紧去检查ldap.conf,发觉配置返回初始化的缺省配置了
[root@station3 openldap]# pwd
/etc/openldap
[root@vm openldap]# cat ldap.conf
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
HOST 127.0.0.1
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
解决:重新配ldap.conf,重起ldap server
#  Ldapsearch –x -LLL
# ldapsearch -x -LLL "(uid=ldap)"  uid  loginShell

# ldapsearch -x -b 'dc=it,dc=com'

-b设置目录起点,如果设置了BASE参数,该项可不用。
如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的
userPassword and mail。要查询到这些受限内容,需要通过验证才可以。

# ldapsearch -x -LLL -h it.com -b 'dc=it,dc=com' -D 'uid=qq,dc=it,dc=com' -W 'uid=qq'

接着提示输入密码。输入userPassword的密码回车,所有信息就都出来了。

[root@mail openldap]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts;
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

接着提示输入密码。输入userPassword的密码回车,所有信息就都出来了。

[root@mail openldap]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts;
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=example,dc=com
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

3)安装openLDAP GUI管理客户端
3.1)phpLDAPadmin的安装和配置
下载最新版本的phpLDAPadmin
http://phpldapadmin.sourceforge.net/
[root@mail openldap]# tar -zvxf phpldapadmin-1.1.0-alpha4.tar.gz
[root@mail openldap]# chown -R apache.apache phpldapadmin-1.1.0-alpha4
[root@mail openldap]# cd phpldapadmin-1.1.0-alpha4/config/
[root@mail config]# cp config.php.example config.php
[root@mail config]# vi config.php
// $config->custom->appearance['language'] = 'auto';
$config->custom->appearance['language'] = 'zh_CN';
 
3.2)lam (LDAP Account Manager)的安装和配置
http://lam.sourceforge.net/
ldap-account-manager-2.0.0.tar.gz
 
客户端的配置
在客户端执行authconfig-tui命令,进入认证配置界面

4)openLDAP主从复制服务器配置
MasterLDAP: 10.10.119.200
SlaveLDAP: 10.10.119.204
Port:  389
在MasterLDAP端修改openLDAP主配置文件/etc/openldap/slapd.conf
[root@mail openldap]# vi /etc/openldap/slapd.conf
replogfile /var/lib/ldap/openldap-master-replog
replica host=10.10.119.204:389
suffix="dc=example,dc=com"
binddn="cn=admin,dc=example,dc=com"
bindmethod=simple
credentials=123456

在SlaveLDAP端修改openLDAP主配置文件/etc/openldap/slapd.conf
[root@mail openldap]# vi /etc/openldap/slapd.conf
updatedn        "cn=admin,dc=example,dc=com"
updateref       ldap://10.10.119.200:389
5)openLDAP双向复制服务器配置
MasterLDAP: 10.10.119.200
SlaveLDAP: 10.10.119.204
Port:  389
在MasterLDAP端修改openLDAP主配置文件/etc/openldap/slapd.conf
[root@mail openldap]# vi /etc/openldap/slapd.conf
updatedn        "cn=admin,dc=example,dc=com"
updateref       ldap://10.10.119.204:389

在SlaveLDAP端修改openLDAP主配置文件/etc/openldap/slapd.conf
[root@mail openldap]# vi /etc/openldap/slapd.conf
replica host=10.10.119.200:389
suffix="dc=example,dc=com"
binddn="cn=admin,dc=example,dc=com"
bindmethod=simple
credentials=123456

Notes: 我的实现方法应该不是正宗的,是在主从配置的想法上得来的,在网上和openLDAP的官方手册中都没有看到openLDAP双向复制服务器配置的案例,理论上这样配置的ldap服务起会发生“死循环”的问题,还好openLDAP在10.10.119.200:389.rej文件和 10.10.119.204:389.rej文件记录了这种循环,而不会导致真正的死循环
6)FAQ
6.1) Q1启动服务时出现/var/lib/ldap/**.dbd owner is not ldap
A1
[root@mail html]# chown  -R  ldap.ldap /var/lib/ldap

6.2)Q2启动服务时出现bdb_db_open: Warning - No DB_CONFIG file found in directory  /var/lib/ldap
Oct 19 10:19:34 ldap slapd[55696]: bdb_db_open: Warning - No DB_CONFIG file found in directory  /var/lib/ldap: (2)
Expect poor performance for suffix dc=admin,dc=example,dc=com.
A2
[root@mail html]# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

6.3) Q3在做ldapwhoami或者ldapsearch是出现sasl绑定错误
ldap_sasl_interactive_bind_s: Invalid credentials (49)
additional info: SASL(-13): user not found: no secret in database

A3:
默认的openLDAP是基于 sasl 的绑定,需要先创建sasl用户及其密码
[root@mail html]# saslpasswd2 -c UserName
输入两次密码,密码保存在/etc/sasldb2,可以用 sasldblistusers2 命令查看用户名称
在ldapsearch等命令中使用 -U UserName -W参数,然后输入上面的密码就行