Linux中國

RHCSA 系列(十四): 在 RHEL 7 中設置基於 LDAP 的認證

RHCSA 系列:設置 LDAP 伺服器及客戶端認證 – Part 14

正如你將看到的那樣,關於認證,還存在其他可能的應用場景,但在這篇指南中,我們將只關注基於 LDAP 的認證。另外,請記住,由於這個話題的廣泛性,在這裡我們將只涵蓋它的基礎知識,但你可以參考位於總結部分中列出的文檔,以此來了解更加深入的細節。

基於相同的原因,你將注意到:為了簡潔起見,我已經決定省略了幾個位於 man 頁中 LDAP 工具的參考,但相應命令的解釋是近在咫尺的(例如,輸入 man ldapadd)。

那還是讓我們開始吧。

我們的測試環境

我們的測試環境包含兩台 RHEL 7機器:

Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

如若你想,你可以使用在 RHCSA 系列(十二): 使用 Kickstart 完成 RHEL 7 的自動化安裝 中使用 Kickstart 安裝的機子來作為客戶端。

LDAP 是什麼?

LDAP 代表 輕量級目錄訪問協議 Lightweight Directory Access Protocol ,並包含在一系列協議之中,這些協議允許一個客戶端通過網路去獲取集中存儲的信息(例如所登錄的 shell 的路徑,家目錄的絕對路徑,或者其他典型的系統用戶信息),而這些信息可以從不同的地方訪問到或被很多終端用戶獲取到(另一個例子是含有某個公司所有僱員的家庭地址和電話號碼的目錄)。

對於那些被賦予了許可權可以使用這些信息的人來說,將這些信息進行集中管理意味著可以更容易地維護和獲取。

下面的圖表提供了一個簡化了的關於 LDAP 的示意圖,在下面將會進行更多的描述:

LDAP 示意圖

LDAP 示意圖

下面是對上面示意圖的一個詳細解釋。

  • 在一個 LDAP 目錄中,一個 條目 entry 代表一個獨立單元或信息,被所謂的 區別名 DN,Distinguished Name 唯一識別。
  • 一個 屬性 attribute 是一些與某個條目相關的信息(例如地址,有效的聯繫電話號碼和郵箱地址)。
  • 每個屬性被分配有一個或多個 value ,這些值被包含在一個以空格為分隔符的列表中。每個條目中那個唯一的值被稱為一個 相對區別名 RDN,Relative Distinguished Name

接下來,就讓我們進入到有關伺服器和客戶端安裝的內容。

安裝和配置一個 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

正如下一幅圖所展示的那樣:

設置 LDAP 管理密碼

設置 LDAP 管理密碼

然後以下面的內容創建一個 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 為屬性,每個冒號右邊的字元串為相應的鍵值)。

隨著我們的進一步深入,請記住上面的這些,並注意到在這篇文章的餘下部分,我們使用相同的 通用名 Common Names (cn=),而這些餘下的步驟中的每一步都將與其上一步相關。

5. 現在,通過特別指定相對於 ldap 服務的 URI ,添加相應的 LDAP 條目,其中只有 protocol/host/port 這幾個域被允許使用。

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif

上面命令的輸出應該與下面的圖像相似:

LDAP 配置

LDAP 配置

接著從 /etc/openldap/schema 目錄導入一個基本的 LDAP 定義:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

LDAP 定義

LDAP 定義

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

LDAP 域名配置

LDAP 域名配置

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

添加 LDAP 域名,屬性和鍵值

添加 LDAP 域名,屬性和鍵值

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 是 ldapuser 在 /etc/group 中的 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

LDAP 用戶配置

LDAP 用戶配置

相似地,你可以刪除你剛剛創建的用戶條目:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. 允許有關 ldap 的通信通過防火牆:

# firewall-cmd --add-service=ldap

11. 最後,但並非最不重要的是使用 LDAP 開啟客戶端的認證。

為了在最後一步中對我們有所幫助,我們將使用 authconfig 工具(一個配置系統認證資源的界面)。

使用下面的命令,在通過 LDAP 伺服器認證成功後,假如請求的用戶的家目錄不存在,則將會被創建:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

LDAP 客戶端認證

LDAP 客戶端認證

總結

在這篇文章中,我們已經解釋了如何利用一個 LDAP 伺服器來設置基本的認證。若想對當前這個指南里描述的設置進行更深入的配置,請參考位於 RHEL 系統管理員指南里的 第 13 章 – LDAP 的配置,並特別注意使用 TLS 來進行安全設定。

請隨意使用下面的評論框來留下你的提問。

via: http://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/

作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國