手動將 Amazon EC2 Linux 執行個體加入 AWS Managed Microsoft AD Active Directory - AWS Directory Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

手動將 Amazon EC2 Linux 執行個體加入 AWS Managed Microsoft AD Active Directory

除了 Amazon EC2 Windows執行個體之外,您也可以將特定 Amazon EC2 Linux 執行個體加入 AWS Managed Microsoft AD Active Directory。系統支援下列 Linux 執行個體分佈和版本:

  • Amazon Linux AMI 2018.03.0

  • Amazon Linux 2 (64 位元 x86)

  • Amazon Linux 2023 AMI

  • Red Hat Enterprise Linux 8 (HVM) (64 位元 x86)

  • Ubuntu Server 18.04 LTS 及 Ubuntu Server 16.04 LTS

  • CentOS 7 x86-64

  • SUSE Linux Enterprise Server 15 SP1

注意

其他 Linux 分佈和版本也許能正常運作,但尚未經過測試。

將 Linux 執行個體加入您的 AWS Managed Microsoft AD

在將 Amazon Linux、CentOS、Red Hat 或 Ubuntu 執行個體加入目錄之前,必須先依照 無縫加入您的 Linux 執行個體 中的指定啟動執行個體。

重要

以下某些程序若未正確執行,可能會導致您的執行個體無法連線或無法使用。因此,我們強烈建議您在執行這些程序之前,對您的執行個體進行備份或擷取快照。

將 Linux 執行個體加入您的目錄

使用以下其中一個標籤,依照您的特定 Linux 執行個體的步驟:

Amazon Linux
  1. 使用任何 SSH 用戶端連線到執行個體。

  2. 設定 Linux 執行個體以使用 AWS Directory Service所提供 DNS 伺服器的 DNS 伺服器 IP 地址。欲執行此作業,您可以在連接到 VPC 的 DHCP 選項集中進行設定,或在執行個體上手動設定。如果您想要手動進行設定,請參閱 AWS 知識中心的如何將靜態 DNS 伺服器指派給私有 Amazon EC2 執行個體,了解為特定 Linux 分佈和版本設定持久性 DNS 伺服器的方式。

  3. 請確定您的 Amazon Linux - 64 位元執行個體處於最新狀態。

    sudo yum -y update
  4. 在您的 Linux 執行個體上安裝所需的 Amazon Linux 套件。

    注意

    系統可能已安裝其中一些套裝服務。

    在安裝套件時,可能會出現好幾個跳出式設定畫面。您通常可以將這些畫面中的欄位留白。

    Amazon Linux
    sudo yum install samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
    注意

    如需協助確定您所使用的 Amazon Linux 版本,請參閱 《Amazon EC2 Linux 執行個體使用者指南》中的識別 Amazon Linux 映像

  5. 使用下列命令將執行個體加入目錄。

    sudo realm join -U join_account@EXAMPLE.COM example.com --verbose
    join_account@EXAMPLE.COM

    example.com 域中具備域加入權限的帳戶。請在系統提示時,輸入該帳戶的密碼。如需委派這些權限的詳細資訊,請參閱「委派 AWS Managed Microsoft AD 的目錄聯結權限」。

    example.com

    目錄的完整 DNS 名稱。

    ... * Successfully enrolled machine in realm
  6. 設定 SSH 服務以允許密碼身分驗證。

    1. 在文字編輯器中開啟 /etc/ssh/sshd_config 檔案。

      sudo vi /etc/ssh/sshd_config
    2. PasswordAuthentication 設定設為 yes

      PasswordAuthentication yes
    3. 重新啟動 SSH 服務。

      sudo systemctl restart sshd.service

      或使用:

      sudo service sshd restart
  7. 執行個體重新啟動後,請使用任何 SSH AWS 用戶端連線到執行個體,並執行下列步驟,將委派管理員群組新增至 sudoers 清單:

    1. 使用下列命令開啟 sudoers 檔案:

      sudo visudo
    2. sudoers 檔案的底部加入下列程式碼,然後儲存檔案。

      ## Add the "AWS Delegated Administrators" group from the example.com domain. %AWS\ Delegated\ Administrators@example.com ALL=(ALL:ALL) ALL

      (上述範例使用 "\<space>" 來建立 Linux 空白字元。)

