伺服器架設篇 - RockyLinux 9

第十一章、使用 LDAP 統一管理帳號

企業當中電腦的帳號應該都是相同的,這時,透過統一管理的身份驗證伺服器來管理,應該是個比較合理的作法!

最近更新時間: 2024/04/22

如果在企業的環境中有多部系統,每部系統裡面的用戶都相同,那麼是否每部系統都需要建立這批帳號呢? 如果是每部系統獨立建立這些帳號,未來需要新增、移除、修改帳號的任務時,可能會造成許多的困擾。因此,統一將帳號密碼放置在一部系統上, 就會是比較正統的作法!過去 Linux 常見的帳號密碼管理機制,大概使用 NIS,不過近來為了跨平台管理,大多使用 LDAP 機制管理!達成 LDAP 機制的軟體非常多,我們在這個章節中,主要介紹 FreeIPA 這套軟體喔!

11.1、LDAP 簡介

在企業內部,每個員工應該有專屬的帳號與密碼,包括用於公司內部的 email 位址、登入工作站的身份驗證等等。這些帳號密碼的管理機制, 大多使用輕量級目錄服務 (Lightweight Directory Access Protocol, LDAP),這個 LDAP 協定的主要功能在『目錄服務 (directory service)』。 底下我們先來談談什麼是 LDAP,尤其是很重要的 LDIF 文件內容~還有關於領域 (domain) 的設定等等,之後實際設定 LDAP 的伺服器軟體時, 大家才能比較清楚的了解,那個是什麼東西~

11.1.1、身份識別與檔案系統間的關係

以電腦教室為例,如果讓每個學生全部都以同一個帳號登入 (例如很多學校都會用 student 當登入帳號), 那麼學生在座位上面的調整就會比較沒有彈性,因為他們得要將自己的作業資料放置到該電腦的本地端目錄,或者是學生自己的 USB 磁碟機。 那,如果課程是有延續性質的,學生就得要坐到前一次上課的座位,否則就無法取得上次操作的環境與檔案。 因此,許多電腦教室或辦公室,可能都會提供一個檔案伺服器來給學生或員工掛載使用,例如底下的圖示,就是以 NFS 服務來提供檔案系統的範例:

圖 11.1.1、用一台檔案伺服器,統一提供企業內部所有系統的應用
圖 11.1.1、用一台檔案伺服器,統一提供企業內部所有系統的應用

不過檔案系統也是需要驗證的,否則所有人都可以讀取任何人的檔案資料,那就天下大亂了!因此就需要有身份驗證系統才行。 所以,我們也才能夠透過身份驗證系統登入每一部主機,這樣在出問題時,也比較好查詢到到底是那一位學生或員工惡意使用所造成的問題, 比較好釐清責任歸屬囉。

總結說明身份識別與檔案系統間的關係就是:在一組或一間伺服器機房內,所有的伺服器均需要使用同一組帳號與密碼來登入, 並取得相同家目錄時,就需要這樣的設備需求。此種狀況常見的環境有:

  • 在大型數值模式模擬中,經常需要跨不同的運算節點 (computing node) 來操作,以讓一個模擬的工作,可以透過多台高性能的系統共同運作, 以期待快速達成模式運算的結果。因為每台 node 都需要讀取相同的檔案系統 (連檔名都要相同),且操作的程序 (process) 也需要相同的帳號 (連同 UID/GID 最好都相同),因此,在這些運算節點中,每部系統的帳號以及檔案系統,就都得要同步才行。
  • 在崑山資傳系操作電腦教室的電腦時,所有的電腦均可以使用你的學號登入,並且可以取得你的個人桌面與額外的三個檔案系統 (是檔案系統,不是檔案而已喔!)。因此在資傳系上課時,你可以在五間電腦教室的任何一間,使用相同的帳密登入,並可取得前一次上課的桌面與工作家目錄。 所以如果對當前的座位不滿意,可以立刻換座位,也不會影響到你的正常操作。

再次強調該功能就得要有兩個元件:

  • 使用身份識別功能:就是 ID 認證的服務。常見的服務有: NIS, LDAP, AD(windows), Kerboros...
  • 使用者家目錄的取得:就是個人檔案資料。常見的服務有: NFS, SMB(網芳), AD(windows)...

以純粹 linux 的伺服器環境來說,最容易設定的其實是 NIS 與 NFS 兩者的搭配,不過 NIS 對於 windows 的支援較差,所以如果考量到未來的系統規劃, 建議是可以使用跨平台的 LDAP 來取代 NIS 作為身份識別系統較佳。至於檔案系統方面,雖然 SAMBA 才是預設可以提供跨平台的檔案系統, 不過在運作的效能方面,還是以 NFS 較為強大,因此作為純 Linux Server 的環境來說,當然首選還是使用 NFS 的。 在這個章節中,我們主要介紹 LDAP 協定的應用,其他檔案系統資料,將於後續章節介紹囉!

11.1.2、LDAP 節點與資料的組成

如前所述,LDAP 全名: Lightweight Directory Access Protocol,主要的功能在於『目錄服務 (directory service)』的提供!什麼是『目錄服務』呢? 從 wiki 上的說明來看,目錄服務指的是:

目錄服務是一個儲存、組織和提供資訊存取服務的軟體系統,在軟體工程中,一個目錄是指一組名字和值的對映。 它允許根據一個給出的名字來尋找對應的值,與詞典相似。 像詞典中每一個詞也許會有多個詞義,在一個目錄中,一個名字也許會與多個不同的資訊相關聯。 類似地,就像一個詞會有多個不同的發音和多個不同的詞義,目錄中的一個名字可能會有多個不同類型的值。

目錄也許只提供範圍非常小的節點類型和數值類型,也可能對任意的或可延伸的一組類型提供支援。在一個電話目錄中,節點就是姓名而數值項就是電話號碼。 在DNS中,節點是域名而數值項是IP位址(還有別名,郵件伺服器名等等)。 在一個網路作業系統的目錄中,節點是那些由作業系統所管理的資源,包括用戶、電腦、印表機和其它共享資源。

簡單的說,就是你可以提供一個查詢的資料對應的內容,舉例來說,你可以提供一個『帳號名稱』, 而在這個帳號名稱底下給予對應了密碼、UID、GID、真實姓名等資訊,若用戶端使用帳號名稱來查詢目錄服務,則可以得到該帳號的密碼、 UID等等資訊就是了。而且目錄服務還不只提供這些資料,你想要額外增加什麼節點都可以!所以用途相當廣泛。

  • LDAP 的組成

基本上,你就將 LDAP 想成是一個目錄,而每個目錄都有個目錄名稱,然後根據不同需求,可以給予更多的目錄節點。 至於目錄的內容,則根據目錄的定義來給予鄉對應的內容就是了。至於目錄的節點還是需要根據不同的層級給予不同的設定才行。 單純以節點的角度來看,以一個公司名稱為『 example.com 』的位置來說,該公司的相關部門位置節點有點像這樣:

圖 11.1.2-1、LDAP 組成示意圖(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)
圖 11.1.2-1、LDAP 組成示意圖(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)

