OpenLDAP(2.4.3x)服务器搭建及配置说明

 

本文采用的是从源码编译安装,适合UbuntuCentOS平台,经过apt-getyum方式安装参考补充部分。openldap原理介绍参考这里html

环境:
Ubuntu: 14.04.1 (trusty), x86_64
OpenLDAP: 2.4.31
Berkery DB: 5.1.29linux

1 安装

1.1 准备编译环境和依赖包

# apt-get install build-essential
# apt-get install libssl-dev

# cd /usr/local/src下载openldap-2.4.31.tgzdb-5.1.29.NC.tar.gz并解压:数据库

src# wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.31.tgz
# wget http://download.Oracle.com/berkeley-db/db-5.1.29.NC.tar.gz
# tar -zxf openldap-2.4.31.tgz
# tar -zxf db-5.1.29.NC.tar.gz
 
# cd db-5.1.29.NC/build_unix/
# ../dist/configure --prefix=/usr/local/berkeleydb-5.1
# make && make install


../src/dbinc/atomic.h:179:19: warning: conflicting types for built-in function
建议人工指定--prefix,默认会安装到/usr/local/BerkeleyDB.5.1。上面的make过程会比较长,另外若是gcc版本在4.7及以上,可能会出现以下warning,能够忽略:c#

‘__atomic_compare_exchange’ [enabled by default]

1.2 安装openldap api

设置一些环境变量,修改/etc/profile/etc/bash.bashrcbash

export BERKELEYDB_HOME="/usr/local/berkeleydb-5.1"
export CPPFLAGS="-I$BERKELEYDB_HOME/include"
export LDFLAGS="-L$BERKELEYDB_HOME/lib"
export LD_LIBRARY_PATH="$BERKELEYDB_HOME/lib"
 
export LDAP_HOME="/usr/local/openldap-2.4"
export PATH="$PATH:$BERKELEYDB_HOME/bin:$LDAP_HOME/bin:$LDAP_HOME/sbin:$LDAP_HOME/libexec"

编译安装:其实只要在后面编译openldap时能找到libinclude下的库就好了,不止上面设置环境变量一种办法,解决办法还有直接复制对应的库文件到/usr/lib/usr/include,或修改/etc/ld.so.conf.d,选其一便可。服务器

openldap-2.4.31# ./configure --prefix=/usr/local/openldap-2.4
# make depend
# make
# make install


出错提示解决: session

若是没设置CPPFLAGS,上面的configure过程可能会提示configure: error: BDB/HDB: BerkeleyDB not available数据结构

若是提示oracle

configure: error: MozNSS not found - please specify the location to the NSPR and NSS header files
in CPPFLAGS and the location to the NSPR and NSS libraries in LDFLAGS (if not in the system location)

或 

configure: error: no acceptable C compiler found in $PATH

请检查第一步的依赖是否已经安装,查看openldap解压目录下的README看到REQUIRED SOFTWARE。 

2 配置

2.1 基本配置

/usr/local/openldap-2.4目录结构:

bin/ --客户端工具如ldapadd、ldapsearch
etc/ --包含主配置文件slapd.conf、schema、DB_CONFIG等
include/
lib/
libexec/ --服务端启动工具slapd
sbin/ --服务端工具如slappasswd
share/
var/ --bdb数据、log存放目录


2.1.1 配置root密码
 

# slappasswd
New password:
Re-enter new password:
{SSHA}phAvkua+5B7UNyIAuoTMgOgxF8kxekIk

include /usr/local/openldap-2.4.31/etc/openldap/schema/core.schema2.1.2 修改后的slapd.conf

include /usr/local/openldap-2.4.31/etc/openldap/schema/cosine.schema
include /usr/local/openldap-2.4.31/etc/openldap/schema/inetorgperson.schema
 
pidfile /usr/local/openldap-2.4.31/var/run/slapd.pid
argsfile /usr/local/openldap-2.4.31/var/run/slapd.args
 
loglevel 256
logfile /usr/local/openldap-2.4.31/var/slapd.log
 
database bdb
suffix "dc=mydomain,dc=net"
rootdn "cn=root,dc=mydomain,dc=net"
rootpw {SSHA}UK4eGUq3ujR1EYrOL2MRzMBJmo7qGyY3
directory /usr/local/openldap-2.4.31/var/openldap-data
index objectClass eq


2.1.3 启动slapd服务
根据本身的须要加入schema,suffix通常填入域名,rootdn处是管理ldap数据的管理员用户,rootpw即是使用slappasswd生成的加密密码。

# /usr/local/openldap-2.4.31/libexec/slapd

