2019独角兽企业重金招聘Python工程师标准>>>
##环境##
操作系统: CentOS 6.4 x86_64 OpenLDAP: 2.4.x
##安装##
从yum源安装
su root
yum install openldap openldap-servers openldap-clients -y
从源代码安装
这里演示如何将OpenLDAP安装到/home/ldapuser的目录下。默认情况下会安装到/usr/local,这个位置需要root权限
安装依赖包
yum install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel -y
由于OpenLDAP需要BerkelyDB作为存储引擎,并且OpenLDAP对BerkelyDB的版本有有一定的要求。以OpenLDAP 2.4.35版本为例,需要对应的BerkelyDB版本是 4.4 至 4.8,或 5.0 至 5.1. 这里采用5.0.32版本的BerkelyDB
下载Berkely DB 5.0.32的非加密版本(假设下载后的压缩包位于~/db-5.0.32.NC.zip),然后把Berkely DB安装到/home/ldapuser目录下
mkdir ~/workspace
cd ~/workspace
unzip ~/db-5.0.32.NC.zip
cd db-5.0.32.NC/build_unix
../dist/configure --prefix=$HOME/berkelydb-5.0.32
make
make install
ln -svf $HOME/berkelydb-5.0.32 $HOME/berkelydb
接着安装LDAP。在安装前,需要设置一些环境变量. 打开~/.bashrc,添加如下的内容:
export BERKELYDB_HOME=$HOME/berkelydb
export PATH="$BERKELYDB_HOME/bin:$PATH"
export CPPFLAGS="-I$BERKELYDB_HOME/include"
export LDFLAGS="-L$BERKELYDB_HOME/lib"
export LD_LIBRARY_PATH=$BERKELYDB_HOME/lib
假设openldap压缩包下载到~/openldap-2.4.35.tgz, 解压并安装:
cd ~/workspace
tar zxvf ~/openldap-2.4.35.tgz
. ~/.bashrc
./configure --prefix=$HOME/openldap-2.4.35
make
make depend
make install
ln -svf $HOME/opendlap-2.4.35 $HOME/openldap
为了以后使用方便,打开~/.bashrc,添加如下内容
export LDAP_HOME=$HOME/openldap
export MANPATH="$LDAP_HOME/share/man:$MANPATH"
export PATH="$LDAP_HOME/bin:$LDAP_HOME/sbin:$LDAP_HOME/libexec:$PATH"
配置##
基本配置
如果是通过yum方式安装的,执行如下的命令来初始化OpenLDAP的配置.
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
mv /etc/openldap/slapd.d{,.bak}
也许你已经猜到,slapd.conf是OpenLDAP的配置文件。下面对slapd.conf的一些配置项做些说明:
# 需要引入的schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
...
# 启动OpenLDAP后,存放pid的文件
pidfile /var/run/openldap/slapd.pid
# OpenLDAP查找功能模块的路径
# modulepath /usr/lib/openldap
# modulepath /usr/lib64/openldap
# 要加载哪些模块
# moduleload accesslog.la
...
# 日志级别
loglevel 296
# 日志文件路径
logfile /var/run/slapd.log
# 配置域和管理员DN
# 比如我这里把前缀(suffix)的域名改成"dc=ggd543,dc=com",把管理员DN改成"cn=admin,dc=ggd543,dc=com"
database bdb
suffix “dc=ggd543,dc=com"
rootdn "cn=admin,dc=ggd543,dc=com"
# 管理员DN的密码
# 以明文形式保存密码(不推荐)
# rootpw 123456
# 对密码进行散列后保存(需要先通过命令slapdpasswd得到,然后复制到这里)
rootpw {SSHA}C2QXGVvRLZp3AHVvB8NQZrOvNj2WAkE4
# OpenLDAP数据库存放的目录
directory /var/lib/ldap
关于日志级别的问题####
输入命令slapd -d ?可以看到OpenLDAP预定义的日志级别以及每种日志级别所对应的数字(十进制和十六进制),如:
[[email protected] ~$]slapd -d ?
Installed log subsystems:
Any (-1, 0xffffffff)
Trace (1, 0x1)
Packets (2, 0x2)
Args (4, 0x4)
Conns (8, 0x8)
BER (16, 0x10)
Filter (32, 0x20)
Config (64, 0x40)
ACL (128, 0x80)
Stats (256, 0x100)
Stats2 (512, 0x200)
Shell (1024, 0x400)
Parse (2048, 0x800)
Sync (16384, 0x4000)
None (32768, 0x8000)
NOTE: custom log subsystems may be later installed by specific code
你可以同时设置几种日志级别,方法是将日志级别的数字加起来。 比如同时设置Trace和Stats级别,那么在slapd.conf中:
loglevel 257
或者启动OpenLDAP时,使用命令参数-d 257来指定
启动OpenLDAP
# 采用默认配置启动
slapd
# 日志级别为Trace, ldap协议监听0.0.0.0的3891端口, 采用/root/slapd.conf配置文件
slapd -d 1 -h 'ldap://0.0.0.0:3891' -f /root/slapd.conf
关于slapd的启动参数,请通过man slapd
查阅
注意:不能在slapd.conf中指定slapd进程所监听的端口和所绑定的IP, 默认情况下,ldap协议监听389端口,ldaps协议监听636端口. 由于非root用户不能监听1~1024区间内的端口,所以如果采用非root用户启动,需要制定其他端口。
配置TLS传输加密
先在$LDAP_HOME下创建一个certs子目录,我们接下来的所有操作都在这个子目录下进行
mkdir $LDAP_HOME/certs
cd $LDAP_HOME/certs
创建一个长度为2048位的RSA私钥(ca-key.pem),用于创建自签署的根证书
openssl genrsa -des3 -out ca-key.pem 2048
这里对创建的私钥采取Triple DES算法加密,因此需要设置一个密码(请牢记这个密码!),如果不加参数-des3,则不会创建的私钥加密
可以使用如下命令查看RSA私钥:
openssl rsa -noout -text -in ca-key.pem
利用刚才创建的RSA私钥创建自签署的根证书(ldap-ca.crt)
openssl req -new -x509 -days 365 -key ca-key.pem -out ldap-ca.crt
这个根证书的有效期是365天. 创建时,需要输入下列的信息:
Country Name: CN //两个字母的国家代号,简称C
State or Province Name: Guangdong //省份或州名,简称ST
Locality Name: Guangzhou //城市或地区,简称L
Organization Name: //公司名,简称O
Organizational Unit Name: //部门名,简称OU
Common Name: //通用名,简称CN
Email Address: //Email地址,简称emailAddress
这里需要注意的是,Common Name应该填入OpenLDAP服务器的域名或IP
可以用以下命令查看生成的根证书:
openssl x509 -noout -text -in ldap-ca.crt
创建另一个RSA私钥(ldap-key.pem),用于创建OpenLDAP服务器的证书文件
openssl genrsa -des3 -out ldap-key.pem 2048
创建证书签署请求文件(ldap-server.csr)
openssl req -new -key ldap-key.pem -out ldap-server.csr
这里也要输入和创建根证书时一样的信息,**需要注意的是,组织(O),城市/地点(L), 州/省(ST) , 国家/地区(C)要和刚才生成的CA证书中的内容一致。**至于额外属性('extra' attributes)可以不用输入.
查看证书请求文件的细节
openssl req -noout -text -in ldap-server.csr
签署证书
在第一次签署证书前,还需要做一些准备工作
cp /etc/pki/tls/openssl.cnf ./
mkdir ./newcerts
touch index.txt
echo "00" > serial
打开openssl.cnf, 将dir = /etc/pki/CA
改成dir = $HOME
, 然后就可以生成证书文件了
openssl ca -days 365 -cert ldap-ca.crt -keyfile ca-key.pem -in ldap-server.csr -out ldap-server.crt -config openssl.cnf
这个证书文件(ldap-server.crt)的有效期也是365天
如果要重新签署证书,需要先将index.txt
的内容用index.txt.old
还原
执行如下的命令
mkdir $OPENLDAP_HOME/etc/openldap/cacerts -p
cp ldap-ca.crt $OPENLDAP_HOME/etc/openldap/cacerts
cp ldap-server.crt $OPENLDAP_HOME/etc/openldap/
cp ldap-key.pem $OPENLDAP_HOME/etc/openldap/
打开$OPENLDAP_HOME/etc/openldap/slapd.conf
,添加如下的内容:
TLSCACertificateFile /home/ldapuser/openldap/etc/openldap/cacerts/ldap-ca.crt
TLSCertificateFile /home/ldapuser/openldap/etc/openldap/ldap-server.crt
TLSCertificateKeyFile /home/ldapuser/openldap/etc/openldap/ldap-key.pem
ldaps默认使用636端口,如果发现启动后出现的错误,则打开
/etc/services
,把ldaps
开头的几行注释掉,然后service portreserve restart
配置复制(Replication)###
主服务器, 添加如下的内容到$OPENLDAP_HOME/etc/openldap/slapd.conf
:
moduleload syncprov.la
index entryUUID,entryCSN eq
overlay syncprov
sync-checkpoint 100 10
syncprov-sessionlog 100
从服务器
syncrepl rid=003
provider=ldaps://ldap.mydomain.fr:1024/
type=refreshOnly
retry="60 10 600 +"
interval=00:00:00:10
searchbase="dc=mydomain,dc=fr"
scope=sub
schemachecking=on
bindmethod=simple
starttls=yes
tls_cert=/etc/ssl/certs/ldap-cert.pem
tls_cacert=/etc/ssl/certs/ldap-cert-ca.pem
binddn="cn=syncrepluser,o=others,dc=mydomain,dc=fr"
credentials=my_password
说明:
-
主服务器可读写,但从服务器只能读
-
从服务器中,provider项填写主服务器的ldap地址,interval表示从服务器多久跟主服务器进行一次数据同步 ,retry表示失败重试策略
-
当ldap客户端通过ldaps://协议通信时,需要在
$LDAP_HOME/etc/ldap.conf
添加两行配置:ssl on TLS_REQCERT never
参考资料: http://www.ibm.com/developerworks/cn/education/linux/l-lpic3302/section2.html