CentOS
  1. 使用任何 SSH 用戶端連線到執行個體。

  2. 設定 Linux 執行個體以使用 AWS Directory Service所提供 DNS 伺服器的 DNS 伺服器 IP 地址。欲執行此作業,您可以在連接到 VPC 的 DHCP 選項集中進行設定,或在執行個體上手動設定。如果您想要手動進行設定,請參閱 AWS 知識中心的如何將靜態 DNS 伺服器指派給私有 Amazon EC2 執行個體,了解為特定 Linux 分佈和版本設定持久性 DNS 伺服器的方式。

  3. 請確定您的 CentOS 7 執行個體處於最新狀態。

    sudo yum -y update
  4. 在您的 CentOS 7 執行個體上安裝必要的套裝服務。

    注意

    系統可能已安裝其中一些套裝服務。

    在安裝套件時,可能會出現好幾個跳出式設定畫面。您通常可以將這些畫面中的欄位留白。

    sudo yum -y install sssd realmd krb5-workstation samba-common-tools
  5. 使用下列命令將執行個體加入目錄。

    sudo realm join -U join_account@example.com example.com --verbose
    join_account@example.com

    example.com 域中具備域加入權限的帳戶。請在系統提示時,輸入該帳戶的密碼。如需委派這些權限的詳細資訊,請參閱「委派 AWS Managed Microsoft AD 的目錄聯結權限」。

    example.com

    目錄的完整 DNS 名稱。

    ... * Successfully enrolled machine in realm
  6. 設定 SSH 服務以允許密碼身分驗證。

    1. 在文字編輯器中開啟 /etc/ssh/sshd_config 檔案。

      sudo vi /etc/ssh/sshd_config
    2. PasswordAuthentication 設定設為 yes

      PasswordAuthentication yes
    3. 重新啟動 SSH 服務。

      sudo systemctl restart sshd.service

      或使用:

      sudo service sshd restart
  7. 執行個體重新啟動後,請使用任何 SSH AWS 用戶端連線到執行個體,並執行下列步驟,將委派管理員群組新增至 sudoers 清單:

    1. 使用下列命令開啟 sudoers 檔案:

      sudo visudo
    2. sudoers 檔案的底部加入下列程式碼,然後儲存檔案。

      ## Add the "AWS Delegated Administrators" group from the example.com domain. %AWS\ Delegated\ Administrators@example.com ALL=(ALL:ALL) ALL

      (上述範例使用 "\<space>" 來建立 Linux 空白字元。)

