博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenLDAP(2.4.3x)服务器搭建及配置说明
阅读量:5789 次
发布时间:2019-06-18

本文共 8388 字,大约阅读时间需要 27 分钟。

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

环境:

Ubuntu: 14.04.1 (trusty), x86_64OpenLDAP: 2.4.31Berkery DB: 5.1.29

1 安装

1.1 准备编译环境和依赖包

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

下载和并解压:

# cd /usr/local/srcsrc# 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

建议人工指定--prefix,默认会安装到/usr/local/BerkeleyDB.5.1。上面的make过程会比较长,另外如果gcc版本在4.7及以上,可能会出现如下,可以忽略:

../src/dbinc/atomic.h:179:19: warning: conflicting types for built-in function ‘__atomic_compare_exchange’ [enabled by default]

1.2 安装openldap

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

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

出错提示解决:

如果没设置CPPFLAGS,上面的configure过程可能会提示configure: error: BDB/HDB: BerkeleyDB not available

如果提示

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

2.1.2 修改后的slapd.conf

include     /usr/local/openldap-2.4.31/etc/openldap/schema/core.schemainclude     /usr/local/openldap-2.4.31/etc/openldap/schema/cosine.schemainclude     /usr/local/openldap-2.4.31/etc/openldap/schema/inetorgperson.schemapidfile     /usr/local/openldap-2.4.31/var/run/slapd.pidargsfile    /usr/local/openldap-2.4.31/var/run/slapd.argsloglevel 256logfile  /usr/local/openldap-2.4.31/var/slapd.log database    bdbsuffix      "dc=mydomain,dc=net"rootdn      "cn=root,dc=mydomain,dc=net"rootpw      {SSHA}UK4eGUq3ujR1EYrOL2MRzMBJmo7qGyY3directory   /usr/local/openldap-2.4.31/var/openldap-dataindex   objectClass eq

根据自己的需要加入schema,suffix一般填入域名,rootdn处是管理ldap数据的管理员用户,rootpw便是使用slappasswd生成的加密密码。

2.1.3 启动slapd服务

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

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

2.1.4 测试数据

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

dn: dc=mydomain,dc=netobjectClass: dcObjectobjectClass: organizationdc: mydomaino: mydomain.Incdn: cn=root,dc=mydomain,dc=netobjectClass: organizationalRolecn: rootdn: ou=itsection,dc=mydomain,dc=netou: itsectionobjectClass: organizationalUnitdn: cn=sean,ou=itsection,dc=mydomain,dc=netou: itsectioncn: seansn: zhouxiaoobjectClass: inetOrgPersonobjectClass: 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" -WEnter LDAP Password: dn:cn=Angelababy,ou=itsection,dc=mydomain,dc=netcn:Angelababysn:baby  objectClass:inetOrgPersonobjectClass:organizationalPersonadding new entry "cn=baby,ou=itsection,dc=mydomain,dc=net"

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

2.2 配置TLS加密传输

在某些应用环境下可能需要加密传输ldap里的信息,配置TLS难点在于证书的生成。关于SSL加密证书的介绍请参考,下面我们自己搭建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) 初始化CAdemoCA# 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

如果在你的环境中已经有一个证书授权中心CA,那么只需要在ldap服务器上使用openssl生成密钥.key和签署请求.csr(第4、5步),然后将.csr发给CA服务器来生成证书.crt(第6步)。

2.2.2 在slapd.conf中加入TLS

可以是其它能访问的位置# 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.pemTLSCertificateFile /usr/local/openldap-2.4/etc/openldap/ldap.crtTLSCertificateKeyFile /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/'

如果是正式环境使用加密的话,389端口前的IP换成127.0.0.1。

2.2.4 验证

ldapsearch

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

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

所以在在使用ldapsearch的服务器上修改/etc/ldap/ldap.conf:(man ldap.conf

BASE    dc=mydomain,dc=netURI     ldaps://apptest.mydomain.net:636TLS_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=schema, olcDatabase={1}bdb……所有配置信息就是这些结点的属性。结构如下图:

openldap_config_dit

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

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

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

LDIF配置格式大致如下:

# global configuration settingsdn: cn=configobjectClass: olcGlobalcn: config
# schema definitionsdn: cn=schema,cn=configobjectClass: olcSchemaConfigcn: schema
dn: cn={X}core,cn=schema,cn=configobjectClass: olcSchemaConfigcn: {X}core
# additional user-specified schema...# backend definitionsdn: olcBackend=
,cn=configobjectClass: olcBackendConfigolcBackend:
# database definitionsdn: olcDatabase={X}
,cn=configobjectClass: olcDatabaseConfigolcDatabase: {X}
# subsequent definitions and settings...

我们有时候会发现ldif里面会有一些条目是带{0}这样的数字,这是因为ldap数据库本身是无序的,这些索引一样的数字是用来强制一些依赖于其他配置的设置能够按照正确的顺序先后生效。不过它不用我们去关心,在添加entries时如果有需要会自动生成。

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

更多内容请参考 。

ldap_slapd_config

3.3 slapd-config修改示例(LDIF)

见 。

3.4 LDAP访问控制示例

待续

3.5 OpenLDAP复制配置(replication)

待续

4 参考


原文链接地址:


转载地址:http://adqyx.baihongyu.com/

你可能感兴趣的文章
Wine QQ2012 笔记
查看>>
vue全选和取消全选(无bug)
查看>>
qml demo分析(clocks-时钟)
查看>>
vue去掉#——History模式
查看>>
2018年7月第一周网站建站笔记
查看>>
jasperReport例子
查看>>
MongoDB工具MagicMongoDBTool使用介绍(一) -- 简单MongoDB入门
查看>>
javascript的事件
查看>>
android 打开SD卡文件夹,并获得选中文件的路径怎么实现?
查看>>
android 如何实现连接蓝牙打印机来实现打印功能
查看>>
CSS3 高级技术
查看>>
原型模式(Prototype )
查看>>
201521123009 《Java程序设计》第1周学习总结
查看>>
年终述职--常见问题分析解答
查看>>
C#_细说Cookie_Json Helper_Cookies封装
查看>>
对事件循环的一点理解
查看>>
在mui中创建aJax来请求数据..并展示在页面上
查看>>
spring 之AOP
查看>>
总结 15/4/23
查看>>
守护进程
查看>>