如何在鏡像模式下使用 2 台主機配置 OpenLDAP

OpenLDAP 是由 OpenLDAP 項目開發的輕量級目錄訪問協議 (LDAP) 的免費開源實現。 換句話說,它是一種通過使用文件和目錄層次結構從一個集中位置管理相關信息的協議。

它在某些方面以類似於關係數據庫的方式運行,可用於組織和存儲任何類型的信息。 LDAP 通常用於集中式身份驗證。 在本文中,我們將考慮在鏡像模式下使用兩個主機的 OpenLDAP 配置。

OpenLDAP 具有三個主要組件:

– slapd – 獨立的 LDAP 守護進程和相關的模塊和工具
– 實現 LDAP 協議和基本編碼規則的庫
– 客戶端軟件:ldapsearch、ldapadd、ldapdelete 等。

在我們開始之前

LDAP 是一種 Internet 協議,電子郵件和其他程序使用該協議從服務器查找聯繫信息。 它在 OpenLDAP 公共許可下發布,可用於所有主要 Linux 發行版、AIX、Android、HP-UX、OS X、Solaris、Windows 和 z/OS。

LDAP 不僅限於存儲信息,它還用作“單點登錄”的後端數據庫,其中用戶的一個密碼在多個服務之間共享。 在本教程中,我們將在 CentOS 6.8 上安裝和配置 OpenLDAP 以及鏡像模式複制。

1) Openldap 安裝

在 CentOS 和 RedHat 上,使用 yum install 如下圖所示,安裝 openldap 相關的包。

yum -y install openldap openldap-servers openldap-clients

-y 標誌 – 如果出現提示,則假設是
openldap-servers – 這是主要的 LDAP 服務器
openldap-clients – 這包含所有必需的 LDAP 客戶端實用程序
openldap – 此包包含 LDAP 支持庫

筆記: 對於 Web UI,您需要安裝 phpldapadmin 包。 我們假設機器上已經安裝了 httpd 守護進程。 如果沒有,請安裝它以訪問 Web UI。

phpLDAPadmin(也稱為 PLA)是一個基於 Web 的 LDAP 客戶端。 它為您的 LDAP 服務器提供簡單、隨處可訪問的多語言管理。

其分層樹查看器和高級搜索功能使瀏覽和管理 LDAP 目錄變得直觀。 由於它是一個 Web 應用程序,因此此 LDAP 瀏覽器可在許多平台上運行,從而可以從任何位置輕鬆管理您的 LDAP 服務器。

總而言之,phpLDAPadmin 是 LDAP 專業人士和新手的完美 LDAP 瀏覽器。 它的用戶群主要由 LDAP 管理專業人員組成。 要安裝它,您需要運行以下命令:

yum -y install phpldapadmin

2) LDAP 配置

首先,我們將更新 /etc/openldap/ldap.conf 文件。 ldap.conf 配置文件用於設置在運行 ldap 客戶端時應用的系統範圍的默認值。 用戶可以在他們的主目錄中創建一個可選的配置文件,ldaprc 或 .ldaprc,用於覆蓋系統範圍的默認文件。

對於基本設置,我們只需要更改 2 個參數:BASE 和 URI。 您可以在方便時使用任何編輯器。 在這 example 我們將使用vi。

vi /etc/openldap/ldap.conf
BASE dc=example,dc=com
URI ldap://localhost

BASE – 指定在執行 ldap 操作時使用的默認基本 DN。 必須將基本名稱指定為 LDAP 格式的專有名稱。