Red Hat
  1. 使用任何 SSH 用戶端連線到執行個體。

  2. 設定 Linux 執行個體以使用 AWS Directory Service所提供 DNS 伺服器的 DNS 伺服器 IP 地址。欲執行此作業,您可以在連接到 VPC 的 DHCP 選項集中進行設定,或在執行個體上手動設定。如果您想要手動進行設定,請參閱 AWS 知識中心的如何將靜態 DNS 伺服器指派給私有 Amazon EC2 執行個體,了解為特定 Linux 分佈和版本設定持久性 DNS 伺服器的方式。

  3. 確定 Red Hat 64 位元執行個體是最新版本。

    sudo yum -y update
  4. 在您的 Linux 執行個體上,安裝必要的 Red Hat 套件。

    注意

    系統可能已安裝其中一些套裝服務。

    在安裝套件時,可能會出現好幾個跳出式設定畫面。您通常可以將這些畫面中的欄位留白。

    sudo yum -y install sssd realmd krb5-workstation samba-common-tools
  5. 使用下列命令將執行個體加入目錄。

    sudo realm join -v -U join_account example.com --install=/
    join_account

    example.com 域中帳戶的 sAMAccountName 具備域加入權限。請在系統提示時,輸入該帳戶的密碼。如需委派這些權限的詳細資訊,請參閱「委派 AWS Managed Microsoft AD 的目錄聯結權限」。

    example.com

    目錄的完整 DNS 名稱。

    ... * Successfully enrolled machine in realm
  6. 設定 SSH 服務以允許密碼身分驗證。

    1. 在文字編輯器中開啟 /etc/ssh/sshd_config 檔案。

      sudo vi /etc/ssh/sshd_config
    2. PasswordAuthentication 設定設為 yes

      PasswordAuthentication yes
    3. 重新啟動 SSH 服務。

      sudo systemctl restart sshd.service

      或使用:

      sudo service sshd restart
  7. 執行個體重新啟動後,請使用任何 SSH AWS 用戶端連線到執行個體,並執行下列步驟,將委派管理員群組新增至 sudoers 清單:

    1. 使用下列命令開啟 sudoers 檔案:

      sudo visudo
    2. sudoers 檔案的底部加入下列程式碼,然後儲存檔案。

      ## Add the "AWS Delegated Administrators" group from the example.com domain. %AWS\ Delegated\ Administrators@example.com ALL=(ALL:ALL) ALL

      (上述範例使用 "\<space>" 來建立 Linux 空白字元。)

