手动将亚马逊 EC2 Linux 实例加入您的 AWS 托管微软 AD 活动目录 - AWS Directory Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

手动将亚马逊 EC2 Linux 实例加入您的 AWS 托管微软 AD 活动目录

除了亚马逊 EC2 Windows 实例外,您还可以将某些亚马逊 EC2 Linux 实例加入您的 AWS 托管微软 AD 活动目录。支持以下 Linux 实例分发版和版本:

  • Amazon Linux AMI 2018.03.0

  • Amazon Linux 2(64 位 x86)

  • 亚马逊 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 托管微软 AD

必须先按照 无缝加入你的 Linux 实例 中指定的步骤启动实例,然后才能将 Amazon Linux、CentOS、Red Hat 或 Ubuntu 实例加入目录。

重要

以下某些过程如果未正确执行,可能会使实例无法访问或不可用。因此,我们强烈建议在执行这些过程之前对实例创建备份或拍摄快照。

将 Linux 实例加入目录

使用以下选项卡之一对特定 Linux 实例执行步骤:

Amazon Linux
  1. 使用任何 SSH 客户端连接到实例。

  2. 将 Linux 实例配置为使用 AWS Directory Service提供的 DNS 服务器的 DNS 服务器 IP 地址。可以通过在附加到 VPC 的 DHCP 选项集中进行设置,或是通过在实例上手动设置,来执行此操作。如果要手动设置,请参阅 AWS 知识中心的如何为私有 EC2 实例分配静态 DNS 服务器,以了解有关为特定 Linux 分发版和版本设置持久性 DNS 服务器的指导。

  3. 确保 64 位 Amazon Linux 实例为最新状态。

    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 知识中心的如何为私有 EC2 实例分配静态 DNS 服务器,以了解有关为特定 Linux 分发版和版本设置持久性 DNS 服务器的指导。

  3. 确保 CentOS 7 实例为最新状态。

    sudo yum -y update
  4. 在 Linux 实例上安装所需 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 知识中心的如何为私有 EC2 实例分配静态 DNS 服务器,以了解有关为特定 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

    e x am AccountName ple.com 域中具有域加入权限的账户的 SaM。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委托 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

    e xample.com 域AccountName 中具有域加入权限的 SaM。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委托 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 知识中心的如何为私有 EC2 实例分配静态 DNS 服务器,以了解有关为特定 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

    e x am AccountName ple.com 域中具有域加入权限的账户的 SaM。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委托 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 映射,以维护 UNIX/Linux 用户标识符 (UID) 和组标识符 (GID) 以及 Windows 和Active Directory安全标识符 (SID) 身份之间的统一体验。

  1. 集中化

  2. 分布式

注意

中的集中式用户身份映射Active Directory需要便携式操作系统接口或 POSIX。

集中式用户身份映射

Active Directory或其他轻型目录访问协议 (LDAP) 服务为 Linux 用户提供 UID 和 GID。在中Active Directory,这些标识符存储在用户的属性中:

  • UID-Linux 用户名(字符串)

  • UID 号-Linux 用户 ID 号(整数)

  • GID 号码-Linux 群组 ID 号(整数)

要将 Linux 实例配置为使用来自的 UID 和 GID,请在 sssd. Active Directory conf ldap_id_mapping = False 文件中进行设置。在设置此值之前,请确认您已向中的用户和群组添加了 UID、UID 号和 GID 号。Active Directory

分布式用户身份映射

如果Active Directory没有 POSIX 扩展名或者您选择不集中管理身份映射,Linux 可以计算 UID 和 GID 值。Linux 使用用户的唯一安全标识符 (SID) 来保持一致性。

要配置分布式用户 ID 映射,请在 sssd.conf 文件ldap_id_mapping = True中进行设置。

连接到 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%