Leo Yeh's Blog

解決問題 Active Directory (1)

教學目標

主要解決將 Red Hat Linux 或 CentOS Linux 作業系統加入 Windows AD 網域的問題。

重點概念

首先企業大多採用 Windows AD 網域使用者驗證機制,然而若我們要將 Linux 作業系統加入 Windows AD 網域,則至少需要兩個元件才能夠將 Linux 作業系統加入至 Windows AD 網域中,第一個元件主要是與集中識別與驗證來源進行互動。第二個元件主要是偵測可用的網域和設定第一個元件使用正確識別來源。

整合 Windows AD 網域的方式

接著主要有三種方式可用於檢索資訊,並且針對 Windows AD 網域進行身份驗證,分別為:

  1. Native LDAP and Kerberos PAM and NSS modules
  2. Samba Winbind
  3. System Security Services Daemon (SSSD)

Native LDAP and Kerberos PAM and NSS modules

第一種方式主要是包括 PAM_KRB5、PAM_LDAP 和 NSS_LDAP 等模組,由於 PAM 和 NSS 模組被加載至每個應用程序中,所以此方式會直接影響 Linux 作業系統。同時沒有快取機制、離線支援和存取憑證的充分保護, 並且 PAM 和 NSS 模組功能有限,因此並不建議使用。

Samba Winbind

第二種方式主要是將 Linux 作業系統連接至 Windows AD 網域的傳統方式,其中 Winbind 主要是在 Linux 作業系統上模擬 Windows 客戶端,並且能夠與 Windows AD 網域伺服器進行溝通。然而 Red Hat 作業系統中的系統安裝服務防護程序 (System Security Service Daemon,SSSD) 的功能已經可以用來替代 Samba Winbind,同時 Samba 3.5.0 版本以上又存在允許攻擊者遠端執行任意程式碼之漏洞 (CVE-2017-7494),能夠讓攻擊者取得管理者權限,所謂 Samba 主要是讓 Linux 使用者可以透過伺服器訊息區塊 (Server Message Block,SMB) 協定存取 Windows 電腦上的檔案,此時攻擊者將會傳送具有寫入權限的共享檔案上傳至 Linux 伺服器,再由伺服器執行惡意程式,此時將可針對開啟檔案和列印共享的 445 連接埠受害者電腦發動攻擊,因此並不建議使用。

System Security Services Daemon (SSSD)

第三種方式主要是透過系統所提供快取和離線支援存取遠端身份識別和資料驗證的共通框架,我們簡稱為 SSSD,SSSD 主要提供了 PAM 和 NSS 的整合,以及透過資料庫儲存本機使用者資訊,同時從集中管理的伺服器檢索核心和擴展使用者資料。無論是 Windows AD 或 LDAP 皆能夠透過 SSSD 將 Linux 系統與身份伺服器進行連線,因此非常建議使用。

整合 Windows AD 網域的操作

再來從 Winbind 轉換至 SSSD 的主要原因為 SSSD 可以應用於直接和間接的整合,並且允許從一個整合的方法切換至另一個整合的方法,並且沒有明顯的移轉成本。若我們要設定 SSSD 或 Winbind 直接將 Linux 作業系統與 Windows AD 網域整合最方便的方法就是使用 realmd 服務,其允許呼叫者以標準的方式設定網路驗證和網域成員的資格。此外 realmd 服務將會自動發現有關可以存取網域的資訊,不需要進階的設定就能夠加入網域。

最後我們僅需要簡單三步驟,就能夠透過 Realmd 套件加入 Windows AD 網域,並且探索 Windows AD 網域的設定和套件,分別為:

  1. 安裝 Realmd 套件。
  2. 加入 Windows AD 網域。
  3. 探索 Windows AD 網域的設定和套件。

安裝 Realmd 套件

1
# yum install realmd

加入 Windows AD 網域

方式一

1
2
3
4
5
# realm join ad.example.com
# realm permit administrator
# su administrator@ad.example.com
# id
uid=1282400500(administrator@ad.example.com) gid=1282400513(domain users@ad.example.com) groups=1282400513(domain users@ad.example.com),1282400512(domain admins@ad.example.com),1282400518(schema admins@ad.example.com),1282400519(enterprise admins@ad.example.com),1282400520(group policy creator owners@ad.example.com),1282400572(denied rodc password replication group@ad.example.com) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

方式二

1
2
3
4
# realm join --user=administrator@ad.example.com
# su administrator@ad.example.com
# id
uid=1282400500(administrator@ad.example.com) gid=1282400513(domain users@ad.example.com) groups=1282400513(domain users@ad.example.com),1282400512(domain admins@ad.example.com),1282400518(schema admins@ad.example.com),1282400519(enterprise admins@ad.example.com),1282400520(group policy creator owners@ad.example.com),1282400572(denied rodc password replication group@ad.example.com) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

探索 Windows AD 網域的設定和套件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# realm discover ad.example.com
ad.example.com
type: kerberos
realm-name: ad.example.com
domain-name: ad.example.com
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
login-formats: %U@ad.example.com
login-policy: allow-realm-logins

總結我們可以透過 Realmd 套件解決將 Red Hat Linux 或 CentOS Linux 作業系統加入 Windows AD 網域的問題,同時能夠符合許多企業的資安政策,以利導入系統平台的解決方案。

相關資源

⬅️ Go back