AWS中Ubuntu16.04加入Managed Active Directory认证失败问题排查
我之前在帮团队部署环境时也碰到过一模一样的问题——CentOS能顺利加入AWS托管AD,但Ubuntu 16.04就会弹出GSSAPI Error: An invalid name was supplied和权限不足的报错。其实这主要是Ubuntu 16.04和CentOS在AD客户端配置、系统默认设置上的差异导致的,下面是我亲测有效的几个修复步骤:
1. 先检查主机名是否符合AD的NetBIOS规则
AWS Managed AD对加入的计算机主机名有严格限制,这也是最容易踩坑的点:
- 主机名长度不能超过15个字符(NetBIOS名称的硬性限制)
- 只能包含小写字母、数字和连字符,不能有下划线、大写字母或特殊符号
- Ubuntu默认的主机名可能带大写或超长,而CentOS会自动适配AD规则
你可以用这条命令查看当前主机名:
hostname
如果不符合要求,修改后重启实例:
sudo hostnamectl set-hostname your-short-valid-hostname sudo reboot
2. 确保DNS配置完全指向AWS AD的DNS服务器
Ubuntu 16.04的DNS配置容易被系统覆盖,必须确保实例的DNS完全指向AWS Managed AD提供的两个DNS地址:
- 临时修改
/etc/resolv.conf测试:
sudo echo "nameserver <AD-DNS-IP-1>" > /etc/resolv.conf sudo echo "nameserver <AD-DNS-IP-2>" >> /etc/resolv.conf
- 为了防止重启后配置丢失,编辑
/etc/network/interfaces,在对应网卡配置里添加:
dns-nameservers <AD-DNS-IP-1> <AD-DNS-IP-2>
然后重启网络服务:
sudo systemctl restart networking
3. 安装并更新AD客户端工具版本
Ubuntu 16.04默认的adcli版本存在兼容性问题,建议用realmd来管理AD加入操作,它会自动处理很多配置细节:
sudo apt-get update && sudo apt-get install -y realmd adcli sssd krb5-user
安装后配置krb5.conf,确保默认域和你的AD域一致:
编辑/etc/krb5.conf,修改以下段落:
[libdefaults] default_realm = AD.NETTRACER.AERO dns_lookup_realm = true dns_lookup_kdc = true
4. 用realmd命令执行域加入操作
别再直接用adcli命令了,realmd会自动处理SSSD、Kerberos等配置,命令格式如下:
sudo realm join --user='AD-JOIN-USER' ad.nettracer.aero
注意这里的AD-JOIN-USER必须是AWS Managed AD中拥有计算机加入权限的账户(比如默认的Admin用户,或者你专门创建的域加入专用用户)。
如果还是报错,加上--verbose参数查看详细日志,方便定位问题:
sudo realm join --verbose --user='AD-JOIN-USER' ad.nettracer.aero
5. 临时关闭AppArmor测试权限问题
Ubuntu 16.04默认启用AppArmor,可能会限制AD客户端工具的权限。你可以临时关闭测试:
sudo systemctl stop apparmor sudo systemctl disable apparmor
如果关闭后能成功加入,再去调整AppArmor的规则,不要长期保持关闭状态。
额外补充:如果需要把计算机账户放到指定的OU下,要确保你的加入用户有权限在目标OU创建计算机对象,命令可以这样写:
sudo realm join --user='AD-JOIN-USER' --computer-ou='OU=YourOU,DC=ad,DC=nettracer,DC=aero' ad.nettracer.aero
内容的提问来源于stack exchange,提问作者Anish Varghese

