OpenLDAP(2.4.3x)服務器搭建及配置說明

本文采用的是從源碼編譯安裝,適合Ubuntu和CentOS平臺,經過apt-getyum方式安裝參考補充部分。openldap原理介紹參考這裏html

環境:數據庫

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並解壓:c#

# 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,能夠忽略:segmentfault

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

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,選其一便可。bash

編譯安裝:服務器

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

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(第四、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:

鏈接:

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 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

3.3 slapd-config修改示例(LDIF)

LDIF修改ldap記錄或配置示例

3.4 LDAP訪問控制示例

待續

3.5 OpenLDAP複製配置(replication)

待續

4 參考


原文連接地址:http://seanlook.com/2015/01/21/openldap-install-guide-ssl/

相關文章
相關標籤/搜索