centos7 openldap雙主部署


參考地址:https://www.shangmayuan.com/a/59d7536bdeb643e5bd82404b.html

一.安裝OpenLDAP

yum install openldap openldap-clients openldap-servers
安裝完直接啟動
```
systemctl start  slapd
```
設置管理員密碼 ```

slappasswd -h {SSHA}    
    ```

而后會讓你輸入一個明文密碼,返回給你一個加密的密碼,記住這個返回的密碼

使用ldapsearch命令查詢管理員的dn:php

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config "olcRootDN=cn=Manager,dc=my-domain,dc=com"  dn olcRootDN olcRootPW

這里返回的dn是olcDatabase={2}hdb,cn=config,密碼等信息也都一並返回。這里有用的是dn和密碼的加密方式,好比這里是SSHA,dn是后面修改的Entry DN,而知道密碼的加密方式就可使用該加密方式生成新密碼。java

使用ldapmodify修改條目node

vim chrootpw.ldif 
#這是第1步獲取的管理員dn
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
#你想要改為的域名的后綴
olcSuffix: dc=xinniu,dc=com
#olcSuffix這幾行必定要加,不然修改以后會出錯,后面重啟openldap都會失敗

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
#你想要改為的域名
olcRootDN: cn=admin,dc=xinniu,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
#這里就是剛才保存下來的那個加密后的密碼
olcRootPW: {SSHA}uYnICxla0NrUC5b/ha4i1JeOTCoUchV+

如圖:
Ldap雙主模式+keepalived實現ldap高可用apache

使用下面的命令來修改管理員條目:vim

ldapmodify -Y EXTERNAL -H ldapi:/// -f  chrootpw.ldif 

若是出現:api

modifying entry "olcDatabase={2}bdb,cn=config"

導入基本數據結構
咱們須要向 LDAP 中導入一些基本的 Schema。這些 Schema 文件位於 /etc/openldap/schema/ 目錄中,schema控制着條目擁有哪些對象類和屬性bash

ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif

開啟ldap日志服務器

mkdir -p /var/log/slapd
chown ldap:ldap /var/log/slapd/
touch /var/log/slapd/slapd.log
chown ldap . /var/log/slapd/slapd.log
echo "local4.* /var/log/slapd/slapd.log" >> /etc/rsyslog.conf

到此就設定好了管理員的密碼。能夠用客戶端去管理openldap了數據結構

打算使用phpldapadmin來管理openldap,這個工具使用的人較多,網上文檔多,出現問題容易解決。app

二.安裝phpldapadmin(ldap管理工具)

首先安裝Apache和PHP:

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

而后安裝phpldapadmin:

 yum -y install phpldapadmin

httpd與phpldapadmin進行集成:
修改配置文件:

[root@localhost ~]# vim /etc/phpldapadmin/config.php
#397行取消注釋,398行添加注釋
    $servers->setValue('login','attr','dn');
    // $servers->setValue('login','attr','uid');

這里須要修改,若是不修改,phpldapadmin會去用uid去搜索條目,不會用dn去搜索,致使報密碼錯誤。
[root@localhost ~]# phpldapadmin的ip過濾規則默認是拒絕全部ip訪問,先去修改一下規則,咱們才能夠訪問

vim /etc/httpd/conf.d/phpldapadmin.conf

##這是Apache2.2和之前的修改方法
// 修改配置

把下面的Deny from all 改成Allow from all

##這是apache2.4和之后的修改方法

#容許172.16.10.16訪問
Require ip 172.16.10.16
#容許172.16這個網段訪問
Require ip 172.16.0.0/16
#容許全部ip訪問
Require all granted

咱們能夠根據本身須要修改來
修改完以后啟動:

    systemctl restart httpd

界面:
Ldap雙主模式+keepalived實現ldap高可用

登錄
用戶名,默認是 cn=Manager,dc=my-domain,dc=com(這個也能夠改的,仿照修改密碼的步驟)
密碼就輸入剛開始設置的密碼

登錄進去后,個人管理界面報這個信息:
This base cannot be created with PLA
顯示結果以下:
Ldap雙主模式+keepalived實現ldap高可用

通過查詢,緣由是根結點須要初始化后才能使用,最終處理以下:

一、建立一個initroot.ldif文件,為建立初始化根節點作准備工做,以下所示:
dn: dc=xinniu,dc=com
#域名的后綴
o: ldap
objectclass: dcObject
objectclass: organization

Ldap雙主模式+keepalived實現ldap高可用

