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

简介:

环境:

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

1 安装

1.1 准备编译环境和依赖包

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

下载openldap-2.4.31.tgzdb-5.1.29.NC.tar.gz并解压:

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

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

../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.schema
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

根据自己的需要加入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=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

如果在你的环境中已经有一个证书授权中心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.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/'

如果是正式环境使用加密的话,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 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:

连接:

ldap_conn_session.png&objectId=119000000

信任根证书:

ldap_trust_ca.png&objectId=1190000002607

查看(可Add entries):

ldap_browser.png&objectId=11900000026071

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……所有配置信息就是这些结点的属性。结构如下图:

ldap_config_dit.png&objectId=11900000026

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

  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.png&objectId=119000000

3.3 slapd-config修改示例(LDIF)

见 LDIF修改ldap记录或配置示例

3.4 LDAP访问控制示例

待续

3.5 OpenLDAP复制配置(replication)

待续

目录
相关文章
|
12天前
|
消息中间件 安全 Unix
SSH配置多台服务器之间的免密登陆以及登陆别名
SSH配置多台服务器之间的免密登陆以及登陆别名
23 1
|
27天前
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
9天前
|
存储 弹性计算 安全
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
2核2G、2核4G配置是很多个人和企业建站以及部署中小型的web应用等场景时首选的云服务器配置,这些配置的租用价格也是用户非常关心的问题,本文为大家整理汇总了2024年阿里云服务器2核2G、2核4G配置不同实例规格及地域之间的收费标准,同时整理了这些配置最新活动价格,以供大家参考和选择。
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
|
12天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
15天前
|
安全 关系型数据库 MySQL
国产麒麟服务器等保二级 配置规范(一)
国产麒麟服务器等保二级 配置规范(一)
33 0
|
15天前
|
数据采集
robots.txt配置 减小服务器压力
robots.txt配置 减小服务器压力
13 0
|
25天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
27天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
28天前
|
弹性计算 Kubernetes 安全
ECS选型推荐配置
在构建Kubernetes集群时,应避免使用过多小规格ECS,因它们可能带来网络限制、容量不足和资源碎片化问题。采用大规格ECS能提升网络性能,优化镜像拉取效率。选择Master节点时,要考虑集群规模,生产环境建议选择较高规格。Worker节点推荐使用CPU≥4核、内存≥8GiB的ECS,根据集群总核数和容错率来决定节点数量。当规模达1000核,可选用裸金属神龙服务器,它提供超强网络、零计算抖动和安全性能,适合大促等需快速扩展的场景。
26 1
|
1月前
|
弹性计算 固态存储 调度
2024年阿里云服务器配置选择指南,新手整理
阿里云服务器配置选择指南:个人用户推荐轻量应用服务器或ECS通用算力型u1,适合小型网站和轻量应用。企业用户应选择企业级独享型如ECS计算型c7、通用型g7,保证高性能计算需求。配置选择要考虑CPU内存比例、公网带宽和系统盘。轻量服务器提供2核2G3M和2核4G4M选项,ECS实例则有多种规格以适应不同业务场景。公网带宽建议至少5M,系统盘可选高效云盘、SSD或ESSD。详细信息见[阿里云服务器产品页](https://www.aliyun.com/product/ecs)。
69 3