Amazon EC2 Linux 实例域加入错误
以下内容可帮助您排查在将 Amazon EC2 Linux 实例加入 Amazon Managed Microsoft AD 目录时可能遇到的一些错误消息。
Linux 实例无法加入域或进行身份验证
Ubuntu 14.04、16.04 和 18.04 实例在 DNS 中必须可以反向解析,领域才能使用 Microsoft Active Directory。否则,您可能会遇到以下两种场景之一:
场景 1:Ubuntu 实例尚未加入领域
对于尝试加入领域的 Ubuntu 实例,则该 sudo realm
join 命令可能不会提供加入域所需的权限并可能显示以下错误:
! 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) ! Insufficient permissions to join the domain realm: Couldn't join realm: Insufficient permissions to join the domain
场景 2:Ubuntu 实例已加入领域
对于已加入 Microsoft Active Directory 域的 Ubuntu 实例,SSH 尝试使用域凭证进入实例可能会失败,并显示以下错误:
$ ssh admin@EXAMPLE.COM@198.51.100
没有此类身份:/Users/username/.ssh/id_ed25519:没有找到此文件或目录
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_unix(sshd:auth):身份验证失败;logname= uid=0 euid=0 tty=ssh ruser= rhost=203.0.113.0
月 12 日 01:02:12 ip-192-0-2-0 sshd[2251]:pam_sss(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_sss(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:~$ kinit admin@EXAMPLE.COM admin@EXAMPLE.COM 的密码:ubuntu@ip-192-0-2-0:~$ klist 票证缓存:FILE:/tmp/krb5cc_1000 默认委托人:admin@EXAMPLE.COM
解决办法
这两种场景当前推荐的解决方法是禁用 [libdefaults] 部分 /etc/krb5.conf 中的反向 DNS,如下所示:
[libdefaults] default_realm = EXAMPLE.COM rdns = false
无缝域加入的单向信任身份验证问题
如果您在 Amazon Managed Microsoft AD 和本地 Active Directory 之间建立了单向传出信任,则在尝试使用采用 Winbind 的可信 Active Directory 凭证对已加入域的 Linux 实例进行身份验证时,可能会遇到身份验证问题。
错误
Jul 31 00:00:00 EC2AMAZ-LSMWqT sshd[23832]: Failed password for user@corp.example.com from xxx.xxx.xxx.xxx port 18309 ssh2
Jul 31 00:05:00 EC2AMAZ-LSMWqT sshd[23832]: pam_winbind(sshd:auth): getting password (0x00000390)
Jul 31 00:05:00 EC2AMAZ-LSMWqT sshd[23832]: pam_winbind(sshd:auth): pam_get_item returned a password
Jul 31 00:05:00 EC2AMAZ-LSMWqT sshd[23832]: pam_winbind(sshd:auth): request wbcLogonUser failed: WBC_ERR_AUTH_ERROR, PAM error: PAM_SYSTEM_ERR (4), NTSTATUS: **NT_STATUS_OBJECT_NAME_NOT_FOUND**, Error message was: The object name is not found.
Jul 31 00:05:00 EC2AMAZ-LSMWqT sshd[23832]: pam_winbind(sshd:auth): internal module error (retval = PAM_SYSTEM_ERR(4), user = 'CORP\user')
解决办法
要解决此问题,您需要使用以下步骤注释掉或从 PAM 模块配置文件 (/etc/security/pam_winbind.conf) 中删除指令。
-
在文本编辑器中打开
/etc/security/pam_winbind.conf文件。sudo vim /etc/security/pam_winbind.conf -
注释掉或删除以下指令 krb5_auth = yes。
[global] cached_login = yes krb5_ccache_type = FILE #krb5_auth = yes -
停止 Winbind 服务,然后重新启动它。
service winbind stop or systemctl stop winbind net cache flush service winbind start or systemctl start winbind