2.1.4 测试数据会自动使用etc/openldap/slapd.conf做为配置文件启动,并写入/usr/local/openldap-2.4.31/var/run/slapd.args中。这里有个问题未解决,配置loglevel和logfile但始终都看不到记录的日志,启动时加入-d 256能正常输出到屏幕上。

编辑一个添加entries的文件test.ldif:

dn: dc=mydomain,dc=net
objectClass: dcObject
objectClass: organization
dc: mydomain
o: mydomain.Inc
 
dn: cn=root,dc=mydomain,dc=net
objectClass: organizationalRole
cn: root
 
dn: ou=itsection,dc=mydomain,dc=net
ou: itsection
objectClass: organizationalUnit
 
dn: cn=sean,ou=itsection,dc=mydomain,dc=net
ou: itsection
cn: sean
sn: zhouxiao
objectClass: inetOrgPerson
objectClass: organizationalPerson


插入数据: 

查看(匿名)
# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
 
添加(读入密码)
# ldapadd -x -D "cn=root,dc=mydomain,dc=net" -W -f test.ldif
 
验证
# ldapsearch -x -b 'dc=mydomain,dc=net' '(objectClass=*)'
 
或手动添加条目
# ldapadd -x -D "cn=root,dc=mydomain,dc=net" -W
Enter LDAP Password:
dn:cn=Angelababy,ou=itsection,dc=mydomain,dc=net
cn:Angelababy
sn:baby
objectClass:inetOrgPerson
objectClass:organizationalPerson
 
adding new entry "cn=baby,ou=itsection,dc=mydomain,dc=net"


到这里,一个简易版的LDAP服务就搭建好了,下面介绍一些额外的高级配置。 

2.2 配置TLS加密传输

在某些应用环境下可能须要加密传输ldap里的信息,配置TLS难点在于证书的生成。关于SSL加密证书的介绍请参考ssl-tls,下面咱们本身搭建CA,快速自签署ssl证书。

2.2.1 自签署ssl证书

(1) 生成根密钥
# cd /etc/ssl/demoCA/
# openssl genrsa -out private/cakey.pem 2048
 
(2) 生成根证书,位于/etc/ssl/demoCA/下(CentOS位于/etc/pki/CA)
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
 
(3) 初始化CA
demoCA# mkdir private newcerts
# touch newcerts index.txt serial
# echo "00" > serial
 
(4) 在ldap服务器上生成ssl密钥(能够是/tmp/certs下)
# openssl genrsa -out ldap.key
 
(5) 为ldap生成证书签署请求(所填写内容尽可能与第2步相同)
Common Name填写主机名或域名,password留空
# openssl req -new -key ldap.key -out ldap.csr
 
(6) ca根据请求签发证书,获得.crt证书文件
# openssl ca -in ldap.key -out ldap.crt


2.2.2 在slapd.conf中加入TLS
若是在你的环境中已经有一个证书受权中心CA,那么只须要在ldap服务器上使用openssl生成密钥.key和签署请求.csr(第四、5步),而后将.csr发给CA服务器来生成证书.crt(第6步)。

能够是其它能访问的位置
# mkdir $OPENLDAP_HOME/etc/openldap/cacerts
# cp cacert.pem $OPENLDAP_HOME/etc/openldap/cacerts
# cp ldap.crt $OPENLDAP_HOME/etc/openldap/
# cp ldap.key $OPENLDAP_HOME/etc/openldap/
 
在etc/openldap/slapd.conf中加入如下信息
TLSCACertificateFile /usr/local/openldap-2.4/etc/openldap/cacerts/cacert.pem
TLSCertificateFile /usr/local/openldap-2.4/etc/openldap/ldap.crt
TLSCertificateKeyFile /usr/local/openldap-2.4/etc/openldap/ldap.key

2.2.3 从新启动slapd

# killall slapd 关闭slapd standalone daemon
# ./libexec/slapd -h 'ldap://0.0.0.0:389/ ldaps://0.0.0.0:636/ ldapi:///'
或只监听636加密端口
# ./libexec/slapd -h 'ldaps://0.0.0.0:636/'


2.2.4 验证
若是是正式环境使用加密的话,389端口前的IP换成127.0.0.1。

ldapsearch
使用自带的ldapsearch或ldapadd客户端工具来链接slapd,须要设置ldap.conf~/.ldaprc文件中的TLS_CACERT为信任的根证书才能使用,不然会提示

TLS certificate verification: Error, self signed certificate in certificate chain
TLS trace: SSL3 alert write:fatal:unknown CA