如上所示,公司底下有兩個部門 (organization unit),一個是伺服器部門 (Servers) 一個是人資部門 (People) , 其中人資部門底下管理著員工證號 (Person, udid),大概就是這樣一層一層的分配下來~而每一個節點底下可以搭配不同的資料給予特別的任務就是了。 而如果是不同部門的相似架構呢?則可以用底下圖示來說明:

圖 11.1.2-2、各部門分不同群組的設計方式(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)
圖 11.1.2-2、各部門分不同群組的設計方式(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)

在公司 (company.com) 內部的兩大部門 (location1, location2) 個別提供了各自的帳號密碼管理機制之類的,可以再細分下去之意。 因此,只要找尋不同的 location 即可取得各自部門的人資訊息。

在比較學理的組成說明如下:

  1. 可以提供非關聯性的資料庫環境,而每一筆資料則透過判別名稱 (distinguished name, DN) 來提示定義。 例如上圖的 Organization unit 可以分別是兩者無關的部門 (People 與 Servers 明顯就是不同且無關的部門定義)
  2. 每一個組織均需要定義最頂層的判別名稱,就被稱為 baseDN,這也是整個 LDAP 系統最先要設定的項目。 例如上圖的『 dc=exmpale,dc=com 』以及底下的『 dc=company,dc=com 』都是所謂的 baseDN !你可以猜測在組織 (Organization) 那一層的名稱, 就是 baseDN 的意思了。
  3. 每一筆查詢資料稱為 DN (Distinguished Name),而 DN 就是呼叫出目錄節點的位置所在。 例如上面提到的 baseDN 就是一例。他的展現方式就是『 dc=exmaple,dc=com 』,從小範圍寫起直到最頂層 (dc=com) 為止。 事實上,DN 的展示方式其實有點像 DNS,不過需要使用 dc, ou, cn 等來進行名稱的指定。dc (domain component) 一般用在公司或最頂層 DN 的設定, ou (organization unit) 一般用在大部門的設定上, cn (common name) 一般用在非上述兩個用途的其他應用上。
  4. 每個 baseDN 底下還有附屬組織單位,那就是 organization unit 的概念。例如人事部門可以使用類似: 『 dn: ou=People,dc=example,dc=com 』之類的方式來命名。而該 DN 底下就會有多種屬性定義!這些屬性定義就牽涉到每一個 LDAP 的用途為何。
  5. 因為 LDAP 僅是一個『目錄服務』的提供者,但這些目錄底下資料的定義使用的功能為何,就是透過預先定義的綱要檔 (Schema) 來定義。 舉例來說, Linux 與 Windows 的帳號所需要的項目並不相同,因此使用 LDAP 作為 Linux 的帳號認證來源時,就得要使用 LDAP 提供的 Linux 帳號所需綱要檔 (schema)

如果是比較簡單理解的方式來說的話,你有沒有發現,上面的圖示非常非常像是目錄樹系統 (directory tree)!哈哈!沒錯, 你就將 LDAP 的組成結果想成是目錄樹,而最頂天的節點就是根目錄,接下來的每個節點就是各自的子目錄。那跟關聯性資料庫 (SQL) 有啥不同呢? 你就這樣想,每個節點 (目錄) 裡面的內容,都可以隨便你新增任何資料!這就大大的增加了資料的可擴充性了!

  • 什麼是 LDIF

如前所述,在 LDAP 的架構下,我們將每筆紀錄都稱為一個 DN,最頂天的 DN 我們稱為 baseDN,而撰寫的方法通常與你的 DNS 架構有點關係! 例如,我們的 DNS 架構是 server.vbird 這樣的領域,那麼 baseDN 應該就可以設定成:『 dc=server,dc=vbird 』這樣的結構! 跟目錄樹系統對照起來,也就是說,根目錄 (/) 相當於 dc=server,dc=vbird 這個 DN 的名稱就是了。那麼誰可以管理這個 LDAP 系統呢? 我們就得要有另外一個管理員的 DN!這個管理員 DN 有點像 /root 目錄啦!通常我們稱為 rootDN,在後續談到的 FreeIPA 裡面, rootDN 的名稱通常是『 cn=Directory Manager 』這樣的結構!那如果你有帳號資料的話,也有可能需要用到帳號的 DN, 會有點像 /home/admin 類似的目錄,在 FreeIPA 的帳號資料 DN 有點像『 uid=admin,cn=users,cn=accounts,dc=server,dc=vbird 』。

那麼 baseDN 裡面含有什麼資料呢?如果一部建立好的 LDAP 資料,使用『 ldapsearch -x "dc=server" 』查詢資料時,應該就會出現如下畫面:

# server.vbird
dn: dc=server,dc=vbird
objectClass: top
objectClass: domain
objectClass: pilotObject
objectClass: domainRelatedObject
objectClass: nisDomainObject
dc: server
info: IPA V2.0
associatedDomain: server.vbird
nisDomain: server.vbird

上面這個資料就被稱為是 LDIF (LDAP Data Interchange Format)!這是正常的 LDAP 修改資料內容的格式!早期修改 LDAP 的資訊, 都要透過這種格式,然後以 ldapmodify 指令來匯入修改~相當痛苦!近期以來,有 FreeIPA 可以使用指令的方式來修訂 LDAP 的內容, 感覺舒服多了!

11.1.3、FreeIPA 簡介

要提供 LDAP 的身份驗證功能,有很多軟體可以支援,在 Windows 上面最常用的就是 AD (Active Directory, AD) 伺服器,在 Linux 上面則有多種服務! 包括 openldap 伺服器、389ds 伺服器、Red Hat Directory Server (rhds) 伺服器、FreeIPA 伺服器等等,其中 openldap, 389ds 主要僅提供 LDAP 服務, rhds 則是 Red Hat 官方支援的軟體,基本上沒有釋出給 RHEL 衍生產品使用,最後的 FreeIPA 就有趣了!FreeIPA 是開放原始碼軟體, 主要的任務是提供類似 windows AD 伺服器的功能,可以統一提供 LDAP, DNS, NTP 等等功能,相當強大!而且,如同上一小節提到的, FreeIPA 已經整合了大部分常見系統的綱要檔,所以,幾乎所有的用戶端系統,都可以直接拿 FreeIPA 伺服器當作帳號密碼驗證來源伺服器! 簡單易用!

FreeIPA 的官方網站自己的介紹中,FreeIPA 就是 Identity, Policy, Audit,亦即身份驗證、政策規則管理、稽核驗證功能等。 鳥哥最需要的其實只有第一個啦!那就是身份驗證的功能!也就是帳密統一管理的 LDAP 機制就是了!過去鳥哥使用 openldap 設定時, 每一個項目都需要用到 LDIF 文字檔進行匯入,真的頭很痛~FreeIPA 則有制式化方式建立服務,設定上面做非常多簡化! 因此,管理員只需要知道 LDAP 是什麼,大致請處 LDIF 格式之後,其他的,都用 ipa 這個指令來完成即可!相當簡便! 整個簡單的 FreeIPA 伺服器功能,我們可以拿底下的圖示來做個簡單的介紹:

