1. 程式人生 > >Centos7 Openldap主從配置

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

objectClassinetOrgPerson

objectClassposixAccount

objectClassshadowAccount

cnASIAINFO

snTEST

userPassword{SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI  #ssha加密後的值: AHdms520

loginShell: /bin/bash

uidNumber1612

gidNumber1612

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)


到此表示主從同步完成。

參考: