一.openldap簡介php
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數據庫主要以散列的數據庫類型進行數據存儲。java
二. DAP中經常使用的名詞縮寫即含義linux
1.dc(domain component):域名,如域名爲example.com變成dc=example,dc=com。數據庫
2.uid(user id):指用戶的的登陸名稱,如uid=tom,與linux系統的UID不是一個概念。vim
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。session
6.sn(sur name):指一我的的姓氏。架構
7.giveName:指一我的的名字。oracle
三.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已經差很少倆周了,本身也算有點收穫吧,從剛開始的接觸到如今略知一二,本身也總結了本身學習新東西的過程:結合參照資料瞭解基本概念,在實踐中具體理解其含義是最有效的方法,其次能夠給其餘人講出來,這也是一種好的學習方法;還有就是在報錯的時候或者出問題的時候,要有本身解決問題的思路,思路真的很重要。感謝個人師兄,教會了我好多同時也學到了很多東西,再次感謝。