圖 11.1.3、FreeIPA 伺服器當中,跟 LDAP 與身份驗證較相關的元件示意
圖 11.1.3、FreeIPA 伺服器當中,跟 LDAP 與身份驗證較相關的元件示意

上圖當中,右側為 FreeIPA 伺服器裡頭的元件,有特殊底色的元件是 FreeIPA 架設值,就可以主動提供與設定好的項目! 你幾乎什麼都不用做,所有的設定就完成了!之後要新增、刪除、修改帳號等資料,就透過『 ipa cli 』元件來管理即可! 要注意的是,FreeIPA 並不是獨立做出全部的服務,而是拿既有的軟體來搭建出類似 AD 的管理機制!所以 ldap.conf 是使用 openldap-clients 軟體,身份驗證則是抓取 sssd 服務來處理,只是全部的設定檔,都是透過 freeipa 主動建置完畢而已。

至於用戶端,只要設定好 ldap 用戶端資料,加上設計好 sssd 服務,就可以主動連接上 FreeIPA 的 LDAP 服務 (一般埠口放行在 port 389 及加密的 port 636),那就能夠進行身份驗證了!整體結構就是這樣。

11.1.4、LDAP 伺服器、用戶端電腦硬體準備與網路參數設定

我們在 DMZ 區域當中建立好 LDAP 伺服器,然後在 LAN 裡面抓兩部系統來處理,一部預計使用 Linux 另一部將使用 windows 系統喔! 所以,最終會有三部新的系統這樣。相關的設定會有點像這樣:

圖 11.1.4、本章節用來測試 FreeIPA 的伺服器與用戶端硬體設備示意
圖 11.1.4、本章節用來測試 FreeIPA 的伺服器與用戶端硬體設備示意

不過,由於擔心雲端系統可用的資源不夠多,因此,建議將上一節課的 works 系統先關閉,最終只剩下系統預設絕對會使用的項目即可:

# 在 cloud 母系統上面,將多餘的虛擬機器關閉,剩下需要的大概有:
[root@cloud ~]# virsh list
 Id   Name                 State
------------------------------------
 1    master               running
 13   server_dns_master    running
 15   server_dns_slave     running
 16   server_dhcp          running
 19   server_backup        running
  • 處理硬體設定檔 (XML)、磁碟檔 (.img) 等資訊

要先記得,我們的母系統是在 cloud 的主機底下,然後我們複製的伺服器來源檔案,主要是由 server_raw 來的!現在就讓我們來處理 XML 以及映像檔資料:

# 1.1 複製 server_raw/client_raw 給 server_ldap/client_linux 使用
[root@cloud ~]# cd /kvm/img
[root@cloud img]# cp server_raw.img server_ldap.img
[root@cloud img]# cp client_raw.img client_linux_00.img

# 1.2 windows 需要比較大的容量,而且需要全新安裝,請建立 100G 的硬碟
[root@cloud img]# qemu-img create -f qcow2 client_win_00.img 100G

# 2.1 建立好 server_ldap.xml 的設定檔,並嘗試啟動
[root@cloud img]# cd /kvm/xml
[root@cloud xml]# cp server_workstation.xml server_ldap.xml
[root@cloud xml]# vim server_ldap.xml
  <name>server_ldap</name>
    <nvram>/kvm/xml/server_ldap.uefi.fd</nvram>
      <source file="/kvm/img/server_ldap.img"/>
      <mac address="52:54:00:00:30:c6"/>
    <graphics type="vnc" port="5936" listen="127.0.0.1" passwd="rocky9">

[root@cloud xml]# virsh create server_ldap.xml

# 2.2 建立好 Linux 用戶端 client_linux_00 的設定檔,並嘗試啟動
[root@cloud xml]# cp client_raw.xml client_linux_00.xml
[root@cloud xml]# vim client_linux_00.xml
  <name>client_linux_00</name>
    <loader readonly="yes" type="pflash" secure="no">/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
    <nvram>/kvm/xml/client_linux_00.uefi.fd</nvram>
      <source file="/kvm/img/client_linux_00.img"/>
      <mac address="52:54:00:00:20:00"/>
    <graphics type="vnc" port="5920" listen="127.0.0.1" passwd="rocky9">

[root@cloud xml]# virsh create client_linux_00.xml

# 2.3 建立好 Windows 用戶端 client_win_00 的設定檔,並嘗試啟動
[root@cloud xml]# cp client_raw.xml client_win_00.xml
[root@cloud xml]# vim client_win_00.xml
  <name>client_win_00</name>
  <memory>6097152</memory>
  <currentMemory>6097152</currentMemory>
    <loader readonly="yes" type="pflash" secure="yes">/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
    <nvram>/kvm/xml/client_win_00.uefi.fd</nvram>
  <hyperv mode="custom">
    <relaxed state="on"/>
    <vapic state="on"/>
    <spinlocks state="on" retries="8191"/>
    <vpindex state="on"/>
    <runtime state="on"/>
    <synic state="on"/>
    <stimer state="on">
      <direct state="on"/>
    </stimer>
    <reset state="on"/>
    <vendor_id state="on" value="KVM Hv"/>
    <frequencies state="on"/>
    <reenlightenment state="on"/>
    <tlbflush state="on"/>
    <ipi state="on"/>
    <evmcs state="on"/>
  </hyperv>
    <timer name="hypervclock" present="yes"/>
  </clock>
      <source file="/kvm/img/client_win_00.img"/>
      <mac address="52:54:00:c2:00:00"/>
    <tpm model="tpm-tis">
      <backend type="emulator" version='2.0'/>
    </tpm>
    <graphics type="vnc" port="5921" listen="127.0.0.1" passwd="rocky9" />

[root@cloud xml]# virsh create client_win_00.xml
# 這樣就可以進入 windows 11 的安裝模式當中才對!
  • 安裝 Windows 11 到虛擬機器上

上面的設定資料跟前幾個章節相近,沒有什麼太大的問題~但是,Windows 11 的虛擬機器安裝,就很有問題了! 因為 Windows 11 對硬體的要求比較高~所以,我們預設的環境是不足以支撐相關硬體的要求的~同時,Windows 11 的相關安裝檔, 以及 virtio 磁碟機驅動程式,則需要事先下載到 /kvm/iso 底下才行!因為 windows 11 的 XML 資料非常多~ 所以鳥哥將全部的設定寫入一個文字檔,大家可以從底下的網址自行取得參考喔!

幾個比較重要的安裝流程是,安裝過程由於 windows 不懂 virtio 的磁碟裝置,因此,你得要到 virtio-win.iso 那個光碟去找資料! 載入驅動程式,這樣才有辦法抓到實際的硬碟來安裝!後續安裝過程應該就很順暢了。安裝完畢之後,到裝置管理員當中, 會看到更多的有問題的裝置~每個有問題裝置都點進去更新驅動程式,同樣使用 virtio-win.iso 光碟的內容!應該很快就能找到正確的驅動程式! 在這過後,你的 windows 11 才會有網路喔~要注意!要注意!

  • LDAP 伺服器網路設定

