将 Ubuntu Linux 虚拟机加入 Microsoft Entra 域服务托管域
若要让用户使用一组凭据登录到 Azure 中的虚拟机(VM),可以将 VM 加入 Microsoft Entra 域服务托管域。 将 VM 加入域服务托管域时,可以使用域中的用户帐户和凭据登录和管理服务器。 还应用了托管域的组成员身份,以便控制对 VM 上的文件或服务的访问。
本文介绍如何将 Ubuntu Linux VM 加入托管域。
先决条件
若要完成本教程,需要以下资源和权限:
- 有效的 Azure 订阅。
- 如果没有 Azure 订阅,创建帐户。
- 与您的订阅相关联的 Microsoft Entra 租户,它可以与本地目录同步,也可以与仅限云的目录同步。
- 在 Microsoft Entra 租户中启用和配置Microsoft Entra 域服务托管域。
- 如果需要,第一个教程 创建并配置 Microsoft Entra Domain Services 的托管域。
- 属于托管域的用户帐户。 确保不会自动生成用户的 SAMAccountName 属性。 如果 Microsoft Entra 租户中的多个用户帐户具有相同 mailNickname 属性,则自动生成每个用户的 SAMAccountName 属性。 有关详细信息,请参阅如何在托管于 Microsoft Entra 域服务的域中同步对象和凭据。
- 唯一的 Linux VM 名称必须不超过 15 个字符,以避免可能导致 Active Directory 中冲突的截断名称。
创建并连接到 Ubuntu Linux VM
如果 Azure 中已有 Ubuntu Linux VM,请使用 SSH 连接到它,然后继续执行下一步,开始配置 VM。
如果需要创建 Ubuntu Linux VM,或者想要创建用于本文的测试 VM,可以使用以下方法之一:
创建 VM 时,请注意虚拟网络设置,确保 VM 可以与托管域通信:
- 将 VM 部署到启用了Microsoft Entra 域服务的对等互连虚拟网络中。
- 将 VM 部署到与 Microsoft Entra 域服务托管域不同的子网中。
部署 VM 后,请按照步骤使用 SSH 连接到 VM。
配置 "hosts" 文件
若要确保为托管域正确配置 VM 主机名,请编辑 /etc/hosts 文件并设置主机名:
sudo vi /etc/hosts
在 主机 文件中,更新 localhost 地址。 在以下示例中:
- aaddscontoso.com 是托管域的 DNS 域名。
- ubuntu 是您要加入至托管域的 Ubuntu VM 的主机名。
使用以下自己的值更新这些名称:
127.0.0.1 ubuntu.aaddscontoso.com ubuntu
完成后,使用编辑器的 :wq
命令保存并退出 主机 文件。
安装所需的包
VM 需要一些附加包才能将 VM 加入托管域。 若要安装和配置这些包,请使用 apt-get
更新和安装加入域工具
在 Kerberos 安装过程中,krb5-user 包会提示输入所有字母大写的领域名称。 例如,如果托管域的名称是 aaddscontoso.com,请输入 AADDSCONTOSO.COM 作为域。 安装将在 /etc/krb5.conf 配置文件中写入 [realm]
和 [domain_realm]
节。 请确保将领域名称指定为全大写形式。
sudo apt-get update
sudo apt-get install krb5-user samba sssd sssd-tools libnss-sss libpam-sss ntp ntpdate realmd adcli
配置网络时间协议 (NTP)
若要使域通信正常工作,Ubuntu VM 的日期和时间必须与托管域同步。 将托管域的 NTP 主机名添加到 /etc/ntp.conf 文件中。
使用编辑器打开 ntp.conf 文件:
sudo vi /etc/ntp.conf
在 ntp.conf 文件中,创建一行以添加托管域的 DNS 名称。 在以下示例中,添加了 aaddscontoso.com 项。 使用自己的 DNS 名称:
server aaddscontoso.com
完成后,使用编辑器的
:wq
命令保存并退出 ntp.conf 文件。若要确保 VM 与托管域同步,需要执行以下步骤:
- 停止 NTP 服务器
- 从托管域更新日期和时间
- 启动 NTP 服务
若要完成这些步骤,请运行以下命令。 将自己的 DNS 名称与
ntpdate
命令配合使用:sudo systemctl stop ntp sudo ntpdate aaddscontoso.com sudo systemctl start ntp
将 VM 加入托管域
在 VM 上安装所需的包并配置 NTP 后,将 VM 加入托管域。
使用
realm discover
命令发现托管域。 以下示例查找域 AADDSCONTOSO.COM。 请用所有大写字母指定您自己的托管域名:sudo realm discover AADDSCONTOSO.COM
如果
realm discover
命令找不到托管域,请查看以下故障排除步骤:- 确保该域可以从 VM 访问。 请尝试
ping aaddscontoso.com
查看是否返回了正答复。 - 检查 VM 是否已部署到托管域所在的同一虚拟网络或对等虚拟网络。
- 确认虚拟网络的 DNS 服务器设置已更新,以指向托管域的域控制器。
- 确保该域可以从 VM 访问。 请尝试
现在使用
kinit
命令初始化 Kerberos。 指定属于托管域的用户。 如果需要,将用户帐户添加到Microsoft Entra ID中的组。同样,必须以全部大写形式输入托管域名。 在以下示例中,名为
contosoadmin@aaddscontoso.com
的帐户用于初始化 Kerberos。 输入属于托管域的自己的用户帐户:sudo kinit -V contosoadmin@AADDSCONTOSO.COM
最后,使用
realm join
命令将 VM 加入托管域。 使用在上一kinit
命令中指定的属于该托管域的相同用户帐户,例如contosoadmin@AADDSCONTOSO.COM
:sudo realm join --verbose AADDSCONTOSO.COM -U 'contosoadmin@AADDSCONTOSO.COM' --install=/
将 VM 加入托管域需要一些时间。 以下示例输出显示 VM 已成功加入托管域:
Successfully enrolled machine in realm
如果您的 VM 无法成功完成域加入过程,请确保 VM 的网络安全组允许 TCP 和 UDP 协议的 464 端口上的出站 Kerberos 流量通过到您托管域的虚拟网络子网。
如果收到错误 未指定的 GSS 失败。次要代码可以提供更多信息(在 Kerberos 数据库中找不到服务器),打开文件 /etc/krb5.conf 并在 [libdefaults]
节中添加以下代码,然后重试:
rdns=false
更新 SSSD 配置
在上一步骤中安装的包之一是针对系统安全服务守护程序(SSSD)。 当用户尝试使用域凭据登录到 VM 时,SSSD 会将请求中继到身份验证提供程序。 在此方案中,SSSD 使用域服务对请求进行身份验证。
使用编辑器打开 sssd.conf 文件:
sudo vi /etc/sssd/sssd.conf
注释掉 和 之间的 use_fully_qualified_names 行,如下所示:
# use_fully_qualified_names = True
完成后,使用编辑器的
:wq
命令保存并退出 sssd.conf 文件。若要应用更改,请重启 SSSD 服务:
sudo systemctl restart sssd
配置用户帐户和组设置
将 VM 加入托管域并配置为进行身份验证后,有几个用户配置选项可以完成。 这些配置更改包括允许基于密码的身份验证,并在域用户首次登录时自动在本地 VM 上创建主目录。
允许 SSH 的密码身份验证
默认情况下,用户只能使用基于 SSH 公钥的身份验证登录到 VM。 基于密码的身份验证失败。 将 VM 加入托管域时,这些域帐户需要使用基于密码的身份验证。 更新 SSH 配置以允许基于密码的身份验证,如下所示。
注意
Ubuntu 市场映像通常在 /etc/ssh/sshd_config.d 下设置几个配置选项,包括 50-cloud-init.conf 文件中的 PasswordAuthentication,因此请确保还更新该文件,以避免它覆盖您通过以下步骤设置的配置。
使用编辑器打开 sshd_conf 文件:
sudo vi /etc/ssh/sshd_config
将 PasswordAuthentication 行更新为 yes:
PasswordAuthentication yes
完成后,使用编辑器的
:wq
命令保存并退出 sshd_conf 文件。若要应用更改并允许用户使用密码登录,请重启 SSH 服务:
sudo systemctl restart ssh
配置自动主目录创建
若要在用户首次登录时启用主目录的自动创建,请完成以下步骤:
在编辑器中打开
/etc/pam.d/common-session
文件:sudo vi /etc/pam.d/common-session
在此文件中的
session optional pam_sss.so
行下方添加以下行:session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
完成后,使用编辑器的
:wq
命令保存并退出 公共会话 文件。
授予“AAD DC 管理员”组 sudo 权限
若要授予 AAD DC 管理员 组的成员在 Ubuntu VM 上的管理权限,请在 /etc/sudoers中添加一个条目。 添加后,AAD DC 管理员 组的成员可以使用 Ubuntu VM 上的 sudo
命令。
打开 sudoers 文件进行编辑:
sudo visudo
将以下条目添加到 /etc/sudoers 文件的末尾:
# Add 'AAD DC Administrators' group members as admins. %AAD\ DC\ Administrators ALL=(ALL) NOPASSWD:ALL
完成后,使用
Ctrl-X
命令保存并退出编辑器。
使用域帐户登录到 VM
若要验证 VM 是否已成功加入托管域,请使用域用户帐户启动新的 SSH 连接。 确认已创建主目录,并应用域中的组成员身份。
从控制台创建新的 SSH 连接。 使用属于托管域的域帐户,通过
ssh -l
命令(例如contosoadmin@aaddscontoso.com
),然后输入您的虚拟机地址,例如 ubuntu.aaddscontoso.com。 如果使用 Azure Cloud Shell,请使用 VM 的公共 IP 地址,而不是内部 DNS 名称。sudo ssh -l contosoadmin@AADDSCONTOSO.com ubuntu.aaddscontoso.com
成功连接到 VM 后,请验证是否已正确初始化主目录:
sudo pwd
应位于与用户帐户匹配的 /home 目录中。
现在检查组成员身份是否已正确解析:
sudo id
应该能看到来自托管域的组成员资格。
如果以 AAD DC 管理员 组的成员身份登录到 VM,请检查是否可以正确使用
sudo
命令:sudo apt-get update
后续步骤
如果在将 VM 连接到托管域或使用域帐户登录时遇到问题,请参阅 排查域加入问题。