SUSE
  1. 使用任何 SSH 用戶端連線到執行個體。

  2. 設定 Linux 執行個體,讓其得以使用 AWS Directory Service所提供之 DNS 伺服器的 DNS 伺服器 IP 地址。欲執行此作業,您可以在連接到 VPC 的 DHCP 選項集中進行設定,或在執行個體上手動設定。如果您想要手動設定,請參閱 AWS 知識中心中的如何將靜態 DNS 伺服器指派給私有 Amazon EC2 執行個體,以取得為特定 Linux 發行版本設定持久性 DNS 伺服器的指引。

  3. 請確定您的 SUSE Linux 15 執行個體處於最新狀態。

    1. 連接套件儲存庫。

      sudo SUSEConnect -p PackageHub/15.1/x86_64
    2. 更新 SUSE。

      sudo zypper update -y
  4. 在您的 Linux 執行個體上安裝所需的 SUSE Linux 15 套件。

    注意

    系統可能已安裝其中一些套裝服務。

    在安裝套件時,可能會出現好幾個跳出式設定畫面。您通常可以將這些畫面中的欄位留白。

    sudo zypper -n install realmd adcli sssd sssd-tools sssd-ad samba-client krb5-client
  5. 使用下列命令將執行個體加入目錄。

    sudo realm join -U join_account example.com --verbose
    join_account

    example.com 網域的 sAMAccountName 具備網域加入權限。請在系統提示時,輸入該帳戶的密碼。如需委派這些權限的詳細資訊,請參閱「委派 AWS Managed Microsoft AD 的目錄聯結權限」。

    example.com

    目錄的完整 DNS 名稱。

    … realm: Couldn't join realm: Enabling SSSD in nsswitch.conf and PAM failed.

    請注意,以下兩者都是預期會發生的傳回項目。

    ! Couldn't authenticate with keytab while discovering which salt to use: ! Enabling SSSD in nsswitch.conf and PAM failed.
  6. 手動啟用 PAM 中的 SSSD

    sudo pam-config --add --sss
  7. 編輯 nsswitch.conf 以在 nsswitch.conf 中啟用 SSSD

    sudo vi /etc/nsswitch.conf
    passwd: compat sss group: compat sss shadow: compat sss
  8. 將以下資料行新增到 /etc/pam.d/common-session ,以便在初始登入時自動建立主目錄

    sudo vi /etc/pam.d/common-session
    session optional pam_mkhomedir.so skel=/etc/skel umask=077
  9. 重新啟動執行個體以完成加入網域的程序。

    sudo reboot
  10. 使用任何 SSH 用戶端重新連線至執行個體,以確認域加入已成功完成並完成其他步驟。

    1. 確認執行個體已在網域上註冊

      sudo realm list
      example.com type: kerberos realm-name: EXAMPLE.COM domain-name: example.com configured: kerberos-member server-software: active-directory client-software: sssd required-package: sssd-tools required-package: sssd required-package: adcli required-package: samba-client login-formats: %U@example.com login-policy: allow-realm-logins
    2. 驗證 SSSD 精靈的狀態

      systemctl status sssd
      sssd.service - System Security Services Daemon Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-04-15 16:22:32 UTC; 3min 49s ago Main PID: 479 (sssd) Tasks: 4 CGroup: /system.slice/sssd.service ├─479 /usr/sbin/sssd -i --logger=files ├─505 /usr/lib/sssd/sssd_be --domain example.com --uid 0 --gid 0 --logger=files ├─548 /usr/lib/sssd/sssd_nss --uid 0 --gid 0 --logger=files └─549 /usr/lib/sssd/sssd_pam --uid 0 --gid 0 --logger=files
  11. 允許使用者透過 SSH 和主控台存取

    sudo realm permit join_account@example.com

    允許透過 SSH 和主控台存取網域群組

    sudo realm permit -g 'AWS Delegated Administrators'

    或者允許所有使用者存取

    sudo realm permit --all
  12. 設定 SSH 服務以允許密碼身分驗證。

    1. 在文字編輯器中開啟 /etc/ssh/sshd_config 檔案。

      sudo vi /etc/ssh/sshd_config
    2. PasswordAuthentication 設定設為 yes

      PasswordAuthentication yes
    3. 重新啟動 SSH 服務。

      sudo systemctl restart sshd.service

      或使用:

      sudo service sshd restart
  13. 13. 執行個體重新啟動後,請使用任何 SSH AWS 用戶端連線到執行個體,並執行下列步驟,將委派管理員群組新增至 sudoers 清單:

    1. 使用下列命令開啟 sudoers 檔案:

      sudo visudo
    2. 在 sudoers 檔案的底部加入下列程式碼,然後儲存檔案。

      ## Add the "Domain Admins" group from the awsad.com domain. %AWS\ Delegated\ Administrators@example.com ALL=(ALL) NOPASSWD: ALL
