OpenLDAP 系列4 --- 安裝


一、概要

1. 承上啟下

Open LDAP 系列

2. 基礎環境

(1) CentOS 7.9

(2) Open LDAP 2.4.44

3. 解決依賴

(1) EPEL

RHEL 安裝 EPEL

(2) OpenSSL或GnuTLS

Open LDAP 客戶端和服務端要求安裝OpenSSL、GnuTLS或MozNSS,CentOS 7已經自帶了OpenSSL和GnuTLS。

a. OpenSSL

rpm -qa | grep openssl

b. GunTLS

rpm -qa | grep gnutls

(3) SASL (Simple Authentication and Security Layer)

OpenLDAP客戶端和服務端軟件需要安裝Cyrus SASL庫來提供簡單身份驗證和安全服務。CentOS 7已經自帶了Cyrus SASL庫:

rpm -qa | grep sasl

(4) Kerberos

Kerberos是一個網絡認證協議,ldap官方推薦的兩種實現軟件是Heimdal(https://www.h5l.org/)和MIT(http://web.mit.edu/kerberos/www/),CentOS 7自帶MIT實現:

rpm -qa | grep krb

(5) 數據庫

Open LDAP 自帶了LMDB(Lightning Memory-Mapped Database),無需單獨安裝數據庫。

(6) 查詢版本

rpm -qa | grep ldap

不建議用以下命令卸載舊版本

rpm -e openldap-2.4.44-15.e17_5.x86_64

因為對Open LDAP有依賴的軟件實在是太多了(如下圖),盲目卸載可能會導致系統崩潰

(7) Rocky Linux 9

對於RL9,需要OpenLDAP在'plus'倉庫中,默認是關閉狀態的,所以首先需要開啟該倉庫:

sudo dnf config-manager --set-enabled plus
sudo dnf repolist

二、安裝與配置

1. 安裝

Open LDAP安裝分為兩種方式,RPM包安裝或者編譯安裝,前者簡單方便而且有現成的服務可用,后者優勢是版本較新,建議使用第一種方式。

在我寫這篇文章的時候,Open LDAP的最新的Release版本為2.6.3,最新的LTS版本為2.5.1,但yum repository里提供的最新版本是2.4.44。

yum install openldap openldap-servers openldap-clients -y

openldap-clients包含ldapadd和ldapmodify等命令,在配置環節是必要的。

(2) slapd服務

sudo systemctl start slapd
sudo systemctl enable slapd
systemctl status slapd

(3) 防火牆

sudo firewall-cmd --add-service={ldap,ldaps} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

2. 配置框架

Open LDAP的配置以樹狀結構存儲在Open LDAP數據庫中,這些節點的配置文件以ldif格式存儲在/etc/openldap/slapd.d目錄下。

(1) cn=config是根節點用於全局性配置,它的配置文件是/etc/openldap/slapd.d/cn=config.ldif,其結構如下:

dn: cn=config
objectClass: olcGlobal
cn: config
<global config settings>

(2) cn=module{0},cn=config用於配置動態模塊,它的配置文件位於/etc/openldap/slapd.d/cn=config目錄下,其結構如下:

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: /usr/local/lib/smbk5pwd.la

dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/local/lib:/usr/local/lib/slapd
olcModuleLoad: accesslog.la
olcModuleLoad: pcache.la

(3) cn=schema,cn=config用於schema配置,它的配置文件位於/etc/openldap/slapd.d/cn=config目錄下,其結構如下:

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
<system schema>

dn: cn={X}core,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {X}core
<core schema>

(4) olcDatabase={X}<typeA>,cn=config用於配置數據庫,它的配置文件位於/etc/openldap/slapd.d/cn=config目錄下,其結構如下:

dn: olcDatabase={X}<typeA>,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {X}<typeA>
<database-specific settings>

3. 配置

(1) 創建目錄,用於存儲配置文件

mkdir ~/ldap

(2) 管理密碼

a. 生成密碼

slappasswd

如下圖所示,運行該命令后會生成一個密碼,該密碼會在后續的配置中繼續使用:

b. 新建rootPassword.ldif文件:

vi ~/ldap/rootPassword.ldif

將下方olcRootPW的值替換成剛才生成SSHA密碼並復制到rootPassword.ldip文件中:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD_CREATED

將管理員密碼存儲到LDAP目錄中:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f rootPassword.ldif

執行之后會有如下提示:

(3) 導入schema

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

重啟

sudo systemctl restart slapd

(4) 數據庫

從2.4版本開始,Open LDAP已經將之前常用的BDB(Berkeley DB)設置為過時(deprecated)狀態並推薦使用LMDB(Lightning Memory-Mapped Database)。

a. 新建mdb.ldif文件:

vi ~/ldap/mdb.ldif

b. 替換下方文本中olcRootPW的值和example,復制替換后的文本到mdb.ldip文件中:

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcDbMaxsize: 1073741824
olcRootPW: {SSHA}Password
olcDbIndex: objectClass eq
olcDbIndex: ou,cn,mail,surname,givenname eq olcLastMod: TRUE olcMonitoring: TRUE olcDbEnvFlags: writemap olcDBNoSync: TRUE
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,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=example,dc=com" write by * read

c. 添加配置:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f mdb.ldif

d. 清理HDB

sudo rm -rf /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

(5) monitor

a. 新建monitor.ldif

vi ~/ldap/monitor.ldif

b. 初始化

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=example,dc=com" read by * none

注意將example替換成自己的域名;

c. 修改配置

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif

(6) 測試配置

sudo slaptest -u

(7) 重啟服務

sudo systemctl restart slapd

4. 初始化數據

(1) 新建data.ldif

vi ~/ldap/data.ldif

(2) 初始化

dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example

dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Admin

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

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: People

 (3) 添加數據

sudo ldapadd -Y EXTERNAL -x -D "cn=admin,dc=example,dc=com" -W -f data.ldif

sudo ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f data.ldif

5. 測試

(1) 匿名登錄測試

默認情況下Open LDAP是支持匿名登錄和查詢的,所以我們可以通過匿名的方式來查看我們剛才添加的數據:

ldapsearch -x -H ldap://127.0.0.1:389 -b 'ou=People,dc=example,dc=com'

查詢成功會返回DN為"ou=Group,dc=example,dc=com"本身和它全部子節點的詳細信息,如果返回invalid credentials(49)則說明有問題,可以添加-d 5參數來輸出詳細信息。

(2) 登錄后測試

假設我們在"ou=People,dc=example,dc=com"下面創建了若干員工,且為員工分配了密碼,那么我們可以通過以下命令測試我們添加的數據:

ldapsearch -x -H ldap://127.0.0.1:389 -D uid=<<用戶名>>,ou=People,dc=example,dc=com -w <<密碼>> -b cn=admin,dc=example,dc=com

關於ldapsearch命令請參考官方文檔 https://www.mkssoftware.com/docs/man1/ldapsearch.1.asp, 我這里簡單解釋一下上面的參數:

-x 表示使用簡單身份驗證而不是SASL;

-H 是LDAP服務的地址和端口;

-D 是bindDN(需要綁定DN),這里可以理解為用戶名,注意這里的用戶名是"uid=<<用戶名>>,ou=People,dc=example,dc=com",假設員工的uid是zhangsan,那么這里的參數是"uid=zhangsan,ou=People,dc=example,dc=com";

-w 是用戶的密碼,注意不是root password(雖然你可以用root password但這明顯是強烈不建議的);

-b 是baseDN,是你要查詢的東西,這里我們查詢“cn=admin,dc=example,dc=com”這個節點;

我們務必要區分bindDN和baseDN。

6. objectClass

objectClass之於LDAP就像數據表結構與關系型數據庫的關系類似,針對不同的角色,我建議使用以下ObjectClass:

頂層:top + dcObject + organization

二層:organizationalUnit

系統管理員:organizationalRole

Group:groupOfNames

People:inetOrgPerson

Device(Server,打印機): device + shadowAccount + ipHost(可選)

三、卸載與清理

1. 卸載

yum remove openldap-clients openldap-servers -y

2. 清空目錄

rm -rf /etc/openldap/slapd.d
rm -rf /var/lib/ldap

四、參考

1. 官方

https://www.openldap.org/doc/admin24/

https://www.openldap.org/doc/admin24/slapdconf2.html

https://www.openldap.org/doc/admin26/backends.html#Monitor

2. 安裝

(1) CentOS 7

https://www.tecmint.com/install-openldap-server-for-centralized-authentication/

https://linuxhostsupport.com/blog/how-to-install-ldap-on-centos-7/

https://www.cnblogs.com/swordfall/p/12119010.html

(2) Rocky Linux 9

https://www.howtoforge.com/how-to-install-openldap-on-rocky-linux-9/

3. MDB

https://www.openldap.org/doc/admin24/backends.html#LMDB

https://stackoverflow.com/questions/24407788/openldap-switch-to-mdb-backend-memory-mapped-database


免責聲明!

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



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