URI – 指定 LDAP 庫應連接到的 LDAP 服務器的 URI。 URI 方案可以是 ldap、ldaps 或 ldapi 中的任何一個,它們分別指的是 LDAP over TCP、LDAP over SSL (TLS) 和 LDAP over IPC(Unix 域套接字)。 每個服務器的名稱都可以指定為域樣式名稱或 IP 地址文字。 或者,服務器的名稱後面可以跟一個“:”和 LDAP 服務器正在偵聽的端口號。 如果未提供端口號,則使用方案的默認端口(ldap:// 為 389,ldaps:// 為 636)。 對於 LDAP over IPC,name 是 socket 的名稱,不需要端口,也不允許。 接下來,我們需要將 slapd.conf.obsolete 文件複製到 /etc/openldap/ 目錄。

稍後,我們將更新此文件。

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

slapd.conf 文件包含三種類型的配置信息:全局、後端特定和數據庫特定。 首先指定全局信息,然後是與特定後端類型相關聯的信息,然後是與特定數據庫實例相關聯的信息。 全局指令可以在後端和/或數據庫指令中被覆蓋,後端指令可以被數據庫指令覆蓋。
以“#”字符開頭的空行和註釋行將被忽略。 如果一行以空格開頭,則認為它是前一行的延續(即使前一行是註釋)。

注意:此步驟是可選的。

似乎越來越多的 OpenLDAP 建議是使用 DB_CONFIG 優先於其他配置屬性或 slapd.conf 指令。 在可能的情況下,在每個指令中都會註明。

關於是否使用 DB_CONFIG 文件的決定很簡單 – 如果您關心性能,請使用它。 如果你不在乎 – 忘記它。 但是,如果您選擇不使用 DB_CONFIG,則必須使用檢查點指令。 越來越多的 OpenLDAP 建議似乎是使用 DB_CONFIG 而不是通過 slapd.conf 傳遞參數。

cp /usr/share/openldap-servers/DB_CONFIG.example /etc/openldap/DB_CONFIG

然後,我們需要使用 slappasswd 命令生成我們的 LDAP 根密碼。 只需運行:

slappasswd

Slappasswd 用於生成適合使用的 userPassword 值 ldap修改, 配置文件 rootpw 配置指令或 slapd 配置 olcRootPW 配置指令。 運行命令並提示輸入密碼後,您將看到 SSHA 密碼。 我們將通過本文使用這個 root 密碼。 因此,請記下這一點並將其放在一邊。

現在,我們需要使用您剛剛生成的 DN 和密碼修改 /etc/openldap/slapd.conf 文件。 基本上,將有 2 行需要您的域名:

vi /etc/openldap/slapd.conf

導航到“數據庫定義”部分並使用您的 DN 更新後綴和 rootdn,並在 rootpw 旁邊粘貼完整的 SSHA 密碼

suffix "dc=example,dc=com"
rootdn "cn=manager,dc=example,dc=com"
rootpw {SSHA}gHuk69PP7Hxh4mglbRdkg47GQrfBhlt6

下一步,我們將修改 /etc/phpldapadmin/config.php 文件以訪問 Web GUI。 請找到以下行並按如下方式更新它們:

// $servers->setValue('login','attr','dn');
$servers->setValue('login','attr','uid');
→
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

這裡我們指定了登錄時要使用的屬性。默認情況下,phpLDAPadmin 將搜索 uid=username(如果您以用戶名登錄)。 如果您將其留空或像我們剛才那樣指定“dn”,phpLDAPadmin 將使用完整的 DN(我們在 slapd.conf 中提供)。

另外,請取消註釋以下行並添加 IP 地址:

$servers->setValue('server','host','127.0.0.1');

訪問 phpLDAPadmin Web UI 需要做的最後一件事是更新 /etc/httpd/conf.d/phpldapadmin.conf 文件以列出允許連接到 Web UI 的 IP 地址。 默認情況下,該文件應如下所示:

#
# Web-based tool for managing LDAP servers
#
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1

如果沒有,請按照上述說明進行更新。

3) 測試和運行

請運行以下命令集以執行配置的完整測試:

