

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

# Amazon EC2 Linux 实例域加入错误
<a name="ms_ad_troubleshooting_join_linux"></a>

以下内容可以帮助您解决在将 Amazon EC2 Linux 实例加入 Amazon 托管的 Microsoft AD 目录时可能遇到的一些错误消息。

## Linux 实例无法加入域或进行身份验证
<a name="unable-to-join"></a>

Ubuntu 14.04、16.04 和 18.04 实例在 DNS 中*必须*可以反向解析，领域才能使用 Microsoft Active Directory。否则，您可能会遇到以下两种场景之一：

### 场景 1：Ubuntu 实例尚未加入领域
<a name="ubuntu-not-yet-joined"></a>

对于尝试加入领域的 Ubuntu 实例，则该 `sudo realm join` 命令可能不会提供加入域所需的权限并可能显示以下错误：

\$1 Couldn't authenticate to active directory: SASL(-1): generic failure: GSSAPI Error: An invalid name was supplied (Success) adcli: couldn't connect to EXAMPLE.COM domain: Couldn't authenticate to active directory: SASL(-1): generic failure: GSSAPI Error: An invalid name was supplied (Success) \$1 Insufficient permissions to join the domain realm: Couldn't join realm: Insufficient permissions to join the domain

### 场景 2：Ubuntu 实例已加入领域
<a name="ubuntu-joined"></a>

对于已加入 Microsoft Active Directory 域的 Ubuntu 实例，SSH 尝试使用域凭证进入实例可能会失败，并显示以下错误：

\$1 ssh admin@EXAMPLE.COM@198.51.100

没有这样的身份：/Users/username/.ssh/id\$1ed25519：没有这样的文件或目录

admin@EXAMPLE.COM@198.51.100 的密码：

权限被拒绝，请重试。

admin@EXAMPLE.COM@198.51.100 的密码：

如果使用公钥登录到实例并勾选 `/var/log/auth.log`，您可能会看到以下有关无法找到用户的错误：

5 月 12 日 01:02:12 ip-192-0-2-0 sshd[2251]：pam\$1unix(sshd:auth)：身份验证失败；logname= uid=0 euid=0 tty=ssh ruser= rhost=203.0.113.0

5 月 12 日 01:02:12 ip-192-0-2-0 sshd[2251]：pam\$1sss(sshd:auth)：身份验证失败；logname= uid=0 euid=0 tty=ssh ruser= rhost=203.0.113.0 user=admin@EXAMPLE.COM

5 月 12 日 01:02:12 ip-192-0-2-0 sshd[2251]：pam\$1sss(sshd:auth)：用户 admin@EXAMPLE.COM 已收到：10（底层身份验证模块不知道的用户）

5 月 12 日 01:02:14 ip-192-0-2-0 sshd[2251]：来自 203.0.113.0 端口 13344 ssh2 的无效用户 admin@EXAMPLE.COM 的密码失败

5 月 12 日 01:02:15 ip-192-0-2-0 sshd[2251]：已通过 203.0.113.0 [preauth] 关闭连接

但是，用户的 `kinit` 仍然有效。参阅此示例：

ubuntu@ip-192-0-2-0:\$1\$1 kinit admin@EXAMPLE.COM admin@EXAMPLE.COM 的密码：ubuntu@ip-192-0-2-0:\$1\$1 klist 票证缓存：FILE:/tmp/krb5cc\$11000 默认委托人：admin@EXAMPLE.COM

### 解决办法
<a name="ubuntu-scenarios-workaround"></a>

这两种场景当前推荐的解决方法是禁用 [libdefaults] 部分 `/etc/krb5.conf` 中的反向 DNS，如下所示：

```
[libdefaults]
default_realm = EXAMPLE.COM
rdns = false
```

## 无缝域加入的单向信任身份验证问题
<a name="1-way-trust-auth-issues"></a>

如果您在 Amazon 托管的 Microsoft AD 和您的本地 Active Directory 之间建立了单向传出信任，则在尝试使用带有 Winbind 的可信 Active Directory 凭据对已加入域的 Linux 实例进行身份验证时，可能会遇到身份验证问题。

### 错误
<a name="1-way-trust-auth-issues-errors"></a>

7 月 31 日 00:00:00 EC2 AMAZ-LSMWq T ssshd [23832]：来自 xxx.xxx.xxx.xxx 的 user@corp.example.com 密码失败 port 18309 ssh2

7 月 31 日 00:05:00 EC2 AMAZ-LSMWq T ssshd [23832]：pam\$1winbind (sshd: auth)：获取密码 (0x00000390)

7 月 31 日 00:05:00 EC2 AMAZ-LSMWq T sshd [23832]：pam\$1winbind (sshd: auth)：pam\$1get\$1item 返回了密码

7 月 31 日 00:05:00 EC2 AMAZ-LSMWq T ssshd [23832]：pam\$1winbind (sshd: auth)：请求 wbcLogonUser 失败：WBC\$1ERR\$1AUTH\$1ERROR，PAM 错误：PAM\$1SYSTEM\$1ERR (4)，NTSTATUS：\$1\$1NT\$1STATUS\$1OBJECT\$1NAME\$1NOT\$1FOUND\$1\$1，错误消息是：找不到对象名称。

7 月 31 日 00:05:00 EC2 AMAZ-LSMWq T ssshd [23832]：pam\$1winbind（sshd: auth）：内部模块错误（retval = PAM\$1SYSTEM\$1ERR (4)，用户 = 'CORP\$1 user '）

## 解决办法
<a name="1-way-trust-auth-issues-workaround"></a>

要解决此问题，您需要使用以下步骤注释掉或从 PAM 模块配置文件 (`/etc/security/pam_winbind.conf`) 中删除指令。

1. 在文本编辑器中打开 `/etc/security/pam_winbind.conf` 文件。

   ```
   sudo vim /etc/security/pam_winbind.conf
   ```

1. 注释掉或删除以下指令 **krb5\$1auth = yes**。

   ```
   [global]
   
   cached_login = yes
   krb5_ccache_type = FILE
   #krb5_auth = yes
   ```

1. 停止 Winbind 服务，然后重新启动它。

   ```
   service winbind stop or systemctl stop winbind
   net cache flush 
   service winbind start or systemctl start winbind
   ```