本指南提供有關如何在 Rocky Linux 8 上安裝和設置 OpenLDAP 的分步教程。如果您在這裡,您已經知道什麼是 OpenLDAP 服務器,因此解釋它超出了本教程的範圍。
在 Rocky Linux 8 上安裝和設置 OpenLDAP
好吧,Rocky Linux 8 存儲庫沒有最新版本的 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 存儲庫提供的wiretiger。
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
在 Rocky Linux 8 上安裝和設置 OpenLDAP
在 Rocky Linux 8 上編譯 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
接下來,在 Rocky Linux 8 上編譯 OpenLDAP。
make
如果您有時間和耐心,您可以運行測試套件並查看您的 OpenLDAP 構建中是否有任何錯誤。 但是你可以跳過這一步.
make test
在 Rocky Linux 8 上安裝 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
.
在 Rocky Linux 8 上配置 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 文件是從 Lullabot github 存儲庫中提取的。
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 數據庫
編輯 SLAPD LDIF 文件並 /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
- 要根據上述 SLAPD LDIF 文件中提供的信息更新 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.
在 Rocky Linux 8 上配置 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
重啟 rsyslog
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
在下面的根 DN ldif 文件中。
替換域組件。 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 和組 ID。在本指南中,我們創建了一個綁定 DN。 system
請注意上面根 DN 中定義的與此 ou 關聯的訪問控制。
列出數據庫訪問控制列表。
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
(389UDP/TCP) 什麼時候 ldaps
(636 UDP/TCP) 服務到防火牆。
firewall-cmd --add-service={ldap,ldaps} --permanent
firewall-cmd --reload
測試 OpenLDAP 身份驗證
幹得好。 您已經學習瞭如何在 Rocky Linux 8 上安裝和設置 OpenLDAP 服務器。
為確保用戶可以通過 OpenLDAP 服務器實際連接到您的系統,您需要在遠程系統上配置 OpenLDAP 客戶端。
請參閱下面的指南。
在 Rocky Linux 8 上為 LDAP 身份驗證配置 SSSD
在 pfSense 中配置 Squid 代理 OpenLDAP 身份驗證
為 OpenLDAP 密碼到期配置電子郵件通知
配置基於 OpenVPN LDAP 的身份驗證