本指南提供有關如何在 RockyLinux8 上安裝和設置 OpenLDAP 的分步教程。如果您在這裡,您已經知道什麼是 OpenLDAP 服務器,因此該解釋超出了本教程的範圍。
在 RockyLinux8 上安裝和設置 OpenLDAP
RockyLinux8 存儲庫沒有最新版本的 OpenLDAP。
基於 Rocky Linux 8 的存儲庫提供的 OpenLDAP 可用版本是 OpenLDAP Server v2.4.46。
dnf provides openldap
openldap-2.4.46-16.el8.i686 : LDAP support libraries Repo : baseos Matched from: Provide : openldap = 2.4.46-16.el8 openldap-2.4.46-16.el8.x86_64 : LDAP support libraries Repo : @System Matched from: Provide : openldap = 2.4.46-16.el8 openldap-2.4.46-16.el8.x86_64 : LDAP support libraries Repo : baseos Matched from: Provide : openldap = 2.4.46-16.el8
要獲得帶有錯誤修復的最新版本,您需要按照本指南中的說明從源代碼構建。
執行系統更新
要更新系統包,請運行以下命令:
dnf update
安裝所需的依賴項和構建工具
從源代碼成功構建和編譯 OpenLDAP 需要大量依賴項和構建工具。執行以下命令進行安裝。
dnf install cyrus-sasl-devel make libtool autoconf libtool-ltdl-devel openssl-devel libdb-devel tar gcc perl perl-devel wget vim
安裝 EPEL-7 存儲庫提供的 Wiredtiger。
cat > /etc/yum.repos.d/epel-release-7.repo << 'EOF'
[epel-release-7]
name=Extra Packages for Enterprise Linux 7 - x86_64
baseurl=https://dl.fedoraproject.org/pub/epel/7/x86_64/
enabled=0
gpgcheck=0
EOF
dnf --enablerepo=epel-release-7 install wiredtiger wiredtiger-devel
創建 OpenLDAP 系統帳戶
在這個演示中,OpenLDAP 作為非特權系統用戶運行。因此,運行以下命令來創建具有自定義用戶和組 ID 的 OpenLDAP 系統用戶。
useradd -r -M -d /var/lib/openldap -u 55 -s /usr/sbin/nologin ldap
諮詢 man useradd
上面使用的命令行選項的描述。
下載 OpenLDAP 源代碼壓縮包
在撰寫本文時,OpenLDAP 的最新穩定版本是 OpenLDAP 2.5.5。但是,由於某種原因,無法使用密碼策略編譯此版本。 !!
因此,本教程使用 OpenLDAP 2.4.59。因此,請轉到 OpenLDAP 下載頁面並獲取 tarball。
VER=2.4.59
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-$VER.tgz
提取 OpenLDAP 源代碼存檔
可以通過執行命令來提取 tarball。
tar xzf openldap-$VER.tgz
在 RockyLinux8 上安裝和設置 OpenLDAP
在 RockyLinux8 上編譯 OpenLDAP
要在 Rocky Linux 8 上編譯 OpenLDAP,您必須首先運行配置腳本以使 OpenLDAP 適應您的系統,並在繼續安裝之前檢查任何缺少的依賴項。
cd openldap-$VER
在構建 OpenLDAP 時,您可以使用配置腳本來啟用或禁用各種選項。
./configure --prefix=/usr --sysconfdir=/etc --disable-static --enable-debug --with-tls=openssl --with-cyrus-sasl --enable-dynamic --enable-crypt --enable-spasswd --enable-slapd --enable-modules --enable-rlookups --enable-backends=mod --disable-ndb --disable-sql --enable-ppolicy --enable-syslog --enable-overlays=mod
有關配置選項的更多信息,請參閱。
./configure --help
如果配置腳本成功完成,您看到的最後一行是:
Please run "make depend" to build dependencies
正如這條線所說,你必須做 make depend
用於構建 OpenLDAP 依賴項的命令。
make depend
接下來,在 RockyLinux8 上編譯 OpenLDAP。
make
如果您有時間和耐心,您可以運行測試套件來查看您的 OpenLDAP 構建是否沒有錯誤。 但是,您可以跳過此步驟..
make test
在 RockyLinux8 上安裝 OpenLDAP
如果 OpenLDAP 編譯成功,運行命令繼續安裝。
make install
OpenLDAP 配置文件安裝在 /etc/openldap
..
ls -1 /etc/openldap/
DB_CONFIG.example
ldap.conf
ldap.conf.default
schema
slapd.conf
slapd.conf.default
slapd.ldif
slapd.ldif.default
該庫安裝在 /usr/libexec/openldap
..
RockyLinux8 上的 OpenLDAP 設置
現在您已經安裝了 OpenLDAP,繼續進行配置。
創建 OpenLDAP 數據和數據庫目錄
mkdir /var/lib/openldap /etc/openldap/slapd.d
為 OpenLDAP 目錄和配置文件設置正確的所有權和權限。
chown -R ldap:ldap /var/lib/openldap
chown root:ldap /etc/openldap/slapd.conf
chmod 640 /etc/openldap/slapd.conf
創建 OpenLDAP Systemd 服務
要將 OpenLDAP 作為服務運行,您需要創建一個 systemd 服務文件,如下所示。
cat > /etc/systemd/system/slapd.service << 'EOL' [Unit] Description=OpenLDAP Server Daemon After=syslog.target network-online.target Documentation=man:slapd Documentation=man:slapd-mdb [Service] Type=forking PIDFile=/var/lib/openldap/slapd.pid Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///" Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d" ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS [Install] WantedBy=multi-user.target EOL
保存服務文件並退出。 現在不要運行服務..
創建 OpenLDAP SUDO 架構
使用支持配置 LDAP sudo
首先,確保您安裝的 sudo 版本支持 LDAP。
sudo -V | grep -i "ldap"
如果 sudo 支持 LDAP,您將看到以下行:
... ldap.conf path: /etc/sudo-ldap.conf ldap.secret path: /etc/ldap.secret
確保啟用了 LDAP sudo 模式。
rpm -ql sudo | grep -i schema.openldap
/usr/share/doc/sudo/schema.OpenLDAP
複製 schema.OpenLDAP
切換到架構目錄。
cp /usr/share/doc/sudo/schema.OpenLDAP /etc/openldap/schema/sudo.schema
接下來,您需要創建一個 sudo 架構 ldif 文件。運行以下命令來創建它 sudo.ldif
文檔。此 ldif 文件取自 Lullabotgithub 存儲庫。
cat << 'EOL' > /etc/openldap/schema/sudo.ldif dn: cn=sudo,cn=schema,cn=config objectClass: olcSchemaConfig cn: sudo olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) ) EOL
更新 OpenLDAP SLAPD 數據庫
編輯 SLAPDLDIF 文件。 /etc/openldap/slapd.ldif
並更新如下:
mv /etc/openldap/slapd.ldif /etc/openldap/slapd.ldif.bak
cat > /etc/openldap/slapd.ldif << 'EOL' dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/lib/openldap/slapd.args olcPidFile: /var/lib/openldap/slapd.pid dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/libexec/openldap olcModuleload: back_mdb.la include: file:///etc/openldap/schema/core.ldif include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/nis.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/sudo.ldif include: file:///etc/openldap/schema/ppolicy.ldif dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: frontend olcAccess: to dn.base="cn=Subschema" by * read olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none dn: olcDatabase=config,cn=config objectClass: olcDatabaseConfig olcDatabase: config olcRootDN: cn=config olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none EOL
- 要根據上述 SLAPDLDIF 文件中提供的信息更新 SLAPD 數據庫,請使用:
slapadd
帶選項的命令-n 0
創建第一個數據庫。 - 指定配置目錄
/etc/openldap/slapd.d
使用選項-F
和選項-l
指定上述 LDIF 文件的位置。
在將更改寫入數據庫之前,運行一次試運行以查看會發生什麼。經過 -u
slapadd 命令的選項。
slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif -u
命令輸出如下所示:
_#################### 100.00% eta none elapsed none fast!
如果一切順利,請實施更改。
slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif
此命令創建以下 slapd 數據庫配置 /etc/openldap/slapd.d
目錄。
ls /etc/openldap/slapd.d
'cn=config' 'cn=config.ldif'
設置用戶和組的所有權 /etc/openldap/slapd.d
目錄和其中的文件被傳遞給 ldap 用戶。
chown -R ldap:ldap /etc/openldap/slapd.d
運行 SLAPD 服務
重新加載 systemd 配置,以便可以啟動和運行 OpenLDAP 服務。
systemctl daemon-reload
systemctl enable --now slapd
檢查狀態。
systemctl status slapd
● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/etc/systemd/system/slapd.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2021-06-19 12:17:43 EAT; 19s ago Docs: man:slapd man:slapd-mdb Process: 153713 ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 153714 (slapd) Tasks: 2 (limit: 11389) Memory: 3.0M CGroup: /system.slice/slapd.service └─153714 /usr/libexec/slapd -u ldap -g ldap -h ldap:/// ldapi:/// ldaps:/// -F /etc/openldap/slapd.d Jun 19 12:17:43 localhost.localdomain systemd[1]: Starting OpenLDAP Server Daemon... Jun 19 12:17:43 localhost.localdomain slapd[153713]: @(#) $OpenLDAP: slapd 2.5.5 (Jun 19 2021 11:30:55) $ [email protected]:/root/openldap-2.5.5/servers/slapd Jun 19 12:17:43 localhost.localdomain slapd[153714]: slapd starting Jun 19 12:17:43 localhost.localdomain systemd[1]: Started OpenLDAP Server Daemon.
在 RockyLinux8 上設置 OpenLDAP 日誌
允許 OpenLDAP 記錄連接、操作和結果統計信息,創建和 ldif 文件,以及更新數據庫,如下所示。在日誌級別啟用此類 OpenLDAP 日誌記錄 256
帶關鍵字 stats
通過改變 olcLogLevel
屬性是:
cd ~
cat > enable-openldap-log.ldif << 'EOL'
dn: cn=config
changeType: modify
replace: olcLogLevel
olcLogLevel: stats
EOL
ldapmodify -Y external -H ldapi:/// -f enable-openldap-log.ldif
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config "(objectClass=olcGlobal)" olcLogLevel -LLL -Q
dn: cn=config
olcLogLevel: stats
設置 Rsyslog 以便 OpenLDAP 可以記錄到特定文件。默認情況下,OpenLDAP 登錄到 local4
機構。
echo "local4.* /var/log/slapd.log" >> /etc/rsyslog.conf
重啟系統日誌
systemctl restart rsyslog
您現在應該能夠讀取 LDAP 日誌。 /var/log/slapd.log
..
為 OpenLDAP 創建默認路由 DN
接下來,創建一個定義根 DN 和訪問控制列表的 MDB 數據庫。
首先,生成一個根 DN 密碼。
slappasswd
New password: ENTER PASSWORD Re-enter new password: RE-ENTER PASSWORD {SSHA}OH74PoJJKTsYIEg75iuwGk0OKbJ8y/BD
將上面生成的密碼哈希粘貼為值 olcRootPW
它位於下面的根 DNldif 文件中。
替換域組件和 dc=ldapmaster,dc=kifarunix-demo,dc=com
使用適當的名稱。
cat > rootdn.ldif << 'EOL' dn: olcDatabase=mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: mdb olcDbMaxSize: 42949672960 olcDbDirectory: /var/lib/openldap olcSuffix: dc=ldapmaster,dc=kifarunix-demo,dc=com olcRootDN: cn=admin,dc=ldapmaster,dc=kifarunix-demo,dc=com olcRootPW: {SSHA}OH74PoJJKTsYIEg75iuwGk0OKbJ8y/BD olcDbIndex: uid pres,eq olcDbIndex: cn,sn pres,eq,approx,sub olcDbIndex: mail pres,eq,sub olcDbIndex: objectClass pres,eq olcDbIndex: loginShell pres,eq olcDbIndex: sudoUser,sudoHost pres,eq olcAccess: to attrs=userPassword,shadowLastChange,shadowExpire by self write by anonymous auth by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by dn.subtree="ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com" read by * none olcAccess: to dn.subtree="ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none olcAccess: to dn.subtree="dc=ldapmaster,dc=kifarunix-demo,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by users read by * none EOL
了解有關 OpenLDAP 訪問控制 ACL 的更多信息。
slapd 數據庫已在上面更新。
ldapadd -Y EXTERNAL -H ldapi:/// -f rootdn.ldif
命令輸出示例;
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"
使用 SSL / TLS 設置 OpenLDAP
要保護客戶端和服務器之間的 OpenLDAP 通信,請將其配置為使用 SSL/TLS 證書。
在本指南中,它是一個自簽名證書。在生產環境中,您可以選擇從首選 CA 獲取商業簽名和可信證書。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/ldapserver.key -out /etc/pki/tls/ldapserver.crt
chown ldap:ldap /etc/pki/tls/{ldapserver.crt,ldapserver.key}
更新 OpenLDAP 服務器上 TLS 證書的屬性。
cat > add-tls.ldif << 'EOL' dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/pki/tls/ldapserver.crt - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/pki/tls/ldapserver.key - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/pki/tls/ldapserver.crt EOL
請注意,我們對證書和 CA 證書都使用自簽名證書。
ldapadd -Y EXTERNAL -H ldapi:/// -f add-tls.ldif
您可以通過運行來檢查這一點。
slapcat -b "cn=config" | grep olcTLS
olcTLSCACertificateFile: /etc/pki/tls/ldapserver.crt olcTLSCertificateKeyFile: /etc/pki/tls/ldapserver.key olcTLSCertificateFile: /etc/pki/tls/ldapserver.crt
更改 CA 證書的位置 /etc/openldap/ldap.conf
..
vim /etc/openldap/ldap.conf
... #TLS_CACERT /etc/pki/tls/cert.pem TLS_CACERT /etc/pki/tls/ldapserver.crt
創建基於 OpenLDAP 的 DN
然後創建一個基礎 DN 或搜索基礎來定義組織結構和目錄。
相應地替換域組件和組織單位。
cat > basedn.ldif << 'EOL' dn: dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: dcObject objectClass: organization objectClass: top o: Kifarunix-demo dc: ldapmaster dn: ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: organizationalUnit objectClass: top ou: groups dn: ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: organizationalUnit objectClass: top ou: people EOL
ldapadd -Y EXTERNAL -H ldapi:/// -f basedn.ldif
創建 OpenLDAP 用戶帳戶
您可以將用戶添加到 OpenLDAP 服務器。創建一個 ldif 文件來定義用戶,如下所示。
cat > users.ldif << 'EOL' dn: uid=johndoe,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: johndoe cn: John sn: Doe loginShell: /bin/bash uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/johndoe shadowMax: 60 shadowMin: 1 shadowWarning: 7 shadowInactive: 7 shadowLastChange: 0 dn: cn=johndoe,ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: posixGroup cn: johndoe gidNumber: 10000 memberUid: johndoe EOL
將用戶添加到 OpenLDAP 數據庫。
ldapadd -Y EXTERNAL -H ldapi:/// -f users.ldif
為 LDAP 用戶設置密碼
要為上述用戶設置密碼,請運行以下命令:
ldappasswd -H ldapi:/// -Y EXTERNAL -S "uid=johndoe,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"
創建 OpenLDAP 綁定 DN 並綁定 DN 用戶
綁定的 DN 用戶用於執行 LDAP 操作,例如解析用戶和組 ID。在本指南中,我們創建了一個名為 system
..請注意與此 ou 關聯的訪問控制,如上面在根 DN 中定義的那樣。
列出數據庫上的訪問控制列表。
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase={1}mdb)' olcAccess
創建 BindDN 用戶密碼。
slappasswd
New password: Password Re-enter new password: Password {SSHA}1s+ndOUpf7dzQvH3z7BJoJLOkRJRIHvX
粘貼上面的密碼哈希如下 userPassword
以下文件的屬性。
cat > bindDNuser.ldif << 'EOL' dn: ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: organizationalUnit objectClass: top ou: system dn: cn=readonly,ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: organizationalRole objectClass: simpleSecurityObject cn: readonly userPassword: {SSHA}1s+ndOUpf7dzQvH3z7BJoJLOkRJRIHvX description: Bind DN user for LDAP Operations EOL
ldapadd -Y EXTERNAL -H ldapi:/// -f bindDNuser.ldif
在防火牆上允許 OpenLDAP 服務
允許遠程客戶端查詢 OpenLDAP 服務器 ldap
(389 UDP/TCP) 什麼時候 ldaps
防火牆上的 (636 UDP/TCP) 服務。
firewall-cmd --add-service={ldap,ldaps} --permanent
firewall-cmd --reload
測試 OpenLDAP 身份驗證
好吧,你要去。 您學習瞭如何在 RockyLinux8 上安裝和設置 OpenLDAP 服務器。
要驗證用戶是否可以通過 OpenLDAP 服務器實際連接到系統,您需要在遠程系統上配置 OpenLDAP 客戶端。
請參閱下面的指南。
在 RockyLinux8 上為 LDAP 身份驗證配置 SSSD
使用 pfSense 配置 SquidProxyOpenLDAP 身份驗證
OpenLDAP 密碼過期電子郵件通知設置
配置基於 OpenVPN LDAP 的身份驗證