Active Directory

SAS 系統管理 (94)

教學目標

初步了解在 Linux 作業系統中如何設定 SAS 9 平台以 Windows Active Directory 網域中的帳號和密碼進行登入操作的基本概念。

重點概念

首先當我們將 Linux 伺服器 (Red Hat 7) 加入 Windows Active Directory 網域之後要如何設定 SAS 9 平台以 Windows Active Directory 網域中的帳號和密碼進行登入操作呢?主要有三個階段,分別為:

  1. 設定 PAM 驗證方式。
  2. 自動建立使用者目錄。
  3. 手動建立使用者授權。

設定 PAM 驗證方式

接著所謂 PAM 全名為 Pluggable Authentication Module,也就是插入式驗證模組,其主要是一組 API 用於實現如何為服務驗證使用者的 API,PAM 機制主要是將多個驗證模式整合至 API,該 API 允許獨立於底層驗證模式的方式撰寫使用驗證的程式,其主要是透過 /etc/pam.d 或 /etc/pam.conf 設定檔實現動態驗證的設定。而我們主要需要設定 PAM 驗證方式,也就是編輯「/sas/SASHome/SASFoundation/9.4/utilities/bin/sasauth.conf」設定檔中的驗證方式為 PAM,以及以 root 權限將「/etc/pam.d/system-auth」設定檔複製為「/etc/pam.d/sasauth」設定檔,以利 SAS 9 平台以相同呼叫 PAM 的方式驗證使用者直接登入系統,請參考以下指令設定。

1
2
3
4
5
6
$ vi /sas/SASHome/SASFoundation/9.4/utilities/bin/sasauth.conf‥.

methods=pam

:wq!
$ sudo cp /etc/pam.d/system-auth /etc/pam.d/sasauth

自動建立使用者目錄

再來當使用者需要在 SAS 9 平台上使用 SAS Enterprise Guide 和 SAS Enterprise Miner 客戶端工具進行商業分析時就必需在伺服器上有該使用者的個人目錄,但是當企業在 Windows Active Directory 中增加使用者時,卻不會自動在加入網域的 Linux 伺服器中自動新增該使用者的個人目錄,而是僅有當以該使用者登入至 Linux 伺服器中時才會自動建立個人目錄,此時就會造成企業營運管理的困擾。所以我們可以設定當使用者第一次登入 SAS Enterprise Guide 和 SAS Enterprise Miner 客戶端工具時就會自動建立使用者目錄,請參考以下指令設定。

1
2
3
4
5
6
7
8
9
10
$ sudo vi /etc/pam.d/sasauth-mkhomedir.sh
#!/bin/sh
dbus-send --system --dest=com.redhat.oddjob_mkhomedir --print-reply / com.redhat.oddjob_mkhomedir.mkhomedirfor string:"$PAM_USER"
:wq!
$ sudo chmod +x /etc/pam.d/sasauth-mkhomedir.sh
$ sudo vi /etc/pam.d/sasauth

account optional pam_exec.so /etc/pam.d/sasauth-mkhomedir.sh

:wq!

手動建立使用者授權

最後我們一開始還是需要透過 SAS Management Console 手動建立使用者授權才能夠針對不同使用者授予適當的 SAS 平台操作權限,主要有三個步驟,分別為:

  1. 新增使用者
  2. 設定網域帳號
  3. 設定群組和角色

總結我們主要透過設定 PAM 驗證方式、自動建立使用者目錄和手動建立使用者授權三個階段就能夠完成 SAS 9 平台以 Windows Active Directory 網域中的帳號和密碼進行登入操作的設定。至於是否有機會自動建立使用者授權,之後再進行分享啦!

相關資源

解決問題 Active Directory (2)

教學目標

主要解決將 Linux 伺服器加入 Windows Active Directory 網域中的問題。

重點概念

首先我們要如何將 Linux 伺服器加入 Windows Active Directory 網域中,主要有三個階段,分別為:

  1. 前置作業。
  2. 加入網域。
  3. 測試驗證。

前置作業

