我們將通過概述一些LDAP基礎知識(它是什麼,它在哪裡使用以及為什麼使用)來開始本文,並展示如何設置LDAP伺服器並配置客戶端以使用Red Hat Enterprise Linux 7系統對其進行身份驗證。

正如我們將看到的,還有其他幾種可能的應用場景,但在本指南中,我們將完全專注於基於LDAP的身份驗證。另外,請記住,由於這個主題的廣泛性,我們這裡只涵蓋了基礎知識,但您可以參考摘要中概述的文檔以獲取更深入的細節。
基於同樣的原因,您將注意到我決定為了簡潔起見而省略了幾個LDAP工具的man頁引用,但相應的解釋只是一指之遙(例如man ldapadd)。
話雖如此,讓我們開始吧。
我們的測試環境
我們的測試環境包括兩個RHEL 7系統:
Server: 192.168.0.18. FQDN: rhel7.mydomain.com Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
如果您希望,您可以使用安裝了Kickstart的機器作為客戶端,該機器在第12部分中:自動化RHEL 7安裝中已安裝。
LDAP是什麼?
LDAP代表輕量級目錄訪問協定,是一組協定,允許客戶端通過網絡訪問集中存儲的信息(例如登錄shell目錄、家目錄的絕對路徑以及其他典型的系統用戶信息等),這些信息應該從不同地方訪問或對大量終端用戶可用(另一個例子可能是公司所有員工的家庭地址和電話號碼目錄)。
集中保留這樣的(以及更多)信息意味著可以更容易地由所有被授權使用的人維護和訪問。
以下圖表提供了LDAP的簡化圖,下面將詳細描述:

詳細解釋上述圖表。
- LDAP目錄中的條目代表單個信息單元,通過所謂的區別名稱進行唯一標識。
- 屬性是與條目相關的信息片段(例如地址、可用聯繫電話號碼和電子郵件地址)。
- 每個屬性被分配一個或多個值,這些值構成一個以空格分隔的列表。每個條目的唯一值稱為相對區別名稱。
話雖如此,讓我們繼續進行伺服器和客戶端安裝。
安裝和配置LDAP伺服器和客戶端
在 RHEL 7 中,LDAP 是通过 OpenLDAP 实现的。要安装服务器和客户端,请分别使用以下命令:
# yum update && yum install openldap openldap-clients openldap-servers # yum update && yum install openldap openldap-clients nss-pam-ldapd
安装完成后,我们需要查看一些内容。除非另有说明,以下步骤应仅在服务器上执行:
1. 确保 SELinux 不会妨碍操作,通过持久性地启用以下 布尔值,在服务器和客户端上都要这样做:
# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
其中 allow_ypbind 是为了 LDAP 身份验证,而 authlogin_nsswitch_use_ldap 可能会被一些应用程序所需要。
2. 启用并启动服务:
# systemctl enable slapd.service # systemctl start slapd.service
请注意,您也可以使用 systemctl 来禁用、重新启动或停止服务:
# systemctl disable slapd.service # systemctl restart slapd.service # systemctl stop slapd.service
3. 由于 slapd 服务以 ldap 用户身份运行(您可以通过 ps -e -o pid,uname,comm | grep slapd 进行验证),因此此用户应拥有 /var/lib/ldap 目录,以便服务器能够修改仅作为 root 用户运行的管理工具创建的条目(稍后会详细说明)。
在递归更改此目录的所有权之前,将 slapd 的示例数据库配置文件复制到其中:
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap
4. 设置一个 OpenLDAP 管理员用户并分配密码:
# slappasswd
如下图所示:

並建立一個LDIF檔案(ldaprootpasswd.ldif),內容如下:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD
其中:
- PASSWORD是先前獲得的雜湊字串。
- cn=config表示全域設定選項。
- olcDatabase表示特定的資料庫實例名稱,通常可以在/etc/openldap/slapd.d/cn=config內找到。
參考先前提供的理論背景,ldaprootpasswd.ldif
檔案將在LDAP目錄中新增一個條目。在那個條目中,每行代表一個屬性:值對(其中dn、changetype、add和olcRootPW是屬性,而每個冒號右邊的字串是它們對應的值)。
在接下來的進一步操作中,您可能希望記住這一點,並請注意我們在本文章的其餘部分都使用相同的通用名稱(cn=)
,其中每個步驟都依賴於前一個步驟。
5.現在,通過指定URI來添加對應的LDAP條目,該URI指向ldap伺服器,只允許協議/主機/埠欄位。
# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
輸出應該類似於:

並從/etc/openldap/schema
目錄導入一些基本的LDAP定義:
# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6.讓LDAP使用您的網域在其資料庫中。
建立另一個LDIF檔案,我們將稱之為ldapdomain.ldif
,內容如下,根據您的網域(在Domain Component dc=中)和密碼進行適當替換:
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=Manager,dc=mydomain,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
然后按照以下步骤加载:
# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. 現在是時候向我們的 LDAP 目錄添加一些項目了。屬性和值在以下文件中用冒号(:)
分隔,我們將其命名為baseldapdomain.ldif
:
dn: dc=mydomain,dc=com objectClass: top objectClass: dcObject objectclass: organization o: mydomain com dc: mydomain dn: cn=Manager,dc=mydomain,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=mydomain,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=mydomain,dc=com objectClass: organizationalUnit ou: Group
將這些項目添加到 LDAP 目錄:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. 創建一個名為ldapuser的 LDAP 用戶(adduser ldapuser),然後在ldapgroup.ldif
中創建 LDAP 群組的定義。
# adduser ldapuser # vi ldapgroup.ldif
添加以下內容。
dn: cn=Manager,ou=Group,dc=mydomain,dc=com objectClass: top objectClass: posixGroup gidNumber: 1004
其中gidNumber是/etc/group中 ldapuser 的 GID),然後加載它:
# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. 添加一個包含用戶 ldapuser 的定義的 LDIF 文件(ldapuser.ldif
):
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldapuser uid: ldapuser uidNumber: 1004 gidNumber: 1004 homeDirectory: /home/ldapuser userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M loginShell: /bin/bash gecos: ldapuser shadowLastChange: 0 shadowMax: 0 shadowWarning: 0
然後加載它:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

同樣,您可以刪除剛剛創建的用戶項目:
# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. 允許通過防火牆通信:
# firewall-cmd --add-service=ldap
11. 最後,但同樣重要的是,啟用客戶端使用 LDAP 進行身份驗證。
為了幫助我們完成這最後一步,我們將使用authconfig實用工具(用於配置系統身份驗證資源的接口)。
使用以下命令,在對 LDAP 服務器的身份驗證成功後,如果所請求的用戶的主目錄不存在,則將創建它:
# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

總結
在本文中,我們已經解釋了如何設置基本身份驗證以對抗 LDAP 伺服器。若要進一步配置本指南中描述的設置,請參閱 RHEL 7 系統管理員指南中的第 13 章 – LDAP 配置,特別注意使用 TLS 的安全設置。
如有任何問題,請使用下方的評論表格提出。
Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/