因此在在使用ldapsearch的服务器上修改/etc/ldap/ldap.conf:(man ldap.conf) 

BASE    dc=mydomain,dc=net
URI     ldaps://apptest.mydomain.net:636
TLS_CACERT /usr/local/openldap-2.4/etc/openldap/cacerts/cacert.pem

(固然也能够TLS_REQCERT never来信任根证书)

使用:

ldapsearch -x -D "cn=root,dc=mydomain,dc=net" -W -LLL
或写全
ldapsearch -x -b 'dc=mydomain,dc=net' '(objectClass=*)' -H ldaps://apptest.mydomain.net:636 -D "cn=root,dc=mydomain,dc=net" -W

须要注意的是,URI后的 Server name 必须与签署证书使用的 Common name 一致。另外在ldap server本地执行ldapsearch默认使用的客户端配置文件是$LDAP_HOME/etc/openldap/ldap.conf

LDAPBrower
另一种方式是使用第三方LDAP客户端链接工具,如LDAPBrower:

链接:
ldaps_conn_session

信任根证书:
ldaps_trust_ca.png

查看(可Add entries):
ldaps_browser

3 补充

3.1 apt-get安装

经过apt-get在Ubuntu上安装OpenLDAP。

# dpkg -l|grep libdb 查看berkeleydb是否安装
# apt-get install slapd ldap-utils


安装过程当中会提示输入admin密码。 

安装完成后默认已经启动了slapd进程,与本身手动编译不一样的是默认采用的配置文件有点区别:

# ps -ef|grep slapd
... /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d


/etc/ldap/slapd.d
 是2.4.x版本新采用的配置文件目录,但手动编辑slapd.d目录下ldif是很是痛苦的,若是你不习惯新的配置目录格式,你能够经过修改/etc/default/slapd中的SLAPD_CONF=SLAPD_CONF="/etc/ldap/slapd.conf"。 

slapd.conf配置形式官方已经废弃了但依然支持,你还能够选择在编辑完熟悉的slapd.conf后使用openldap提供的slaptest工具将它转换成slapd.d配置目录:

# mv /etc/ldap/slapd.d{,.dist} 先删除(备份)原目录
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 转换成新的配置目录格式
# chown -R openldap:openldap /etc/ldap/slapd.d/ 修改权限

 

3.2 slapd-config配置形式的说明

咱们把就的配置方式叫slapd.conf,新的配置方式叫slapd-config或olc(OpenLDAP Configuration,也能够理解为online config)。slapd.d目录内包含许多ldif文件,就是slapd.conf中的内容转化成ldif格式,以构成一棵根为cn=config的目录树,这棵树包含了许多结点,如:cn=module{0}cn=schemaolcDatabase={1}bdb……全部配置信息就是这些结点的属性。结构以下图:
openldap_config_dit

使用这种新的配置目录的���处在于:

  1. 经过Overlay截获修改这些目录属性的信息,而后对相应的数据结构进行修改,即管理员能够像修改其它目录属性同样修改cn=config目录树下的目录信息,而且修改后即时生效,无需重启服务器。
  2. 管理员不用像之前那样对服务器的配置文件进行修改,而是能够在任何可以连上ldap服务器的地方对配置文件内容进行修改,没有地域的限制。

可是当你须要配置多个backend时,slapd-config方式须要2.4.33版本之后才支持,此前的版本还只能使用slapd.conf方式。

LDIF配置格式大体以下:

# global configuration settings
dn: cn=config
objectClass: olcGlobal
cn: config
<global config settings>
 
# schema definitions
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
<system schema>
 
dn: cn={X}core,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {X}core
<core schema>
 
# additional user-specified schema
...
 
# backend definitions
dn: olcBackend=<typeA>,cn=config
objectClass: olcBackendConfig
olcBackend: <typeA>
<backend-specific settings>
 
# database definitions
dn: olcDatabase={X}<typeA>,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {X}<typeA>
<database-specific settings>
 
# subsequent definitions and settings
...
 

  


咱们有时候会发现ldif里面会有一些条目是带{0}这样的数字,这是由于ldap数据库自己是无序的,这些索引同样的数字是用来强制一些依赖于其余配置的设置可以按照正确的顺序前后生效。不过它不用咱们去关心,在添加entries时若是有须要会自动生成。 

ldif文件中大部分属性和objectClass是以olc开头的,与就的配置风格slapd.conf有着一对一的属性配置选项,如olcDatabase: {1}hdbdatabase bdb对应。

 

更多内容请参考 OpenLDAP Software 2.4 Administrator’s Guide 。
ldap_slapd_config

相关文章
相关标签/搜索