Ubuntu
  1. 使用任何 SSH 用戶端連線到執行個體。

  2. 設定 Linux 執行個體以使用 AWS Directory Service所提供 DNS 伺服器的 DNS 伺服器 IP 地址。欲執行此作業,您可以在連接到 VPC 的 DHCP 選項集中進行設定,或在執行個體上手動設定。如果您想要手動進行設定,請參閱 AWS 知識中心的如何將靜態 DNS 伺服器指派給私有 Amazon EC2 執行個體,了解為特定 Linux 分佈和版本設定持久性 DNS 伺服器的方式。

  3. 確定 Ubuntu 64 位元執行個體是最新版本。

    sudo apt-get update sudo apt-get -y upgrade
  4. 在您的 Linux 執行個體上,安裝必要的 Ubuntu 套件。

    注意

    系統可能已安裝其中一些套裝服務。

    在安裝套件時,可能會出現好幾個跳出式設定畫面。您通常可以將這些畫面中的欄位留白。

    sudo apt-get -y install sssd realmd krb5-user samba-common packagekit adcli
  5. 停用反向 DNS 解析,並將預設領域設定為網域的 FQDN。Ubuntu 執行個體在 DNS 中必須能夠反向解析,領域才能使用。否則,您必須依照下列步驟,停用在 /etc/krb5.conf 中的反向 DNS:

    sudo vi /etc/krb5.conf
    [libdefaults] default_realm = EXAMPLE.COM rdns = false
  6. 使用下列命令將執行個體加入目錄。

    sudo realm join -U join_account example.com --verbose
    join_account@example.com

    example.com 域中帳戶的 sAMAccountName 具備域加入權限。請在系統提示時,輸入該帳戶的密碼。如需委派這些權限的詳細資訊,請參閱「委派 AWS Managed Microsoft AD 的目錄聯結權限」。

    example.com

    目錄的完整 DNS 名稱。

    ... * Successfully enrolled machine in realm
  7. 設定 SSH 服務以允許密碼身分驗證。

    1. 在文字編輯器中開啟 /etc/ssh/sshd_config 檔案。

      sudo vi /etc/ssh/sshd_config
    2. PasswordAuthentication 設定設為 yes

      PasswordAuthentication yes
    3. 重新啟動 SSH 服務。

      sudo systemctl restart sshd.service

      或使用:

      sudo service sshd restart
  8. 執行個體重新啟動後,請使用任何 SSH AWS 用戶端連線到執行個體,並執行下列步驟,將委派管理員群組新增至 sudoers 清單:

    1. 使用下列命令開啟 sudoers 檔案:

      sudo visudo
    2. sudoers 檔案的底部加入下列程式碼,然後儲存檔案。

      ## Add the "AWS Delegated Administrators" group from the example.com domain. %AWS\ Delegated\ Administrators@example.com ALL=(ALL:ALL) ALL

      (上述範例使用 "\<space>" 來建立 Linux 空白字元。)

限制帳戶登入存取

由於在 Active Directory 中定義了所有帳戶,因此目錄中的所有使用者預設可登入該執行個體。您可以在 sssd.conf 中使用 ad_access_filter 只允許特定使用者登入執行個體。例如:

ad_access_filter = (memberOf=cn=admins,ou=Testou,dc=example,dc=com)
memberOf

表示唯有使用者是特定群組的成員時,才可以存取執行個體。

cn

應該具備存取權的群組通用名稱。在此範例中,群組名稱為 admins

ou

這代表上述群組所在的組織單位。在此範例中,OU 為 Testou

dc

這代表網域的網域元件。在此範例中為 example

dc

這代表額外的網域元件。在此範例中為 com

您必須將 ad_access_filter 手動新增至 /etc/sssd/sssd.conf

在文字編輯器中開啟 /etc/sssd/sssd.conf 檔案。

sudo vi /etc/sssd/sssd.conf

執行此動作後,您的 sssd.conf 可能如下所示:

[sssd] domains = example.com config_file_version = 2 services = nss, pam [domain/example.com] ad_domain = example.com krb5_realm = EXAMPLE.COM realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = ad ad_access_filter = (memberOf=cn=admins,ou=Testou,dc=example,dc=com)

您需要重新啟動 sssd 服務,才能使設定生效:

sudo systemctl restart sssd.service

或者,您可以使用:

sudo service sssd restart

由於在 Active Directory 中定義了所有帳戶,因此目錄中的所有使用者預設可登入該執行個體。您可以在 sssd.conf 中使用 ad_access_filter 只允許特定使用者登入執行個體。

例如:

ad_access_filter = (memberOf=cn=admins,ou=Testou,dc=example,dc=com)
memberOf

表示唯有使用者是特定群組的成員時,才可以存取執行個體。

cn

應該具備存取權的群組通用名稱。在此範例中,群組名稱為 admins

ou

這代表上述群組所在的組織單位。在此範例中,OU 為 Testou

dc

這代表網域的網域元件。在此範例中為 example

dc

這代表額外的網域元件。在此範例中為 com

