Centos7 Openldap主從配置
參考了網上多篇文件,大都是centos6.x系統上通過slapd.conf配置部署的,centos7上預設是動態部署的,
通過yum安裝發現無slapd.conf檔案,研究了近半個多月,才初步實現如下所示的同步。
環境:虛擬機器centos7系統
192.168.56.147 | 主openldap |
192.168.56.148 | 從openldap |
安裝ldap服務
vi installOpenldap.sh
#!/bin/bash echo "install ldap rpm" # compat-openldap這個包與主從有很大的關係 yum install -y openldap openldap-* compat-openldap migrationtools systemctl start slapd systemctl enable slapd |
chmod +x installOpenldap.sh
./installOpenldap.sh
檢視安裝的ldpa服務
rpm -qa|grep ldap
檢視OpenLDAP版本
slapd -VV
檢視ldap啟動狀態
systemctl status slapd
檢視openldap預設監聽的389埠(centos7最小化安裝預設沒有netstat命令,需安裝)
yum install net-tools -y
netstat -antup| grep 389
開放389埠
firewall-cmd --zone=public --add-port=389/tcp --permanent
firewall-cmd --reload
(這裡我使用的是開啟防火牆開放埠,也可以直接關閉防火牆,網上大都用的這種,如下
初始化環境:
ntpdate -u ntp.api.bz && sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config && setenforce 0&& systemctl disable firewalld.service && systemctl stop firewalld.service && shutdown -r now
最小化安裝的centos7系統需安裝ntpdate)
配置OpenLDAP資料庫
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chownldap:ldap -R /var/lib/ldap/
chmod 700 -R /var/lib/ldap
ll /var/lib/ldap/
配置ldap服務
設定OpenLDAP的管理員密碼
slappasswd
New password:
Re-enter newpassword:
如設定密碼:AHdms520 {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI 或者 (這樣是方便觀察設定的密碼是什麼) {SSHA}fUcmcIuxU/FSyrMu75aIBbOSae2sXT4q |
vi chrootpw.ldif
# specify the password generated above for "olcRootPW" section dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI |
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
匯入基本模式
vi ldapaddBaseSchema.sh (注:指令碼名可自定義或者直接複製下列命令執行)
#!/bin/bash ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif |
在ldap服務的DB中設定域名
vi chdomain.ldif
# replace to your own domain name for "dc=***,dc=***" section # specify the password generated above for "olcRootPW" section dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,c=cn" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: c=cn dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,c=cn dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,c=cn" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,c=cn" write by * read |
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
匯入管理員基礎資料
vi rootdn.ldif
dn: c=cn objectclass: country c: cn dn: cn=Manager,c=cn objectclass: organizationalRole cn: Manager |
ldapadd -x -D cn=Manager,c=cn -W -f rootdn.ldif
開啟日誌配置
(注:日誌級別可按需要進行設定)
vi logLevel.ldif
[[email protected] ~]# cat logLevel.ldif dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats |
ldapmodify -Y EXTERNAL -H ldapi:/// -f logLevel.ldif
touch /var/log/slapd.log
vi /etc/rsyslog.conf +73
(注:+73是指定位到檔案73行)
新增:
local4.* /var/log/slapd.log
重啟系統日誌服務與ldap服務
systemctl restart rsyslog
systemctl restart slapd
tail -f /var/log/slapd.log
另外可通過cn=config配置OpenLDAP日誌
[[email protected] ~]# cat /etc/openldap/slapd.d/cn\=config.ldif | grep olcLogLevel [[email protected] ~]# cat << EOF | ldapmodify -Y EXTERNAL -H ldapi:/// > dn: cn=config > changetype: modify > add: olcLogLevel > olcLogLevel: 32 > EOF SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" |
master配置
在master上啟用新增syncprov模組來實現主從複製功能點,通過ldif檔案來增加syncprov模組,無需重啟ldap server。
vi mod_syncprov.ldif
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la |
Ldap由於scheam的控制,檔案裡的屬性有嚴格的控制,錯誤的或者不存在的屬性將無法執行ldif檔案,所以ldif檔案的字型顏色會幫助我們配置ldif檔案(屬性:綠色,屬性值:紅色)。
ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
vi syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpCheckpoint: 100 10 olcSpSessionLog: 100 |
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
slave配置
同樣,在slave上也需要配置syncrepl,因為syncrepl實現的主從複製是單向的,即master的所有操作都會同步到slave上,slave無法同步到master上,為了避免master與slave上的資料不一致,slave上禁止對ldap資訊的增刪改操作,只允許查詢操作。因為是單向的,故slave需要一些master的認證資訊,以便從master同步資料
vi syncrepl.ldif
dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://192.168.56.149:389/ bindmethod=simple binddn="cn=Manager,c=cn" credentials=AHdms520 searchbase="c=cn" scope=sub schemachecking=on type=refreshAndPersist retry="5 5 300 +" attrs="*,+" interval=00:00:00:10 |
(這裡方便測試設定10秒同步)
注意:一定要注意字型的顏色和上面一致,provider,bindmethod …… interval都是olcSyncRepl的屬性值,不是與olcSyncRepl同級別,故其為紅色。
ldapadd -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif
測試
1. 檢視master/slave的監聽埠
yum installnet-tools -y (注:centos7 最小化安裝無netstat命令,需安裝)
netstat -tnlp | grep 389 (#master)
netstat -tnlp| grep 389 (#slave)
2. slave 中檢視當前ldap使用者列表
ldapsearch -x -b 'cn=Manager,c=cn',就可以看到自動從master同步過來是資料
3. 在master新增/刪除使用者,確認是否同步。首先,在master上,準備增加使用者的ldif指令碼。
vi test.ldif
# create new # replace to your own domain namefor "dc=***,dc=***" section dn:uid=asiainfo,ou=Manager,c=cn objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: ASIAINFO sn: TEST userPassword: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI #ssha加密後的值: AHdms520 loginShell: /bin/bash uidNumber: 1612 gidNumber: 1612 homeDirectory: /test |
ldapadd -x -Dcn=Manager,c=cn -W -f test.ldif
在slave中檢視是否同步完成
ldapsearch -x-b ' cn=Manager,c=cn '|grep asiainfo
執行完命令提示的內容裡包含了uid=asiainfo:
也可以用客戶端軟體測試(這裡我使用的是ApacheDirectoryStudio)
到此表示主從同步完成。
參考: