本文采用的是從源碼編譯安裝,適合Ubuntu和CentOS平臺,經過apt-get
或yum
方式安裝參考補充部分。openldap原理介紹參考這裏。html
環境:數據庫
Ubuntu: 14.04.1 (trusty), x86_64 OpenLDAP: 2.4.31 Berkery DB: 5.1.29
# apt-get install build-essential # apt-get install libssl-dev
下載openldap-2.4.31.tgz
和db-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]
設置一些環境變量,修改/etc/profile
或/etc/bash.bashrc
:api
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時能找到lib
和include
下的庫就好了,不止上面設置環境變量一種辦法,解決辦法還有直接複製對應的庫文件到/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。
/usr/local/openldap-2.4
目錄結構:
bin/ --客戶端工具如ldapadd、ldapsearch etc/ --包含主配置文件slapd.conf、schema、DB_CONFIG等 include/ lib/ libexec/ --服務端啓動工具slapd sbin/ --服務端工具如slappasswd share/ var/ --bdb數據、log存放目錄
# slappasswd New password: Re-enter new password: {SSHA}phAvkua+5B7UNyIAuoTMgOgxF8kxekIk
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生成的加密密碼。
# /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
能正常輸出到屏幕上。
編輯一個添加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服務就搭建好了,下面介紹一些額外的高級配置。
在某些應用環境下可能須要加密傳輸ldap裏的信息,配置TLS難點在於證書的生成。關於SSL加密證書的介紹請參考ssl-tls,下面咱們本身搭建CA,快速自簽署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步)。
能夠是其它能訪問的位置 # 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
# 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。
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:
鏈接:
信任根證書:
查看(可Add entries):
經過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/ 修改權限
咱們把就的配置方式叫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
……全部配置信息就是這些結點的屬性。結構以下圖:
使用這種新的配置目錄的好處在於:
cn=config
目錄樹下的目錄信息,而且修改後即時生效,無需重啓服務器。可是當你須要配置多個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}hdb
與database bdb
對應。
更多內容請參考 OpenLDAP Software 2.4 Administrator's Guide 。
待續
待續
原文連接地址:http://seanlook.com/2015/01/21/openldap-install-guide-ssl/