二、執行ldapadd -f initroot.ldif -x -D cn=admin,dc=xinniu,dc=com -W 輸入以前配置OpenLDAP的密碼后,便可完成建立LDAP根節點,以下圖所示:
Ldap雙主模式+keepalived實現ldap高可用
完成以上操做后,再回到phpldapadmin頁面,能夠看到,已經正常出現了根節點,並能夠建立相關OU、Group、Account等對象,以下圖所示:
Ldap雙主模式+keepalived實現ldap高可用

到這里就搭建好了一台openldap+phpldapadmin的服務器了,在另一台也按照此步驟操做搭建好另外一台。

三.配置雙主復制功能,在主1和主2上執行下面的步驟

ldap雙主復制功能的實現依賴於syncprov模塊,這個模塊位於/usr/lib64/openldap目錄下

1.mod_syncprov.ldif

[root@server1] vim mod_syncprov.ldif

# create new
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

導入配置

[root@server1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif

2.syncprov.ldif

[root@server1] vim syncprov.ldif

# create new
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

導入配置

[root@server1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif

在主1和主2上執行下面的步驟,只須要替換olcServerID和provider的值

[root@server1] ~/ldif$ vim master01.ldif

# create new
dn: cn=config
changetype: modify
replace: olcServerID
# specify uniq ID number on each server
olcServerID: 1
# 惟一值,主2上替換為2

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://basic-server-2:389/
    ##此處為主2服務器地址,主2此處相應地上替換為主1服務器地址
  bindmethod=simple
  binddn="cn=admin,dc=xinniu,dc=com"
  credentials=bigdata123!
    #管理員的明文密碼
  searchbase="dc=xinniu,dc=com"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

導入配置

root@SERVER ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f master01.ldif

四.驗證

這部完成以后,咱們在master1的管理界面上建立一個條目,再打開master2的管理界面,若是能夠看到咱們剛才建立的條目,那么就說明雙主已經配置成功了。

五.Keepalived搭建

1.安裝

#兩個節點都要操做
yum -y install keepalived
很簡單,一條命令就安裝好了

2.配置

#兩個節點都要操做
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

#node1的配置:
! Configuration File for keepalived
global_defs {
    notification_email {
       xhh@cmss.chinamobile.com
    }
   notification_email_from  root@cmss.chinamobile.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ldap_A   #節點標識
}

vrrp_script chk {
  script "/etc/keepalived/script/check-ldap-server.sh"
  interval 3
  weight -5
}

vrrp_instance VI_1 {
   state MASTER
   interface eth0             #使用的網卡為eth0
   virtual_router_id 150      #虛擬路由標識,兩個節點必須一致
   priority 100               #優先級,兩個節點的優先級高者為master
   nopreempt                  #不搶占
   advert_int 1
  authentication {
     auth_type PASS
     auth_pass 1111
  }
  virtual_ipaddress {
    172.18.22.88  #虛擬ip
  }
   notify_master "/etc/keepalived/script/to_master.sh"
   notify_backup "/etc/keepalived/script/to_backup.sh"
   notify_stop "/etc/keepalived/script/to_stop.sh"
   track_script {
      chk
   }
}
#node2的配置
! Configuration File for keepalived
global_defs {
    notification_email {
       xhh@cmss.chinamobile.com
    }
   notification_email_from  root@cmss.chinamobile.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ldap_B   #節點標識
}
vrrp_script chk {
  script "/etc/keepalived/script/check-ldap-server.sh >> /tmp/log/chk.log 2>&1"
  interval 3
  weight -5
}
vrrp_instance VI_1 {
   state BACKUP
   interface eth0             #使用的網卡為eth0
   virtual_router_id 150      #虛擬路由標識,兩個節點必須一致
   priority 98                #優先級
   nopreempt                  #不搶占
   advert_int 1
  authentication {
     auth_type PASS
     auth_pass 1111
  }
  virtual_ipaddress {
  172.18.22.88
  }
   notify_master "/etc/keepalived/script/to_master.sh"
   notify_backup "/etc/keepalived/script/to_backup.sh"
   notify_stop "/etc/keepalived/script/to_stop.sh"
   track_script {
      chk
   }
}

另外幾個腳本的內容(兩個節點一致)
check-ldap-server.sh:

#!/bin/bash
counter=$(ps -C slapd --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
   sudo systemctl start slapd
    sleep 2
    counter=$(ps -C slapd --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
    sudo systemctl stop keepalived
    fi
fi

/etc/keepalived/script/to_master.sh:

#!/bin/bash
sudo systemctl start slapd;
sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換為Active"

/etc/keepalived/script/to_backup.sh:

#!/bin/bash
sudo systemctl start slapd;
sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換為Backup"

/etc/keepalived/script/to_stop.sh:

#!/bin/bash
sh /etc/keepalived/script/send_email.sh "Ldap主備切換" "$(hostname)切換為Stop"

/etc/keepalived/script/send_email.sh:

#!/bin/bash
SUBJECT=$1
CONTENT=$2
echo "${CONTENT}"   |  mail  -s  "${SUBJECT}"  dongguashaorou@163.com

有一點須要注意,以上這幾個腳本,須要一個用戶來執行:keepalived_script,因此須要建立這個用戶,還要把這個用戶加到/etc/sudoers中,不然腳本中systemctl啟動slapd服務,壓根沒有權限,這個點網上的文檔都沒有提到,調試了一段時間才發現這個問題。其余的,若是發現腳本配置之后沒有生效,那么1.檢查keepalived.conf文件的格式,看是否出錯,2.腳本的輸出能夠重定向到文件,而后能夠發現問題。

前兩天搭建好了,今天開啟iptables防火牆后就有問題了:
1.兩個節點的虛擬ip不能飄移了,發生了腦裂,兩邊都有虛擬ip
2.其余節點能夠從真實ip訪問服務,可是沒法從虛擬ip訪問服務

折騰一番后發現要在2台真實節點的iptables配置(/etc/sysconfig/iptables)上面分別加上下面2行
-A INPUT -d 172.18.22.88(虛擬ip) -j ACCEPT
-A INPUT -p vrrp -j ACCEPT
以后重啟iptables,再重啟keepalived便可訪問服務

最后,后面發現阿里雲的機器上面用這個keepalive真的不太好使,不少節點上去telnet虛擬ip的端口會出現不通的狀況,就不打算用了,ldap的訪問量很小,是個比較穩定的服務,原本為了以防萬一,再引入新的問題還不如不用,最終仍是用了haproxy去作了個load balance,比這個還簡單多了。不過實際上keepalived和haproxy並非一個用途的東西,只是我以為服務也沒那么容易掛,最可靠的方案實際上是,haproxy和keepalived都用上,用keepalived去監控haproxy。

附上一下haproxy的部分配置
listen ldap :25001
mode tcp
option tcplog
balance leastconn
server ldap1 172.18.20.27:389 check
server ldap2 172.18.20.35:389 check

 

第二種方法:

參考地址:https://blog.csdn.net/fanren224/article/details/79707206

雙主原理:

雙主和主從的區別:

貌似生產環境中,用的比較多的是雙主模式。

安裝說明:

從OpenLDAP2.4.23版本開始所有配置數據都保存在slapd.d目錄下的cn=config文件夾中,不再使用slapd.conf作為配置文件
有兩種配置方式,一種是通過修改舊版配置文件slapd.conf,再用slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/導入到數據庫中,這種方式非常麻煩,不建議使用。
一種是通過編輯ldif文件,再用ldapadd命令導入到數據庫中,這種方式是動態配置,不需要重新啟動服務端slapd進程。
本文采用第二種方式,這種方式網上文檔比較少,不好弄,本人花了10幾天才算搞了個半懂,在這記錄下來,希望能給有需要的人一些幫助
如果非要使用第一種方法,centos7系統yum安裝后沒有slapd.conf.obsolete文件,可以選擇從centos6上復制過來
官方文檔: https://www.openldap.org/doc/admin24/slapdconf2.html

安裝環境

centos 7.3
ldap主1服務器:test1 192.168.255.124
ldap主2服務器:test2 192.168.255.125
OpenLDAP2.4.44
root賬號下執行所有命令
安裝步驟

在主1和主2都執行下面的步驟

1、安裝ldap

[root@test1] ~$ yum install openldap openldap-servers openldap-clients compat-openldap

#可以通過rpm -ql <package name>,來查看每個安裝包都有哪些文件
openldap: #OpenLDAP配置文件、庫和文檔
openldap-servers: #服務器進程及相關命令、遷移腳本和相關文件
openldap-clients: #客戶端進程及相關命令,用來訪問和修改 OpenLDAP 目錄
compat-openldap: #與主從配置相關

安裝過程中會自動創建ldap用戶和ldap組

$ grep ldap /etc/passwd
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin

$ grep ldap /etc/group
ldap:x:55:

2、 復制數據庫模板

[root@test1] ~$ cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

原來屬於root用戶,現在需要改為ldap用戶。

[root@test1] ~$ chown ldap. /var/lib/ldap/DB_CONFIG

3、啟動ldap,並設置為開機啟動。 ldap服務端進程名稱為slapd

[root@test1] ~$ systemctl enable slapd && systemctl start slapd && systemctl status slapd

查看進程,端口是389,默認情況下數據為明文傳輸,添加ssl配置后為密文數據傳輸后端口為636

[root@test1] /etc/openldap/slapd.d/cn=config$ netstat -tunlp |grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 62756/slapd
tcp6 0 0 :::389 :::* LISTEN 62756/slapd

#至於配置ssl先別急,等把基本的配置做完了再弄也不遲。

4、使用 slappasswd 命令生成密碼

生成密碼。將這個密碼作為管理員(admin)的密碼。

注意兩台機器的上明文密碼一樣,密文密碼不一樣。

[root@test1] ~$ slappasswd
New password:
Re-enter new password:
{SSHA}BXTlwAUMwVSgqHr0WlIEud3iu9ddjvQE

編寫 LDIF(一種LDAP 專用的數據交換格式)文件,並通過ldapadd命令將管理員密碼導入到 LDAP配置文件中。 這種方法乍看起來很麻煩很難,不過也是有規律的,寫幾個熟悉后並不是很難。

[root@test1] ~$ vim chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}BXTlwAUMwVSgqHr0WlIEud3iu9ddjvQE

導入

[root@test1] ~$ ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

5、導入基本數據結構

我們需要向 LDAP 中導入一些基本的 Schema。這些 Schema 文件位於 /etc/openldap/schema/ 目錄中,schema控制着條目擁有哪些對象類和屬性

[root@test1] /etc/openldap/schema$ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

[root@test1] /etc/openldap/schema$ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

[root@test1] /etc/openldap/schema$ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
6、配置 LDAP 的根域(以 dc=baidu,dc=com 為例)及其管理域:

注意:

用你自己的域名代替dc=***,dc=***語句塊。

olcRootPW字段的值是你上面生成的admin密碼的密文。兩台機器使用各自的密文密碼。

[root@test1] ~$ vim chdomain.ldif
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=admin,dc=baidu,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=baidu,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=baidu,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}BXTlwAUMwVSgqHr0WlIEud3iu9ddjvQE

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=baidu,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=badiu,dc=com" write by * read
導入

[root@test1] ~$ ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"
7、在上述基礎上,我們來創建一個叫做 baidu company 的組織

並在其下創建一個 admin 的組織角色(該組織角色內的用戶具有管理整個 LDAP 的權限)和 People 和 Group 兩個組織單元:

[root@test1] ~$ vim basedomain.ldif
dn: dc=baidu,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Baidu Company
dc: baidu

dn: cn=admin,dc=baidu,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=baidu,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=baidu,dc=com
objectClass: organizationalRole
cn: Group

[root@test1] ~$ ldapadd -x -D cn=admin,dc=baidu,dc=com -W -f basedomain.ldif
Enter LDAP Password: #輸入上面設置的管理員密碼(明文)
adding new entry "dc=baidu,dc=com"

adding new entry "cn=admin,dc=baidu,dc=com"

adding new entry "ou=People,dc=baidu,dc=com"

adding new entry "ou=Group,dc=baidu,dc=com"

通過以上的所有步驟,我們就設置好了一個 LDAP 目錄樹:其中基准 dc=baidu,dc=com 是該樹的根節點,其下有一個管理域 cn=admin,dc=baidu,dc=com 和兩個組織單元 ou=People,dc=baidu,dc=com 及 ou=Group,dc=baidu,dc=com。

兩台機器上都安裝網頁端管理工具phpldapadmin

這里把網頁端安裝好,可以方便我們后面驗證命令行端的操作是否成功。

安裝步驟在這里 https://blog.csdn.net/fanren224/article/details/80532268

接下來,我們來創建一個叫作tom 的員工並將其分配到 ops組來驗證上述配置是否生效。

[root@test1] ~$ vim ldapuser.ldif
dn: uid=tom,ou=People,dc=baidu,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: tom
cn: tom
sn: tom
userPassword: {SSHA}i62EIL9tklQjQJvO8PrxEyGVidSUL8Fq (這個密文密碼需要先用slappasswd生成)
uidNumber: 1100
gidNumber: 1100
homeDirectory: /home/tom

dn: cn=ops,ou=Group,dc=baidu,dc=com
objectClass: posixGroup
cn: ops
gidNumber: 1100
memberUid: ops

[root@test1] ~$ ldapadd -x -D cn=admin,dc=baidu,dc=com -W -f ldapuser.ldif
Enter LDAP Password: (這里輸入的是管理員密碼)
adding new entry "uid=tom,ou=People,dc=baidu,dc=com"

adding new entry "cn=ops,ou=Group,dc=baidu,dc=com"

網頁端上查看下是否新建成功


除了在網頁端查看條目,我們也可以使用 ldapsearch 命令來查看 LDAP 目錄服務中的所有條目信息:

[root@test1] ~$ ldapsearch -x -b "dc=baidu,dc=com" -H ldap://127.0.0.1

在test2上查的話是,把127.0.0.1換成test1的ip地址
[root@test1] ~$ ldapsearch -x -b "dc=baidu,dc=com" -H ldap://127.0.0.1
刪除條目

ldapdelete -x -W -D 'cn=admin,dc=baidu,dc=com' "uid=tom,ou=People,dc=baidu,dc=com"
1
在網頁端查看下是否已經刪除成功。如下。可以看到只刪除了用戶,用戶組還在的。


至此兩台ldap主服務器端配置並驗證完成。

注意:要先配置好兩台ldap主服務器端。

二、配置雙主復制功能,在主1和主2上執行下面的步驟

ldap雙主復制功能的實現依賴於syncprov模塊,這個模塊位於/usr/lib64/openldap目錄下

[root@test1] ~/ldif$ vim mod_syncprov.ldif
# create new
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

[root@test1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"
[root@test1] ~/ldif$ vim syncprov.ldif
# create new
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

[root@test1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
在主1和主2上執行下面的步驟,只需要替換olcServerID和provider的值

也可參考地址:https://blog.51cto.com/xiaofengfeng/1930191

注意:在主1服務器上配置:olcServerID:1,provider:配置主2的地址

           在主2服務器上配置:olcServerID:2,provider:配置主1的地址

[root@test1] ~/ldif$ vim master01.ldif
# create new
dn: cn=config
changetype: modify
replace: olcServerID
# specify uniq ID number on each server
olcServerID: 1

#唯一值,主2上替換為2

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://192.168.255.125:389/
bindmethod=simple
binddn="cn=admin,dc=baidu,dc=com"
credentials=123456
searchbase="dc=baidu,dc=com"
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
導入配置

[root@test1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f master01.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
至此雙主配置完成。

在配置完成之后,我們必須要做的一件事,就是測試一下是否配置成功。

三、測試驗證

你可以在機器上通過命令來測試,也可以通過在網頁端來測試。

命令驗證方式

在主1上進行測試

1) 在test1機器上添加一個test用戶,然后分別在兩個節點上進行查詢操作,test.ldif參考上文。

[root@test1 ~]# ldapadd -x -D "cn=admin,dc=baidu,dc=com" -W -f test.ldif

adding new entry "uid=test,ou=People,dc=baidu,dc=com"
在test1上查看是否添加成功

指定主1的ip
[root@test1] ~$ ldapsearch -x -b "dc=baidu,dc=com" -H ldap://192.168.255.124|grep uid=test
dn: uid=test,ou=People,dc=baidu,dc=com

指定主2的ip
[root@test1] ~$ ldapsearch -x -b "dc=baidu,dc=com" -H ldap://192.168.255.125|grep uid=test
dn: uid=test,ou=People,dc=baiduu,dc=com
2)在test1上執行命令刪除test用戶,然后分別在兩個節點上進行查詢操作

[root@test1 ~]# ldapdelete -x -D "cn=admin,dc=baidu,dc=com" -W "uid=test,ou=People,dc=baidu,dc=com"
查詢

[root@test1 ~]# ldapsearch -x -b "dc=baidu,dc=com" -H ldap://192.168.255.124|grep uid=test

[root@test1 ~]# ldapsearch -x -b "dc=baidu,dc=com" -H ldap://192.168.255.125|grep uid=test
網頁端驗證方式

在http://192.168.255.124/ldapadmin 添加用戶,在http://192.168.255.125/ldapadmin上刷新一下,看能不能顯示出來。

至此雙主模式部署並驗證完成

參考文章:

https://www.server-world.info/en/note?os=CentOS_7&p=openldap&f=1
https://arthurdejong.org/nss-pam-ldapd/

其他補充:

如何配置ldap客戶端綁定兩台ldap主服務器?

authconfig --ldapserver=192.168.255.124,192.168.255.125 --update
這是啥意思?為啥要綁定兩台主服務器?打個比方

不綁定的話,你執行下面的命令,只對本機上的ldap服務器操作。 綁定了之后,就相當於一次性對兩台服務器都操作。

ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM