一.openldap簡介
LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。屬於開源集中賬號管理架構的實現。LDAP具有兩個國家標准,分別是X.500和LDAP。OpenLDAP支持TCP/IP協議,目前TCP/IP協議是Internet上訪問互聯網協議。OpenLDAP直接運行在更簡單和通用的TCP/IP或其他可靠的傳輸協議層上,避免了在OSI會話層和表示層的開銷,使連接的建立和包的處理更簡單,更快;OpenLDAP默認是以Berkeley DB作為后端數據庫,Berkeley DB數據庫主要以散列的數據庫類型進行數據存儲。
二. DAP中常用的名詞縮寫即含義
1.dc(domain component):域名,如域名為example.com變成dc=example,dc=com。
2.uid(user id):指用戶的的登錄名稱,如uid=tom,與linux系統的UID不是一個概念。
3.ou(organization unit):制定一個組織單元的名稱,如ou=people,dc=example,dc=com。
4.cn(common name):指一個對象的名稱,如果是人,需要使用全名。
5.dn(distinguished name):唯一標識名,類似linux文件系統的絕對路徑,每個對象都有唯一的標識 名,如uid=tom,ou=people,dc=example,dc=com。
6.sn(sur name):指一個人的姓氏。
7.giveName:指一個人的名字。
三.LDIF解釋
LDIF(LDAP Data Interchanged Format)的輕量級目錄訪問協議數據交換格式的簡稱,是存儲LDAP配置信息及目錄內容的標准文本文件格式。
四.Openldap同步原理及配置
1.OpenLdap同步條件
a.OpenLDAP服務器之間需要保持時間同步。
b.OpenLDAP軟件包版本一致。
c.OpenLDAP節點之間域名可以互相解析。
d.配置OpenLDAP同步復制,需要提供完全一樣的配置及目錄樹。
e.數據的條目保持一致。
f.額外的schema文件保持一致。
2.OpenLDAP5種同步模式(大體提一下,相關知識可百度)
a.Syncrepl復制
b.Delta-syncrepl復制(基於變更日志同步)
c.N-Way Multi-Master復制
d.MirrorMode復制(很重要)
e.Syncrepl Proxy代理模式
五.OpenLDAP主主同步實戰案例(Mirror Mode)
1.前期規划:
A服務器:192.168.239.140
B服務器:192.168.239.139
時間同步ntpdate
把時間同步放在計划任務(crontab)中,時間同步很重要
修改主機名以及hosts文件
關閉防火牆和selinux
2.下載對應的軟件包
檢查是否安裝wget(yum install -y wget)
mkdir /openldap
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.23.tgz
wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz
3.安裝對應的軟件包
yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel
安裝一些加密的軟件包(不然后期會報錯):yum -y install cyrus-sasl-lib.x86_64
cyrus-sasl-devel.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64
cyrus-sasl-ldap.x86_64
4.編譯安裝Berkeley DB源碼包:
tar -xf db-4.6.21.tar.gz -C /usr/local/src
cd /usr/local/src/db-4.6.21/build_unix/ && mkdir /usr/local/BDB
../dist/configure --prefix=/usr/local/BDB # ../dist/configure --help可以查看幫助
make && make install
echo "/usr/local/BDB/lib/" > /etc/ld.so.conf.d/bdb.conf #添加的庫文件和頭文件主要作為其 他程序編譯安裝所調用的庫文件和頭文件。
ldconfig -v #重新讓內核讀取庫文件
ln -sv /usr/local/BDB/include /usr/include/bdb #添加Berkeley DB相關頭文件
5.編譯安裝OpenLDAP源碼包
tar -xf openldap-2.4.23.tgz -C /usr/local/src/
cd /usr/local/src/openldap-2.4.23/
./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BDB/include/ LDFLAGS=-L/usr/local/BDB/lib/ --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd
make depend
make && make install
echo "/usr/local/openldap/lib/" > /etc/ld.so.conf.d/ldap.conf #添加OpenLDAP庫文件
ldconfig -v
ln -sv /usr/local/openldap/include/ /usr/include/ldap #添加OpenLDAP頭文件
6.設置可執行命令
cd /usr/local/openldap
ln -s /usr/local/openldap/bin/* /usr/local/bin/
ln -s /usr/local/openldap/sbin/* /usr/local/sbin/
7.配置rootdn密碼
slappasswd 生成密碼,記錄下密碼,后期配置文件要用
這是我生成的:{SSHA}K/DXlq/QVoNsC1LnLTxW5KossmkMlaRA
8.創建一些相關目錄以及用戶(日志目錄等等相關目錄)
mkdir /data/openldap/{data,log,var}
cd /data/openldap/var/
mkdir run
useradd ldap
9.復制數據庫文件以及修改文件權限
cp /usr/local/openldap/etc/openldap/DB_CONFIG.example /data/openldap/data/DB_CONFIG
chown -R ldap:ldap /data/openldap/data
chmod 700 -R /data/openldap/data
10.編輯配置文件
cd /usr/local/openldap/etc/openldap/
vim slapd.conf
配置文件如下:
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/collective.schema
include /usr/local/openldap/etc/openldap/schema/corba.schema
include /usr/local/openldap/etc/openldap/schema/cosine.schema
include /usr/local/openldap/etc/openldap/schema/duaconf.schema
include /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include /usr/local/openldap/etc/openldap/schema/java.schema
include /usr/local/openldap/etc/openldap/schema/misc.schema
include /usr/local/openldap/etc/openldap/schema/nis.schema
include /usr/local/openldap/etc/openldap/schema/openldap.schema
include /usr/local/openldap/etc/openldap/schema/ppolicy.schema
#include行代表當前OpenLDAP服務包含的schema文件
pidfile /data/openldap/var/run/slapd.pid #OpenLDAP進程啟動時,pid文件存放路徑
argsfile /data/openldap/var/run/slapd.args #OpenLDAP參數文件的路徑
loglevel 256 #日志級別
logfile /data/openldap/log/slapd.log #日志的路徑
moduleload syncprov.la #OpenLDAP指定需要加載額外的模塊
database bdb #指定OpenLDAP數據庫類型
suffix "dc=zhongkai,dc=com" #指定OpenLDAP服務域名(DN)
rootdn "cn=Manager,dc=zhongkai,dc=com" #指定OpenLDAP服務管理員信息
directory /data/openldap/data #指定OpenLDAP數據庫文件的存放目錄
rootpw {SSHA}zHRFSAehsnbfonWg4GRgNQsiQHxKppvs #管理員密碼
index objectclass,entryCSN,entryUUID eq #創建OpenLDAP索引,提高讀寫效率
overlay syncprov #復制引擎
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID 2 節點ID,唯一(修改)
syncrepl rid=123
provider=ldap://192.168.239.139 #對端IP地址(修改)
bindmethod=simple #綁定的方法簡單模式
binddn="cn=Manager,dc=zhongkai,dc=com" #綁定的dn
credentials=123456 #密碼
searchbase="dc=zhongkai,dc=com" #起始域
schemachecking=off
type=refreshAndPersist
retry="60 +"
mirrormode on #開啟mirror mode模式
另外一台機器要修改的地方我已經標記。
11.安裝和配置LDAP管理工具PHPldapadmin
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin
修改配置文件
1.vim /etc/phpldapadmin/config.php +398
注意:修改配置文件前先備份,這是我的常用方法:cp 文件名{,.bak}
並且在修改配置文件時候,最好不要改動原來的文件,需要改啥就復制相應的行來改動,原來的文件注釋掉即可,養成一個好的習慣,很重要哦!
#397行取消注釋,398行添加注釋
$servers->setValue('login','attr','dn')
// $servers->setValue('login','attr','uid');
2.vim /etc/httpd/conf.d/phpldapadmin.conf
11行:<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted(修改為這個)
</IfModule>
啟動httpd,並設置為開機自啟
systemctl start httpd
systemctl enable httpd
12.開啟日志功能
a.vim /root/loglevel.ldif(這四行)
1.dn: cn=config
2.changetype: modify
3.replace: olcLogLevel
4.olcLogLevel: stats
b.vim /etc/rsyslog.d/slapd.conf
1.local4.* /data/openldap/log/openldap.log
13.重新啟動rsyslog和slapd服務
systemctl restart rsyslog
usr/local/openldap/libexec/slapd [restart|start|stop]
有時slapd服務停止不了,那就必須使用kill
方法:先用netstat -anlp | grep slapd 查看相應的進程號,使用kill -9 PID號碼干掉,重新啟動。
14.測試
訪問訪問用http://ip地址(填自己的呀!別填我的。)/phpldapadmin
點擊登錄:登錄dn:cn=Manager,dc=zhongkai,dc=com
密碼:123456(還是填你自己設置的)
先測試140可以向139同步嗎?
打開ou=peopel,發現只用一條記錄,點擊添加新條目,添加zhogkai完成后,看訪問139people是否多了一個條目。
基本上需要刷新一下就可以出現。
在192.168.239.140的那台機器上創建對象,看在192.168.239.139上是否同步過去。
成功,然后在192.168.239.139機器上創建一個對象,看192.168.239.140的那台機器是否可以同步過去。這樣才算成功。
之前我在實驗過程中遇到的問題有:
1.我用到openldap的版本是openldap-2.4.23,源碼安裝,建議還是源碼安裝,yum安裝版本是openldap-2.4.44,導致沒有slapd.conf這個文件,需要修改slapd.d這個目錄下的cn=config下的數據庫文件,比較復雜,問題比較多,坑比較多,建議源碼安裝,生產環境下一般都是源碼安裝,不要嫌棄麻煩。
2.后期測試的是192.168.239.140向192.168.239.139時同步時,可以同步過去,但是192.168.239.139向192.168.239.140同步的時候同步不成,通過查看日志,報address alrealdy in use。
在鏡像同步的模式下,兩台服務器均可以進行讀寫操作,任何一台信息發生變化,都會以推的方式進行通知。注意:是那台向那台服務器同步不成功,就去找那台的日志。
六.總結
學習openldap已經差不多倆周了,自己也算有點收獲吧,從剛開始的接觸到現在略知一二,自己也總結了自己學習新東西的過程:結合參照資料了解基本概念,在實踐中具體理解其含義是最有效的方法,其次可以給其他人講出來,這也是一種好的學習方法;還有就是在報錯的時候或者出問題的時候,要有自己解決問題的思路,思路真的很重要。感謝我的師兄,教會了我好多同時也學到了不少東西,再次感謝。