接著前置作業又可分別為三個步驟,分別為:

  1. 安裝必要套件。
  2. 設定 Kerberos 客戶端。
  3. 取得 Kerberos 票據。

安裝必要套件

一開始我們必須安裝八個主要的套件,主要有:

  1. realmd
  2. sssd
  3. oddjob
  4. oddjob-mkhomedir
  5. adcli
  6. samba-common
  7. krb5-workstation
  8. krb5-devel
1
$ sudo yum -y install realmd sssd oddjob oddjob-mkhomedir adcli samba-common krb5-workstation krb5-devel

設定 Kerberos 客戶端

當安裝完成必要套件之後,我們必須設定 Kerberos 客戶端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ sudo vi /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = CORP.COM
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
CORP.COM = {
kdc = AD.CORP.COM
admin_server = AD.CORP.COM
}

[domain_realm]
.corp.com = CORP.COM
corp.com = CORP.COM
:wq!

取得 Kerberos 票據

當完成 Kerberos 客戶端設定之後,我們就需要取得 Kerberos 票據

1
2
3
4
5
$ kinit -V  [網域管理者帳號]
Using default cache: persistent:0:0
Using principal: [網域管理者帳號]@CORP.COM
Password for [網域管理者帳號]@CORP.COM:
Authenticated to Kerberos v5

加入網域

再來加入網域又可分別為三個步驟,分別為:

  1. 設定工具。
  2. 探索網域。
  3. 加入網域。

設定工具

我們主要會透過 realmd 工具將 Linux 伺服器加入網域,因此我們必須先設定 realmd.conf 工具。

1
2
3
4
5
6
7
8
$ vi /etc/realmd.conf
[users]
default-home = /home/%U
default-shell = /bin/bash

[corp.com]
fully-qualified-names = no
:wq!

探索網域

當設定完成之後,我們能夠嘗試查看網域資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ realm discover --verbose CORP.COM
* Resolving: _ldap._tcp.corp.example.com
* Performing LDAP DSE lookup on: 192.168.202.5
* Successfully discovered: corp.example.com
corp.example.com
type: kerberos
realm-name: CORP.COM
domain-name: corp.example.com
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common

加入網域

當查看網域資訊完成之後,我們就能夠透過網域管理者帳號加入 Windows Active Directory 網域。

1
$ realm join -U [網域管理者帳號] --computer-name [主機名稱] CORP.COM

測試驗證

最後測試驗證又可分別為三個步驟,分別為:

  1. 確認網域資訊
  2. 取得使用者資訊
  3. 登入使用者

確認網域資訊

我們主要透過 realmd 工具確認網域資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ realm list
CORP.COM
type: kerberos
realm-name: CORP.COM
domain-name: corp.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@corp.com
login-policy: allow-realm-logins

取得使用者資訊

當確認網域資訊完成之後,我們就能夠嘗試取得網域中的使用者資訊。

1
2
$ id CORP\\USER
uid=1747601109(USER@CORP.COM) gid=1747600513(domain users@CORP.COM) groups=1747600513(domain users@CORP.COM)

登入使用者

當確認取得使用者資訊之後,最後一步就是登入網域中的使用者,此時若能夠成功登入,並且建立使用者目錄,就已經完成將 Linux 伺服器加入 Windows Active Directory 網域中了。

1
2
3
$ su - CORP\\USER
Password:
Creating home directory for USER@CORP.COM.

總結我們僅需簡單三個階段的步驟就能夠將 Linux 伺服器加入 Windows Active Directory 網域中。

相關資源

SAS Viya (19)

教學目標

初步了解 SAS Viya 平台中如何整合 LDAP 部署身份識別的服務。

重點概念

首先在 SAS Viya 平台部署中,身份識別主要是由環境設定的身份識別提供者所管理,其中身份識別提供者必須是 LDAP 伺服器,當我們部署 SAS Viya 平台之後,初始設定就需要設定從 LDAP 伺服器取得使用者和群組的身份識別資訊。此時對於 LDAP 基本了解將有助於 SAS Viya 平台管理員可以使用與 LDAP 管理員相同語言進行溝通。