rm -rf /etc/openldap/slapd.d/*
chown -R ldap. /etc/openldap/slapd.d/
chown -R ldap. /var/lib/ldap/
slaptest -u 
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

如果測試運行成功,請繼續下一步 – 啟用 LDAP 以在系統啟動和 LDAP 服務啟動時自動啟動服務

chkconfig slapd on
service httpd restart 
service slapd restart

您可以使用 netstat 命令驗證 LDAP 是否正在運行:

netstat -antup | grep -i 389

現在,我們需要在 LDAP 中創建一些對象。 請使用以下內容創建多個 .ldif 文件:

Organization.ldif
dn: dc=example,dc=com
dc: corp
o: corp
objectclass: dcObject
objectclass: organization

Department.ldif 
dn: ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: hadoop

Groups.ldif
dn: ou=groups,ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: groups

System_admin.ldif
dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com
cn: system_admin
gidnumber: 502
memberuid: admin1
memberuid: admin2
objectclass: posixGroup
objectclass: top

Users.ldif
dn: ou=users,ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: users

Admin1.ldif
dn: uid=admin1,ou=users,ou=department,dc=example,dc=com
cn: admin1
gidnumber: 502
givenname: Admin1
homedirectory: /home/users/admin1
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Admin1
uid: admin1
uidnumber: 5001
userpassword: password

Admin2.ldif
dn: uid=admin2,ou=users,ou=department,dc=example,dc=com
cn: admin2
gidnumber: 502
givenname: Admin2
homedirectory: /home/users/admin2
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Admin2
uid: admin2
uidnumber: 5002
userpassword: password

現在,您需要通過為每個文件運行以下命令將這些對象添加到您的 LDAP 服務器:

ldapadd -x -W -D “cn=manager,dc=example,dc=com” -f

4) 鏡像模式複制

鏡像模式是一種混合配置,它提供了單主複製的所有一致性保證,同時也提供了多主複製的高可用性。 在鏡像模式下,兩個提供程序被設置為相互複製(作為多主配置),但使用外部前端將所有寫入定向到兩個服務器中的一個。 如果第一個提供者崩潰,則第二個提供者將僅用於寫入,此時前端將切換到將所有寫入定向到第二個提供者。 當崩潰的提供程序被修復並重新啟動時,它將自動趕上正在運行的提供程序上的任何更改並重新同步。

鏡像模式的參數

為目錄寫入(副本句柄讀取)提供高可用性 (HA) 解決方案。
只要有一個提供程序在運行,就可以安全地接受寫入。
提供者節點相互複製,因此它們始終是最新的並且可以準備接管(熱備用)。
Syncrepl 還允許提供者節點在任何停機時間後重新同步。

反對鏡像模式的論據

鏡像模式不是所謂的多主解決方案。 這是因為一次只能寫入一個鏡像節點。
鏡像模式可以稱為 Active-Active Hot-Standby,因此需要外部服務器(代理模式下的 slapd)或設備(硬件負載均衡器)來管理當前處於活動狀態的提供程序。
備份的管理方式略有不同。

在我們啟動鏡像模式之前,您需要在另一台主機上執行本文提供的相同安裝和配置步驟(除了帶有 *.ldif 的部分,所有對象將在鏡像模式設置後復制); 我們稱它為——從屬主機。

在從主機上成功安裝和配置 LDAP 後,您需要更新主(第一個配置的主機)的 /etc/openldap/slapd.conf 文件,如下所示:

一個。 取消註釋 modueload syncprov.la
灣將以下配置添加到文件中:

##### Mirror Mode
serverID    001

# Consumer
syncrepl rid=001
provider=ldap://slave.example.com
bindmethod=simple
binddn="cn=manager,dc=example,dc=com"
credentials="slave_userPassword_from_slappasswd"
searchbase="dc=example,dc=com"
attrs="*,+"
type=refreshAndPersist
interval=00:00:01:00
retry="60 +"
# Provider
overlay syncprov
syncprov-checkpoint 50 1
syncprov-sessionlog 50

mirrormode on

然後,您需要更新 slaves /etc/openldap/slapd.conf 如下:

一個。 取消註釋 moduleload syncprov.la
灣在文件末尾添加如下配置:

##### Mirror Mode
serverID    002

# Consumer
syncrepl rid=001
provider=ldap://master.example.com
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials="master_userPassword_from_slappasswd"
searchbase="dc=example,dc=com"
attrs="*,+"
type=refreshAndPersist
interval=00:00:01:00
retry="60 +"
# Provider
overlay syncprov
syncprov-checkpoint 50 1
syncprov-sessionlog 50

mirrormode on

而已! 請使用提供的命令集運行完整測試並檢查您的 slaves 對象。

結論

您現在將擁有一個目錄體系結構,它提供單主複製的所有一致性保證,同時還提供多主複製的高可用性。 真的很簡單; 每個鏡像模式節點的設置完全相同,除了 serverID 是唯一的,並且每個消費者都指向另一個服務器。