使用 Winbind 手动加入 Linux 实例 - AWS Directory Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 Winbind 手动加入 Linux 实例

您可以使用 Winbind 服务将您的 Linux 实例手动加入 AWS Managed Microsoft AD 域。这使您现有的本地 Active Directory 用户能够在访问加入 AWS Managed Microsoft AD 的 Linux 实例时使用其 AD 凭证。支持以下 Linux 实例分发版和版本:

  • Amazon Linux AMI 2018.03.0

  • Amazon Linux 2(64 位 x86)

  • 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 分发版和版本可能会正常运行,但未经过测试。

将实例加入目录

将 Amazon Linux、CentOS、Red Hat 或 Ubuntu 实例加入您的目录之前,必须首先根据 无缝加入 Windows EC2 实例 中的说明启动该实例。

重要

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

将 Linux 实例加入目录

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

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

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

  3. 确保您的 Linux 实例是最新的。

    sudo yum -y update
  4. 在 Linux 实例上安装所需的 Samba/Winbind 软件包。

    sudo yum -y install authconfig samba samba-client samba-winbind samba-winbind-clients
  5. 创建主 smb.conf 文件的备份,以便在有任何故障的情况下可以还原到它:

    sudo cp /etc/samba/smb.conf /etc/samba/smb.bk
  6. 在文本编辑器中打开原始配置文件 [/etc/samba/smb.conf]。

    sudo vim /etc/samba/smb.conf

    填写您的 Active Directory 域环境信息,如以下示例所示:

    [global] workgroup = example security = ads realm = example.com idmap config * : rangesize = 1000000 idmap config * : range = 1000000-19999999 idmap config * : backend = autorid winbind enum users = no winbind enum groups = no template homedir = /home/%U@%D template shell = /bin/bash winbind use default domain = false
  7. 在文本编辑器中打开主机文件 [/etc/hosts]。

    sudo vim /etc/hosts

    添加您的 Linux 实例私有 IP 地址,如下所示:

    10.x.x.x Linux_hostname.example.com Linux_hostname
    注意

    如果您未在 /etc/hosts 文件中指定 IP 地址,则在将实例加入域时可能会收到以下 DNS 错误:

    No DNS domain configured for linux-instance. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETER

    此错误意味着加入成功,但 [net ads] 命令无法在 DNS 中注册 DNS 记录。

  8. 使用网络实用程序将 Linux 实例加入 Active Directory。

    sudo net ads join -U join_account@example.com
    join_account@example.com

    中的账户 example.com 具有域加入权限的 域。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委派 AWS Managed Microsoft AD 的目录加入权限.

    example.com

    目录的完全限定 DNS 名称。

    Enter join_account@example.com's password: Using short domain name -- example Joined 'IP-10-x-x-x' to dns domain 'example.com'
  9. 修改 PAM 配置文件,使用以下命令为 winbind 身份验证添加必要的条目:

    sudo authconfig --enablewinbind --enablewinbindauth --enablemkhomedir --update
  10. 通过编辑 /etc/ssh/sshd_config 文件将 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
  11. 重新启动实例后,使用任何 SSH 客户端连接到它,然后通过执行以下步骤将域用户或组的根权限添加到 sudoers 列表:

    1. 使用以下命令打开 sudoers 文件:

      sudo visudo
    2. 按如下所示,从您的信任或受信任域中添加所需的组或用户,然后保存它们。

      ## Adding Domain Users/Groups. %domainname\\AWS\ Delegated\ Administrators ALL=(ALL:ALL) ALL %domainname\\groupname ALL=(ALL:ALL) ALL domainname\\username ALL=(ALL:ALL) ALL %Trusted_DomainName\\groupname ALL=(ALL:ALL) ALL Trusted_DomainName\\username 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 实例上安装所需的 Samba/Winbind 软件包。

    sudo zypper in -y samba samba-winbind
  5. 创建主 smb.conf 文件的备份,以便在有任何故障的情况下可以还原到它:

    sudo cp /etc/samba/smb.conf /etc/samba/smb.bk
  6. 在文本编辑器中打开原始配置文件 [/etc/samba/smb.conf]。

    sudo vim /etc/samba/smb.conf

    填写您的 Active Directory 域环境信息,如以下示例所示:

    [global] workgroup = example security = ads realm = example.com idmap config * : rangesize = 1000000 idmap config * : range = 1000000-19999999 idmap config * : backend = autorid winbind enum users = no winbind enum groups = no template homedir = /home/%U@%D template shell = /bin/bash winbind use default domain = false
  7. 在文本编辑器中打开主机文件 [/etc/hosts]。

    sudo vim /etc/hosts

    添加您的 Linux 实例私有 IP 地址,如下所示:

    10.x.x.x Linux_hostname.example.com Linux_hostname
    注意

    如果您未在 /etc/hosts 文件中指定 IP 地址,则在将实例加入域时可能会收到以下 DNS 错误:

    No DNS domain configured for linux-instance. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETER

    此错误意味着加入成功,但 [net ads] 命令无法在 DNS 中注册 DNS 记录。

  8. 使用以下命令将 Linux 实例加入目录。

    sudo net ads join -U join_account@example.com
    join_account

    中的sAMAccountName example.com 具有域加入权限的 域。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委派 AWS Managed Microsoft AD 的目录加入权限.

    example.com

    目录的完全限定 DNS 名称。

    Enter join_account@example.com's password: Using short domain name -- example Joined 'IP-10-x-x-x' to dns domain 'example.com'
  9. 修改 PAM 配置文件,使用以下命令为 Winbind 身份验证添加必要的条目:

    sudo pam-config --add --winbind --mkhomedir
  10. 在文本编辑器中打开 Name Service Switch 配置文件 [/etc/nsswitch.conf]。

    vim /etc/nsswitch.conf

    添加 Winbind 指令,如下所示。

    passwd: files winbind shadow: files winbind group: files winbind
  11. 通过编辑 /etc/ssh/sshd_config 文件将 SSH 服务设置为允许密码身份验证。

    1. 在文本编辑器中打开 /etc/ssh/sshd_config 文件。

      sudo vim /etc/ssh/sshd_config
    2. PasswordAuthentication 设置设为 yes

      PasswordAuthentication yes
    3. 重新启动 SSH 服务。

      sudo systemctl restart sshd.service

      或者:

      sudo service sshd restart
  12. 重新启动实例后,使用任何 SSH 客户端连接到它,然后通过执行以下步骤将域用户或组的根权限添加到 sudoers 列表:

    1. 使用以下命令打开 sudoers 文件:

      sudo visudo
    2. 按如下所示,从您的信任或受信任域中添加所需的组或用户,然后保存它们。

      ## Adding Domain Users/Groups. %domainname\\AWS\ Delegated\ Administrators ALL=(ALL:ALL) ALL %domainname\\groupname ALL=(ALL:ALL) ALL domainname\\username ALL=(ALL:ALL) ALL %Trusted_DomainName\\groupname ALL=(ALL:ALL) ALL Trusted_DomainName\\username ALL=(ALL:ALL) ALL

      (以上示例使用“\\<space>”创建 Linux 空格字符。)

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

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

  3. 确保您的 Linux 实例是最新的。

    sudo yum -y update
    sudo apt-get -y upgrade
  4. 在 Linux 实例上安装所需的 Samba/Winbind 软件包。

    sudo apt -y install samba winbind libnss-winbind libpam-winbind
  5. 创建主 smb.conf 文件的备份,以便在发生任何故障时可以还原到它。

    sudo cp /etc/samba/smb.conf /etc/samba/smb.bk
  6. 在文本编辑器中打开原始配置文件 [/etc/samba/smb.conf]。

    sudo vim /etc/samba/smb.conf

    填写您的 Active Directory 域环境信息,如以下示例所示:

    [global] workgroup = example security = ads realm = example.com idmap config * : rangesize = 1000000 idmap config * : range = 1000000-19999999 idmap config * : backend = autorid winbind enum users = no winbind enum groups = no template homedir = /home/%U@%D template shell = /bin/bash winbind use default domain = false
  7. 在文本编辑器中打开主机文件 [/etc/hosts]。

    sudo vim /etc/hosts

    添加您的 Linux 实例私有 IP 地址,如下所示:

    10.x.x.x Linux_hostname.example.com Linux_hostname
    注意

    如果您未在 /etc/hosts 文件中指定 IP 地址,则在将实例加入域时可能会收到以下 DNS 错误:

    No DNS domain configured for linux-instance. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETER

    此错误意味着加入成功,但 [net ads] 命令无法在 DNS 中注册 DNS 记录。

  8. 使用网络实用程序将 Linux 实例加入 Active Directory。

    sudo net ads join -U join_account@example.com
    join_account@example.com

    中的账户 example.com 具有域加入权限的 域。在出现提示时输入账户的密码。有关委托这些权限的更多信息,请参阅委派 AWS Managed Microsoft AD 的目录加入权限.

    example.com

    目录的完全限定 DNS 名称。

    Enter join_account@example.com's password: Using short domain name -- example Joined 'IP-10-x-x-x' to dns domain 'example.com'
  9. 修改 PAM 配置文件,使用以下命令为 Winbind 身份验证添加必要的条目:

    sudo pam-auth-update --add --winbind --enable mkhomedir
  10. 在文本编辑器中打开 Name Service Switch 配置文件 [/etc/nsswitch.conf]。

    vim /etc/nsswitch.conf

    添加 Winbind 指令,如下所示。

    passwd: compat winbind group: compat winbind shadow: compat winbind
  11. 通过编辑 /etc/ssh/sshd_config 文件将 SSH 服务设置为允许密码身份验证。

    1. 在文本编辑器中打开 /etc/ssh/sshd_config 文件。

      sudo vim /etc/ssh/sshd_config
    2. PasswordAuthentication 设置设为 yes

      PasswordAuthentication yes
    3. 重新启动 SSH 服务。

      sudo systemctl restart sshd.service

      或者:

      sudo service sshd restart
  12. 重新启动实例后,使用任何 SSH 客户端连接到它,然后通过执行以下步骤将域用户或组的根权限添加到 sudoers 列表:

    1. 使用以下命令打开 sudoers 文件:

      sudo visudo
    2. 按如下所示,从您的信任或受信任域中添加所需的组或用户,然后保存它们。

      ## Adding Domain Users/Groups. %domainname\\AWS\ Delegated\ Administrators ALL=(ALL:ALL) ALL %domainname\\groupname ALL=(ALL:ALL) ALL domainname\\username ALL=(ALL:ALL) ALL %Trusted_DomainName\\groupname ALL=(ALL:ALL) ALL Trusted_DomainName\\username ALL=(ALL:ALL) ALL

      (以上示例使用“\\<space>”创建 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%