FreeIPA 的 LDAP 功能,應該還是需要固定 IP 位址才好!至於 linux/windows 等客戶端,那就單純使用 dhcp 取得就好! 如上圖所示,我們的 LDAP 相關資料應該是:

  • IP address: 192.168.30.216/24
  • Gateway: 192.168.30.254
  • DNS server: 192.168.30.211, 192.168.30.212
  • hostname: ldap.server.vbird

底下的動作需要在剛剛啟用的虛擬機底下實做 (vnc://192.168.201.249:5936),這是因為我們會修改網路參數的緣故啊!

# 在 LDAP 伺服器 (VNC 環境) 完成如下參數設定:
[root@server001 ~]# hostnamectl hostname ldap.server.vbird
[root@server001 ~]# nmcli connection modify enp1s0 ipv4.method manual ipv4.addresses 192.168.30.216/24 \
> ipv4.gateway 192.168.30.254 ipv4.dns 192.168.30.211,192.168.30.212 \
> ipv4.dns-search server.vbird,lan.vbird,ap.vbird
[root@server001 ~]# nmcli connection up enp1s0
[root@server001 ~]# curl https://linux.vbird.org
  • 更新 DNS zone file

建立新主機,需要有名稱的對應!請修改 dns1 伺服器的 server.vbird 的 zone file !直接做吧!

# 底下所有的動作都應該要在 dns1 (master DNS) 上面動作:
[root@dns1 ~]# vim /var/named/named.server.vbird
@  IN SOA  dns1.server.vbird. adm.mail.server.vbird. ( 2024041703 3H 15M 1D 600 )
....
ldap     IN A    192.168.30.216
....

[root@dns1 ~]# vim /var/named/named.192.168.30
@ IN SOA  dns1.server.vbird. adm.mail.server.vbird. ( 2024041703 3H 15M 1D 600 )
...
216     IN PTR  ldap.server.vbird.
...

[root@dns1 ~]# systemctl restart named-chroot
[root@dns1 ~]# dig +short ldap.server.vbird
192.168.30.216
[root@dns1 ~]# dig +short -x 192.168.30.216
ldap.server.vbird.

11.2、FreeIPA 架設

如前所述,FreeIPA 真的是很龐大的一個系統~整合好多東西!還提供了網頁界面的控制環境!一切都是這麼的美好... 不過,鳥哥基本上只需要使用 LDAP 統一控制用戶的帳號密碼而已啦!所以,預計開放的防火牆埠口並不會全部都放行! 而是只放行 port 389, 636 而已喔~相關的 FreeIPA server 與使用 LDAP 服務的用戶端相關性, 有點像底下的模樣:

圖 11.2、FreeIPA 與相關的元件示意圖
圖 11.2、FreeIPA 與相關的元件示意圖

上圖右側有底色的方塊,是 FreeIPA 提供的,或是 FreeIPA 主動去設定的項目!好像很多元件要處理, 但事實上,使用一個安裝指令就搞定了...實在覺得很簡單啊!

11.2.1、行前檢測與規劃,非常重要!

基本上,LDAP 的服務在查詢資料時,主要是使用主機名稱在進行查詢的!但是,LDAP 是架構在 TCP/IP 的協定上! 所以,主機名稱對應到正確的 IP 位址這件事,就顯得非常非常重要!我們的環境其實比較 OK,因為著眼在企業內部使用內部 DNS 系統的情境, 因此無須改動 /etc/hosts !只是特別要注意,主機名稱一定要對應的起來才行!很重要!對應不起來,LDAP 就會失敗!

# 在 LDAP 系統上面,找出正確的主機名稱對應的 IP 位址:
[root@ldap ~]# dig +short ldap.server.vbird
192.168.30.216
[root@ldap ~]# ip addr show enp1s0  | grep inet
    inet 192.168.30.216/24 brd 192.168.30.255 scope global noprefixroute enp1s0
# 本機的主機名稱與 IP 確實是可以對應的!
[root@ldap ~]# hostname
ldap.server.vbird
# 主機名稱的設定也沒有問題!OK 的!

看起來是沒問題啊!另外,我們也需要規劃一下 LDAP 那個小節提到的兩個 DN,一個是 baseDN,一個是 rootDN! 一般來說,baseDN 會跟你的 dns 的 FQDN 有關!因為我們的領域 (domain) 主要是 server.vbird,所以, baseDN 通常就會這樣設定:

  • hostname: ldap.server.vbird
  • domainname: server.vbird
  • baseDN: dc=server,dc=vbird
  • rootDN: cn=Directory Manager: 同時系統管理員帳號為 admin 喔!
  • 使用者家目錄預設在 /rhome 上(這是為了與本機用戶做區分,而且可提供遠端掛載之用!)

那個 rootDN 是在 OpenLDAP 上面的管理員節點,鳥哥將它借來用在 FreeIPA 上面~至於使用者家目錄建議不要放置在 /home 的原因是, 未來我們會將統一管理的用戶各自的家目錄也提供給企業內的所有主機使用,如果遠端帳號也使用 /home 的話,我們就得要將帳號一個一個設定, 否則可能會跟本機帳號衝突 (都在 /home 底下啊)。因此,鳥哥建議將遠端用戶的家目錄放置到其他位置,例如 /rhome 就是個常見的遠端用戶家目錄上層目錄名。大致需要注意的項目就像上面這樣囉!接下來,就讓我們簡單來設定一下 FreeIPA 伺服器吧!

11.2.2、FreeIPA 的 LDAP 服務快速安裝與設定

FreeIPA 在 RHEL 9 衍生產品的軟體名稱為 ipa-server,所以,你可以簡單的立刻安裝好:

[root@ldap ~]# yum install ipa-server

安裝完畢之後,我們可以使用 FreeIPA 提供的 ipa-server-install 腳本來完成我們需要的所有工作喔! 這個腳本執行過程中,會需要輸入一些資訊,大多就是 baseDN 或管理員密碼等,底下,讓我們來簡單的完成需要的任務:

# 在 LDAP 伺服器上面,建立好 ipa server
[root@ldap ~]# ipa-server-install

The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.
Version 4.10.2

This includes:
  * Configure a stand-alone CA (dogtag) for certificate management
  * Configure the NTP client (chronyd)
  * Create and configure an instance of Directory Server
  * Create and configure a Kerberos Key Distribution Center (KDC)
  * Configure Apache (httpd)
  * Configure SID generation
  * Configure the KDC to enable PKINIT

To accept the default shown in brackets, press the Enter key.

Do you want to configure integrated DNS (BIND)? [no]:   <==預設不要綁定 DNS 喔!

Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form
.
Example: master.example.com


Server host name [ldap.server.vbird]:   <==預設用本機的主機名,所以沒問題!

The domain name has been determined based on the host name.

Please confirm the domain name [server.vbird]:   <==一樣使用本機領域名!

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [SERVER.VBIRD]:   <==同樣採用預設值
Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password: <==輸入 LDAP 管理密碼
Password (confirm): <==輸入 LDAP 管理密碼

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

IPA admin password: <==輸入 admin 用戶密碼
Password (confirm): <==輸入 admin 用戶密碼

Trust is configured but no NetBIOS domain name found, setting it now.
Enter the NetBIOS name for the IPA domain.
Only up to 15 uppercase ASCII letters, digits and dashes are allowed.
Example: EXAMPLE.


NetBIOS domain name [SERVER]:   <==同樣採用預設值

Do you want to configure chrony with NTP server or pool address? [no]:   <==同樣採用預設值

The IPA Master Server will be configured with:
Hostname:       ldap.server.vbird
IP address(es): 192.168.30.216
Domain name:    server.vbird
Realm name:     SERVER.VBIRD

The CA will be configured with:
Subject DN:   CN=Certificate Authority,O=SERVER.VBIRD
Subject base: O=SERVER.VBIRD
Chaining:     self-signed

Continue to configure the system with these values? [no]: yes

The following operations may take some minutes to complete.
Please wait until the prompt is returned.
# 接下來會跑好一陣子的系統檢測與設定~你可以順便看看 FreeIPA 在幹麻!
The ipa-client-install command was successful

Please add records in this file to your DNS system: /tmp/ipa.system.records.t241j_cw.db
==============================================================================
Setup complete

Next steps:
        1. You must make sure these network ports are open:
                TCP Ports:
                  * 80, 443: HTTP/HTTPS
                  * 389, 636: LDAP/LDAPS
                  * 88, 464: kerberos
                UDP Ports:
                  * 88, 464: kerberos
                  * 123: ntp

        2. You can now obtain a kerberos ticket using the command: 'kinit admin'
           This ticket will allow you to use the IPA tools (e.g., ipa user-add)
           and the web user interface.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
The ipa-server-install command was successful
# 出現上面這段文字,就是完成了!要注意提示!防火牆記得處理!

基本上,整體安裝就這樣搞定耶!因為鳥哥以前搞 OpenLDAP 時,搞到頭發昏~沒想到 FreeIPA 竟然這樣搞定一切... 剛剛完成的當下,會有點不知所措...笑死~

  • 防火牆設定: 針對加密的 LDAP 服務

要注意的是,無論 FreeIPA 提供什麼服務,鳥哥這邊再次強調,目前『我們系統僅使用 LDAP 有加密連線的服務』而已,所以,我們只需要放行 port 636 這個 ldaps 喔!那就來處理一下防火牆吧!

# 放行需要的防火牆!
[root@ldap ~]# firewall-cmd --permanent --add-service=freeipa-ldaps
[root@ldap ~]# firewall-cmd firewall-cmd --permanent --remove-service={ftp,http,https}
[root@ldap ~]# firewall-cmd --reload
[root@ldap ~]# firewall-cmd --list-service
cockpit dhcpv6-client freeipa-ldaps ssh

其實,比較重要的是 freeipa-ldaps 與 ssh 就是了!

  • 使用 ldapsearch -x 檢測 LDAP 功能是否正常

現在,先讓我們來檢查一下,目前這個 LDAP 伺服器,真的可以順利提供 LDAP 嘛? 最簡單的方法,其實就是使用 ldapsearch -x 這個指令來查詢即可!應該要先來查詢一下 baseDN 這個節點的內容才是! 不過要注意的是, ldapsearch 其實會找第一個出現的元件,所以, dc=server,dc=vbird 要列表,可以直接查詢 dc=server 即可! 簡單這樣處理看看:

# 查詢一下,目前有沒有名為 dc=server,dc=vbird 的節點紀錄
[root@ldap ~]# ldapsearch -x dc=server
....(略過)....
# server.vbird
dn: dc=server,dc=vbird
objectClass: top
objectClass: domain
objectClass: pilotObject
objectClass: domainRelatedObject
objectClass: nisDomainObject
dc: server
info: IPA V2.0
associatedDomain: server.vbird
nisDomain: server.vbird

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

出現的資料最要注意的是『 dn: dc=server,dc=vbird 』那一行!因為那個 dn 就是判別名稱的意思!後面的 objectClass 等資訊, 就是這個節點的內容!這樣應該就看得懂吧!另外,上面安裝 IPA 時,過程中說有建立一個 admin 的用戶, 我們也可以使用『 uid=帳號名稱 』這樣來查詢看看喔!

[root@ldap ~]# ldapsearch -x uid=admin
# admin, users, compat, server.vbird
dn: uid=admin,cn=users,cn=compat,dc=server,dc=vbird
objectClass: posixAccount
objectClass: ipaOverrideTarget
objectClass: top
gecos: Administrator
cn: Administrator
uidNumber: 915600000
gidNumber: 915600000
loginShell: /bin/bash
homeDirectory: /home/admin
ipaAnchorUUID:: OklQQTpzZXJ2ZXIudmJpcmQ6MzVmYjkwOGMtZmYyYi0xMWVlLThlZTgtNTI1ND
 AwMDAzMGM2
uid: admin

# admin, users, accounts, server.vbird
dn: uid=admin,cn=users,cn=accounts,dc=server,dc=vbird
objectClass: top
objectClass: person
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: inetuser
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: ipaNTUserAttrs
uid: admin
cn: Administrator
sn: Administrator
uidNumber: 915600000
gidNumber: 915600000
homeDirectory: /home/admin
loginShell: /bin/bash
gecos: Administrator
ipaNTSecurityIdentifier: S-1-5-21-2221503860-19708226-1022894140-500

以 admin 為開頭的帳號有兩筆紀錄,這兩筆紀錄分在不同的 cn 組織中~一個是 cn=compat 一個是 cn=accounts! 不過內容差不多耶~應該是有進行兩個組織相同帳號的同步才對!這樣才能適合不同用戶端系統的帳號需求!所以,看起來沒問題喔!

  • LDAP 用戶端設定 /etc/openldap/ldap.conf

只是...ldapsearch 是找哪個設定檔?基本上看一下底下這個檔案:

[root@ldap ~]# cat /etc/openldap/ldap.conf | grep -v '#' | grep -v '^$'
SASL_NOCANON    on
URI ldaps://ldap.server.vbird
BASE dc=server,dc=vbird
SASL_MECH GSSAPI

上面檔案最重要的就是 LDAP 伺服器來源的主機名稱~還有 baseDN 名稱的設定!

11.2.3、登入 LDAP admin 用戶管理 LDAP

過去我們都得要使用 LDIF 格式來處理好需要的節點 (DN) 格式,之後再以 ldapadd, ldapmodify, ldapdelete 等指令來匯入處理, 以改變在 LDAP 伺服器當中的資料。如果學過 SQL 語言的,那你可以假想,LDIF 就是 SQL 的語法,而 ldap{add,modify,delete} 則是匯入 SQL 語言的指令這樣。問題是,LDIF 很難處理~一個小細節錯誤,在匯入的時候,就很容易出錯! 雖然使用 LDIF 創見 LDAP 資料庫內容會比較乾淨,不過...就是很難管理!

現在,FreeIPA 提供了 ipa 這個 cli 指令,可以讓大家快速方便的找到所有需要的帳號管理功能,處理起來非常方便! 怎麼使用 ipa 呢?我們需要在 ldap.server.vbird 系統上面,先以 Kerberos 驗證登入管理員身份後, 才能使用 ipa 喔!我們在前一小節安裝 FreeIPA 的時候,不是要你輸入 Directory Manager 的密碼嘛? 在底下的指令當中輸入那個密碼就對了!

[vbird@ldap ~]$ kinit admin
Password for admin@SERVER.VBIRD: <==這裡輸入 LDAP admin 的密碼

[vbird@ldap ~]$ klist
Ticket cache: KCM:1000
Default principal: admin@SERVER.VBIRD

Valid starting     Expires            Service principal
04/21/24 14:37:26  04/22/24 14:01:39  krbtgt/SERVER.VBIRD@SERVER.VBIRD
# 時間格式是 月/日/西元年後兩位數

你用 Linux 的哪個帳號執行 kinit 都沒問題,如上所示,鳥哥用 vbird 這個管理員慣用的一般帳號,進行 FreeIPA 的 admin 管理身份轉換,然後使用 klist 查看一下目前的 Kerberos 票據 (ticket),就可以看到,如果 vbird 這個帳號一直沒有登出的話, 這份票據就可以用到 24 小時之後喔!好了!現在你可以開始使用 ipa 這個指令啦!

  • 改變帳號管理預設值,以家目錄為例

在 linux 系統的管理中,建立用戶的預設家目錄,一般是在 /home 底下,我們可以透過修改 /etc/default/useradd 這個指令來修改預設值。那 FreeIPA 的帳號預設值怎麼查看與修改?首先,記得你已經登入了 admin 這個帳號喔 (kinit admin)! 然後這樣做:

[vbird@ldap ~]$ ipa config-show
  Maximum username length: 32
  Maximum hostname length: 64
  Home directory base: /home
  Default shell: /bin/sh
  Default users group: ipausers
  Default e-mail domain: server.vbird
  Search time limit: 2
  Search size limit: 100
  User search fields: uid,givenname,sn,telephonenumber,ou,title
  Group search fields: cn,description
  Enable migration mode: False
  Certificate Subject base: O=SERVER.VBIRD
  Password Expiration Notification (days): 4
  Password plugin features: AllowNThash, KDC:Disable Last Success
  SELinux user map order: guest_u:s0$xguest_u:s0$user_u:s0$staff_u:s0-s0:...
  Default SELinux user: unconfined_u:s0-s0:c0.c1023
  Default PAC types: MS-PAC, nfs:NONE
  IPA masters: ldap.server.vbird
  IPA master capable of PKINIT: ldap.server.vbird
  IPA CA servers: ldap.server.vbird
  IPA CA renewal master: ldap.server.vbird

跟帳號設定比較有關的如上頭特殊字體部份。我們想要修改預設的家目錄成為 /rhome ,那可以使用底下的方式來修改喔!

[vbird@ldap ~]$ ipa help config-mod
...
  --homedirectory=STR   Default location of home directories
...
[vbird@ldap ~]$ ipa config-mod --homedirectory=/rhome
  Maximum username length: 32
  Maximum hostname length: 64
  Home directory base: /rhome
  Default shell: /bin/sh
  Default users group: ipausers
  Default e-mail domain: server.vbird
....

這樣就改好了!相當簡單易用!另外,如果你有想要知道的 ipa 指令用途,只要用『 ipa help command 』格式去找就好囉!

你會看到預設的 shell 還是 /bin/sh,能否請您自己修改一下,讓預設的 shell 成為 /bin/bash 呢!加油!
  • 簡單使用者管理

先來看看我們有多少群組與多少使用者,在剛剛建立好 FreeIPA 的這個時刻:

# 先來看看目前有幾個群組
[vbird@ldap ~]$ ipa group-find
----------------
4 groups matched
----------------
  Group name: admins
  Description: Account administrators group
  GID: 915600000

  Group name: editors
  Description: Limited admins who can edit other users
  GID: 915600002

  Group name: ipausers
  Description: Default group for all users

  Group name: trust admins
  Description: Trusts administrators group
----------------------------
Number of entries returned 4
----------------------------

# 再來看看,那有幾個使用者呢?
[vbird@ldap ~]$ ipa user-find
--------------
1 user matched
--------------
  User login: admin
  Last name: Administrator
  Home directory: /home/admin
  Login shell: /bin/bash
  Principal alias: admin@SERVER.VBIRD, root@SERVER.VBIRD
  UID: 915600000
  GID: 915600000
  Account disabled: False
----------------------------
Number of entries returned 1
----------------------------

# 那麼來看看 admin 這個用戶的重要資訊:
[vbird@ldap ~]$ ipa user-show admin
  User login: admin
  Last name: Administrator
  Home directory: /home/admin
  Login shell: /bin/bash
  Principal alias: admin@SERVER.VBIRD, root@SERVER.VBIRD
  UID: 915600000
  GID: 915600000
  Account disabled: False
  Password: True
  Member of groups: trust admins, admins
  Kerberos keys available: True

看起來預設有 4 個群組,以及 1 個用戶,用戶名稱就是權力無限大的 admin 這樣。現在,先讓我們來隨便建立個一般用戶, 用戶名稱為 amanda 好了~最簡單處理的方式如下:

# 用預設的方式建立一個 amanda 用戶
[vbird@ldap ~]$ ipa user-add amanda
First name: Amanda
Last name: Tsai
-------------------
Added user "amanda"
-------------------
  User login: amanda
  First name: Amanda
  Last name: Tsai
  Full name: Amanda Tsai
  Display name: Amanda Tsai
  Initials: AT
  Home directory: /rhome/amanda
  GECOS: Amanda Tsai
  Login shell: /bin/bash
  Principal name: amanda@SERVER.VBIRD
  Principal alias: amanda@SERVER.VBIRD
  Email address: amanda@server.vbird
  UID: 915600003
  GID: 915600003
  Password: False
  Member of groups: ipausers
  Kerberos keys available: False

FreeIPA 的預設 UID/GID 似乎是在 915600000 開始這樣,總之,這樣就增加了一個用戶!如果你要查詢這個用戶的相關資訊, 除了使用『 ipa user-shwo amanda 』之外,也可以直接透過 LDAP 的查詢方式處理,也就是『 ldapsearch -x uid=amanda 』! 但是目前這個用戶沒有密碼喔!建立密碼的最簡單方式,可以這樣處理看看:

# 使用管線命令直接帶入密碼的方式:
[vbird@ldap ~]$ echo MyPassW04d | ipa user-mod amanda --password
----------------------
Modified user "amanda"
----------------------
  User login: amanda
  First name: Amanda
  Last name: Tsai
  Home directory: /rhome/amanda
  Login shell: /bin/bash
  Principal name: amanda@SERVER.VBIRD
  Principal alias: amanda@SERVER.VBIRD
  Email address: amanda@server.vbird
  UID: 915600003
  GID: 915600003
  Account disabled: False
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True
  • 複雜組合的帳號管理

現在,讓我們來模擬基礎學習篇裡面提到的帳號管理方式,假設我們需要建立三個用戶,資訊分別如下;

  • alex (Alex Tsai)
  • melody (Melody Tsai)
  • ponda (Ponda Lin)
  • 密碼都是 MyPassW04d
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add alex --first=Alex --last=Tsai --password
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add melody --first=Melody --last=Tsai --password
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add ponda --first=Ponda --last=Lin --password

接下來,這三個用戶得要加入一個群組,假設群組名稱為 studygroup,那麼加入這三個用戶到此群組當中的流程, 應該就是這樣的:

# 1. 先建立需要的群組
[vbird@ldap ~]$ ipa group-add studygroup
------------------------
Added group "studygroup"
------------------------
  Group name: studygroup
  GID: 915600007

# 2. 加入三個用戶到此群組內
[vbird@ldap ~]$ ipa help group-add-member
[vbird@ldap ~]$ ipa group-add-member studygroup --user={alex,melody,ponda}
  Group name: studygroup
  GID: 915600007
  Member users: alex, melody, ponda
-------------------------
Number of members added 3
-------------------------

[vbird@ldap ~]$ ipa group-show studygroup
  Group name: studygroup
  GID: 915600007
  Member users: alex, melody, ponda
  • 透過 sssd 服務管理 Linux 系統帳號

前面講這麼多,都是在介紹 FreeIPA cli, LDAP 等等的管理上面,如果你仔細去看一下 /rhome,那根本就沒有建立目錄! 對啊!原本上面的工作,都僅只是在 LDAP 的資料節點上面進行修改而已!不過, FreeIPA 也很厲害, 其實也幫我們修訂了 sssd 這個系統認證的服務了!來看看系統驗證服務選擇了哪些?接下來都是 Linux 系統操作了, 所以,不能再用一般帳號囉~請轉成 root 處理!

[root@ldap ~]# authselect list
- minimal        Local users only for minimal installations
- sssd           Enable SSSD for system authentication (also for local users only)
- winbind        Enable winbind for system authentication

[root@ldap ~]# authselect current
Profile ID: sssd
Enabled features:
- with-sudo

目前就是使用 sssd 這個服務喔!那這個服務是什麼?來看看這個服務先:

[root@ldap ~]# systemctl status sssd
● sssd.service - System Security Services Daemon
     Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-04-20 23:37:03 CST; 16h ago
   Main PID: 22524 (sssd)
      Tasks: 8 (limit: 12337)
     Memory: 57.8M
        CPU: 2.499s
     CGroup: /system.slice/sssd.service
             ├─22524 /usr/sbin/sssd -i --logger=files
....

原來全名是『 System Security Services Daemon 』啊!系統資安服務!主要目的就是進行身份驗證! 來看看主要的設定檔:

[root@ldap ~]# cat /etc/sssd/sssd.conf
[domain/server.vbird]
id_provider = ipa
ipa_server_mode = True
ipa_server = ldap.server.vbird
ipa_domain = server.vbird
ipa_hostname = ldap.server.vbird
auth_provider = ipa
chpass_provider = ipa
access_provider = ipa
cache_credentials = True
ldap_tls_cacert = /etc/ipa/ca.crt
krb5_store_password_if_offline = True
[sssd]
services = nss, pam, ifp, ssh, sudo
domains = server.vbird
[nss]
homedir_substring = /home
memcache_timeout = 600

上面就是 sssd 這個服務查詢資料的流程~在 [sssd] 的規範中,使用到的服務 (services) 那個 nss 與 pam 就是本機的帳號機制! 而 domains 就會去找 [domains/規範的領域] 有關的設定!因此,sssd 預設還是會先找本機 /etc/passwd 裡面有的帳號來呈現, 若找不到,就會再去找 domains 的規範~而上述 domains 的規範當中,主要就是透過 ipa_server 來驗證~並使用 LDAP 的 TLS 加密機制! 加密金鑰則放置於 /etc/ipa/ca.crt 這個檔案內!

有了上面的服務以及相關的設定之後,我們就可以來查詢 Linux 系統需要的帳號了!

[root@ldap ~]# id alex
uid=915600004(alex) gid=915600004(alex) groups=915600004(alex),915600007(studygroup)

這樣我們就將 LDAP 整合到 Linux 帳號驗證環境中了!最後,就讓我們來瞧一瞧 IPA 運作的服務有哪些!

# 底下這個指令需要使用 root 的身份喔!
[root@ldap ~]# ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa: INFO: The ipactl command was successful

11.2.4、Linux 用戶端系統使用 sssd 驗證設定

我們在 11.1.3 小節當中的圖示,有提到 Linux 用戶端想要使用 LDAP 進行身份驗證,需要設定 LDAP 與 sssd 才行! 所以,底下我們就依序來處理一下這兩個環節吧!讓 Linux 系統的終端帳號,也能使用 LDAP server 提供的帳號!

  • 設定 LDAP 用戶端

使用 LDAP 用戶端,亦即我們在 Linux 上面直接使用 ldapsearch 等指令時,可以即時的到 LDAP server 去查詢資料的意思! 如前一小節提到的,我們的 LDAP server 目前僅提供 TLS 支援的 port 636 埠口~亦即是 ldaps:// 這個協定! 知道這個情況之後,再來讓我們實驗一下囉!記得在 11.1.4 我們有啟用一個 linux client 吧~連接上這部使用 dhcp 取得網路參數的系統, 開始進行如下的實驗:

# 1. 先安裝所有需要的 openldap 與 sssd 的軟體
[root@client001 ~]# yum install sssd-ipa sssd-ldap openldap-clients sssd-tools

# 2. 開始設定 openldap 用戶端資料
[root@client001 ~]# vim /etc/openldap/ldap.conf
URI ldaps://ldap.server.vbird
BASE dc=server,dc=vbird
SASL_MECH GSSAPI
TLS_CACERT /etc/openldap/certs/ca.crt
# 預設的情況下, LDAP 的 TLS 憑證會建議放在 /etc/openldap/certs 中
# 而且,該檔案來自於 ldap.server.vbird 喔!

# 3. 複製 ldap.server.vbird 的 ca.crt 憑證資料
[root@client001 ~]# scp ldap:/etc/ipa/ca* /etc/openldap/certs/

# 4. 使用 ldapsearch -x uid=admin 測試查詢結果
[root@client001 ~]# ldapsearch -x uid=admin
# admin, users, compat, server.vbird
dn: uid=admin,cn=users,cn=compat,dc=server,dc=vbird
objectClass: posixAccount
objectClass: ipaOverrideTarget
objectClass: top
gecos: Administrator
cn: Administrator
uidNumber: 915600000
gidNumber: 915600000
loginShell: /bin/bash
homeDirectory: /home/admin
.....

透過簡單的幾個步驟,我們就在 Linux 端建立好帳號查詢的資料了!LDAP client 的設定就完成啦!相當容易吧! 只是,當你使用『 id admin 』時,卻發現沒有這個用戶!這是因為我們只設定了 LDAP 而尚未設定 sssd 服務之故! 接下來,讓我們繼續處理吧!

  • 設定讓 sssd 透過 LDAP 去查詢 ldap.server.vbird 的身份驗證

跟 ldap.server.vbird 不同,我們是 LDAP 用戶端而不是 FreeIPA 用戶端,因此許多設定我們只引用 LDAP 的機制! 所以,現在這麼做看看:

# 1. 進行 sssd.conf 的設定
[root@client001 ~]# vim /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = server.vbird

[nss]

[domain/server.vbird]
ldap_id_use_start_tls = True
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://ldap.server.vbird
ldap_search_base = dc=server,dc=vbird
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_reqcert = demand

[root@client001 ~]# chmod 600 /etc/sssd/sssd.conf
[root@client001 ~]# sssctl config-check
Issues identified by validators: 0
Messages generated during configuration merging: 0
Used configuration snippet files: 0

[root@client001 ~]# systemctl restart sssd

# 2. 使用 sssd 當成驗證的來源
[root@client001 ~]# authselect select sssd --force
Backup stored at /var/lib/authselect/backups/2024-04-21-12-32-41.YdRLPb
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

# 3. 測試僅在 LDAP 上面出現的帳號
[root@client001 ~]# id admin
uid=915600000(admin) gid=915600000(admins) groups=915600000(admins)

[root@client001 ~]# id melody
uid=915600005(melody) gid=915600005(melody) groups=915600005(melody),915600007(studygroup)

# 4. 嘗試使用一般用戶切換成為 LDAP 的帳號看看
[vbird@client001 ~]$ su - melody
Password:
su: warning: cannot change directory to /rhome/melody: No such file or directory

[melody@client001 vbird]$ whoami
melody
[melody@client001 vbird]$ exit

很快的就建置好 client 端的身份驗證功能!一切如此美好!只是...為啥沒有家目錄?這是因為我們尚未建立正確的家目錄啦~ 遠端用戶的家目錄,理論上也應該在遠端~這個我們在後續章節再來處理囉!

11.2.5、Windows 用戶端系統使用 pGina 驗證設定

FreeIPA 也有提供 windows 用戶使用 LDAP 登入的處理方式。只是這些方式最終在用戶端輸入的資料,都需要是『 melody@server.vbird 』 這樣的登入帳號名稱,同時,還得要改機碼,而且恐怕也無法取得 Windows 管理員身份的問題。所以,這個小節當中, 我們改介紹 pGina 這套軟體!你同時得要注意,我們的環境中,LDAP server 僅提供 SSL/TLS 的連線驗證 (port 636),並不提供明碼的 port 389 查詢!在這個練習中,我們僅使用 SSL 進行 LDAP 的驗證與查詢,並不使用 TLS 喔!

  • 安裝 pGina.fork 軟體

準備來安裝 pGina,不過得要留意喔~pGina 官網最新穩定版本停止在 2013 年,該版本並沒有支援 SSL/TLS 加密! 找了找 github 的好心人,找到底下這個網站,該網站的主程式也是從 pGina 官網 fork 出來的~目前 (2024/04) 最新版本也來到 3.9.9.12。 雖然還是舊了點 (最新版日期 2018/03),不過鳥哥實驗過,確實是能支援 LDAP SSL 喔!所以應該還是能用的才對!

圖 11.2.5-1、pGina 下載的版本與檔案
圖 11.2.5-1、pGina 下載的版本與檔案

下載完畢之後,直接雙擊該軟體,就可以直接安裝~安裝流程就不再一一介紹,反正,就是一直下一步與同意就對了!到最後的畫面, 先點選『 No, I will restart the computer later 』項目,等我們設定妥當再重新開機即可。接下來,請到開始程式集選擇『 pGina 』項目, 就可以啟動 pGina 的設定畫面了!

圖 11.2.5-2、pGina 安裝流程的最後一步!要注意!
圖 11.2.5-2、pGina 安裝流程的最後一步!要注意!
圖 11.2.5-3、pGina 功能啟動所在位置
圖 11.2.5-3、pGina 功能啟動所在位置
  • 開始設定 pGina

在出現的設定視窗中,選擇左上角的『 Plugin Selection 』頁面,然後點選 LDAP 項目的 Authentication (認證) 、Authorization (授權) 與 Gateway 等勾選單,之後再點擊『 Configure 』項目,流程有點像底下這樣:

圖 11.2.5-4、pGina 選擇 LDAP 作為驗證方式
圖 11.2.5-4、pGina 選擇 LDAP 作為驗證方式

在如下的畫面中,你應該要修改的項目有:

  • LDAP Host: ldap.server.vbird
  • LDAP Port: 636, Use SSL
  • Authentication: User DN Pattern: uid=%u,cn=users,cn=accounts,dc=server,dc=vbird
  • Gateway: Always add to local group: Administrators [Add Rule]
圖 11.2.5-5、pGina 在 LDAP 畫面中設定
圖 11.2.5-5、pGina 在 LDAP 畫面中設定
圖 11.2.5-6、pGina 在 LDAP 設定中,讓登入者都加入 Administrators 群組
圖 11.2.5-6、pGina 在 LDAP 設定中,讓登入者都加入 Administrators 群組

如上兩個圖示,很快的設定好 LDAP 相關的資料,然後按下『Save』後,就會回到前一個畫面~然後,請點選 LDAP 底下的『 Local Machine 』項目, 點選 configure 之後,在出現的視窗中,勾選『Always authenticate local users』、『Mirror groups from local user』, 然後右側 Gateway 的部份,增加 Administrators 群組,處理完畢之後,就可以按下『 Save 』了!如下圖所示:

圖 11.2.5-7、pGina 設定本地端驗證的方式
圖 11.2.5-7、pGina 設定本地端驗證的方式

回到原始畫面當中,按下右下角『Apply』按鈕,然後按下『Save』離開。接下來就可以嘗試重新開機。如果一切順利的話,那麼你的 windows 就會出現如下的畫面:

圖 11.2.5-8、pGina 實際作用於登入環境
圖 11.2.5-8、pGina 實際作用於登入環境

上圖中左下角的環境,你可以選擇透過本機的帳號登入,也可以選擇 pGina 登入,如果選擇本機帳號,那就應用到本機的登入功能, 如果使用 pGina 的話,就可以使用 LDAP server 上面的用戶帳號密碼,這樣就可以登入系統啦!而且,登入之後的所有用戶, 預設都會是管理員身份!這是合在小型企業的環境中~大型企業或者是控管比較嚴格的單位內,就不要讓一般用戶加入 Administrators 群組喔! 特別注意!特別注意!如果你登入系統並且查看一下帳戶資訊,就可以看到『系統管理員』字樣喔!

圖 11.2.5-9、pGina 的支援,讓用戶登入成為管理員
圖 11.2.5-9、pGina 的支援,讓用戶登入成為管理員

11.3、參考資料

修改歷史:
  • 2024/04/26:小型企業使用 FreeIPA 作為 LDAP 主控系統,感覺真是好簡單啊!也容易管理!
2024/04/26以來統計人數
計數器
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計