接著什麼是 LDAP,LDAP 主要是存取目錄伺服器的的輕量級協定,目錄伺服器主要是一個分層物件導向的資料庫,LDAP 伺服器主要可以用於組織任何事情,最常見的用途就是作為一個身份管理系統,以利組織使用者和群組成員。其中 LDAP 目錄主要是以樹狀方式進行組織,目錄為目錄實體的樹,實體包括一組屬性,屬性有名稱和一個或多個值,像是 uid 為使用者名稱、cn 為通用名稱、displayName 為顯示名稱、objectclass 為物件類型…等。此外我們會使用 DNS 名稱表示樹的組織結構,像是 OU=org1, DC=sas, DC=com,所謂 DC 為網域元件,OU 為組織單位,主要為實體的分組或集合,同時組織單位可以包含其它組織單位。但是我們要如何在目錄的樹中找到我們需要的物件呢?此時在目錄中每個實體皆有一個唯一的識別碼,稱為專有名稱 (Distinguished Name,DN),同時也就是目錄樹中物件的完整路徑,像是使用者 Leo 的專有名稱為「uid=Leo, OU=org1, DC=sas, DC=com」或在 AD 網域中為「CN=Leo, OU=org1, DC=sas, DC=com」。此外我們也能夠查詢和過濾 LDAP 伺服器所提供的資訊,像是 (&(objectclass = inetorgperson)(o = org1)) 則是返回所有 inetorgperson 類型的物件,並且組織屬於 org1 的人員。

再來為什麼我們需要知道 LDAP 的概念?因為我們必須更新 SAS Viya 平台中的身份識別設定才能夠開始使用 SAS Viya 平台,作為一個管理員,最常見的設定項目主要有兩項,分別為:

  1. baseDN:主要讓 LDAP 伺服器從此實體開始搜尋樹中的實體。
  2. objectFilter:主要讓 LDAP 伺服器識別和限制返回的使用者和群組。

請注意在 SAS Viya 平台中我們主要會設定三個項目,分別為:

  1. sas.identities.providers.ldap.connection :主要設定 LDAP 伺服器的連線資訊,重要屬性欄位為 host、port、userDN、password、…等。
  2. sas.identities.providers.ldap.group:主要設定 LDAP 伺服器讀取群組的資訊,重要屬性欄位為 baseDN 等,至於 objectFilter 屬性欄位則會根據組織需求進行調整。
  3. sas.identities.providers.ldap.user:主要設定 LDAP 伺服器讀取使用者的資訊,重要屬性欄位為 baseDN 等,至於 objectFilter 屬性欄位則會根據組織需求進行調整。

最後若是我們要設定 Active Directory 為 LDAP 提供者,則僅需要設定下述屬性欄位即可。此外除了設定 389 連接埠搜尋網域中的物件之外,我們還能夠設定 3268 連接埠,以利以全域目錄的方式支援搜尋網域森林中的 Active Directory 物件,無論物件儲存在什麼位置,皆會以最快的速度和最低的網路流量在森林中進行搜尋。

1
2
3
4
5
6
7
8
9
10
11
config:
application:
sas.identities.providers.ldap.connection:
host: '<Active Directory 主機名稱>'
port: 389
userDN: '<服務帳號專有名稱>'
password: '<服務帳號密碼>'
sas.identities.providers.ldap.group:
baseDN: '<開始搜尋群組的組織專有名稱>'
sas.identities.providers.ldap.user:
baseDN: '<開始搜尋使用者的組織專有名稱>'

總結目前 SAS Viya 平台透過 LDAP 提供者進行身份識別的整合應用,但是在企業大多是以 Active Directory 伺服器為主,此時我們可以透過簡單的設定將「特定單一組織」中的所有使用者和群組載入 SAS Viya 平台中進行身份識別的應用。

相關概念

解決問題 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 網域的問題,同時能夠符合許多企業的資安政策,以利導入系統平台的解決方案。

相關資源