您必須將 ad_access_filter 手動新增至 /etc/sssd/sssd.conf

  1. 在文字編輯器中開啟 /etc/sssd/sssd.conf 檔案。

    sudo vi /etc/sssd/sssd.conf
  2. 執行此動作後,您的 sssd.conf 可能如下所示:

    [sssd] domains = example.com config_file_version = 2 services = nss, pam [domain/example.com] ad_domain = example.com krb5_realm = EXAMPLE.COM realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = ad ad_access_filter = (memberOf=cn=admins,ou=Testou,dc=example,dc=com)
  3. 您需要重新啟動 sssd 服務,才能使設定生效:

    sudo systemctl restart sssd.service

    或者,您可以使用:

    sudo service sssd restart

ID 映射

ID 映射可以透過兩種方法執行,以維護 UNIX/Linux 使用者識別符 (UID) 和群組識別符 (GID) 以及 Windows 和 Active Directory 安全識別符 (SID) 身分之間的統一體驗。這些方法是:

  1. 集中

  2. 分散式

注意

Active Directory 中的集中式使用者身分映射需要可攜式作業系統界面或 POSIX。

集中式使用者身分映射

Active Directory 或其他輕量型目錄存取通訊協定 (LDAP) 服務為 Linux 使用者提供 UID 和 GID。在 Active Directory 中,如果已設定 POSIX 延伸,這些識別符會存放在使用者的屬性中:

  • UID - Linux 使用者名稱 (字串)

  • UID 號碼 - Linux 使用者 ID 號碼 (整數)

  • GID 號碼 - Linux 群組 ID 號碼 (整數)

若要將 Linux 執行個體設定為使用 Active Directory 中的 UID 和 GID,ldap_id_mapping = False請在 sssd.conf 檔案中設定 。設定此值之前,請確認您已將 UID、UID 號碼和 GID 號碼新增至 Active Directory 中的使用者和群組。

分散式使用者身分映射

如果 Active Directory 沒有 POSIX 延伸模組,或者您選擇不集中管理身分映射,Linux 可以計算 UID 和 GID 值。Linux 使用使用者的唯一安全識別符 (SID) 來維持一致性。

若要設定分散式使用者 ID 映射,ldap_id_mapping = True請在 sssd.conf 檔案中設定 。

常見問題

如果您設定 ldap_id_mapping = False,有時啟動 SSSD 服務將會失敗。此失敗的原因是因為不支援變更 UIDs。當您從 ID 映射變更為 POSIX 屬性,或從 POSIX 屬性變更為 ID 映射時,我們建議您刪除 SSSD 快取。如需 ID 映射和 ldap_id_mapping 參數的進一步詳細資訊,請參閱 Linux 命令列中的 sssd-ldap(8) man 頁面。

連線至 Linux 執行個體

當使用者使用 SSH 用戶端連線到執行個體時,系統會提示其輸入使用者名稱。如果使用者想輸入使用者名稱,可以善用 username@example.comEXAMPLE\username 格式。視您使用的 Linux 發行版本而定,回應會如下所示:

Amazon Linux、Red Hat Enterprise Linux 及 CentOS Linux

login as: johndoe@example.com johndoe@example.com's password: Last login: Thu Jun 25 16:26:28 2015 from XX.XX.XX.XX

SUSE Linux

SUSE Linux Enterprise Server 15 SP1 x86_64 (64-bit) As "root" (sudo or sudo -i) use the: - zypper command for package management - yast command for configuration management Management and Config: https://www.suse.com/suse-in-the-cloud-basics Documentation: https://www.suse.com/documentation/sles-15/ Forum: https://forums.suse.com/forumdisplay.php?93-SUSE-Public-Cloud Have a lot of fun...

Ubuntu Linux

login as: admin@example.com admin@example.com@10.24.34.0's password: Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-1057-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Apr 18 22:03:35 UTC 2020 System load: 0.01 Processes: 102 Usage of /: 18.6% of 7.69GB Users logged in: 2 Memory usage: 16% IP address for eth0: 10.24.34.1 Swap usage: 0%