加域前提必须确保dns能解析域控制器srv记录且系统时间与域控偏差≤5分钟;推荐用realmd自动完成加域,避免手动配krb5.conf和smb.conf的大小写、缩进等陷阱。

确认 DNS 和时间同步是加域前提
加域失败,八成卡在这两步——不是配置错了,而是压根没通。Linux 必须能通过 DNS 解析出域控制器的 SRV 记录(比如 _ldap._tcp.yourdomain.com),且系统时间与域控偏差不能超过 5 分钟(Kerberos 强制要求)。
- 用
nslookup yourdomain.com和nslookup -type=SRV _kerberos._tcp.yourdomain.com双重验证 DNS 是否指向域控制器(不是路由器或公网 DNS) -
ntpdate -u dc.yourdomain.com或配置chronyd同步时间;RHEL/CentOS 8+ 推荐timedatectl set-ntp true+ 修改/etc/chrony.conf的server行 - 别信
/etc/resolv.conf手动改了就生效——现代发行版(RHEL7+/Ubuntu18.04+)要用nmcli con mod ensX ipv4.dns "192.168.1.10"再nmcli con up ensX
用 realmd 是最稳的现代方式
比起老派的 net ads join 或手配 smb.conf,realmd 封装了 SSSD、Kerberos、Winbind 的联动逻辑,出错路径少、日志清晰、支持自动创建家目录(oddjob-mkhomedir)。
- 先装齐依赖:
yum install -y realmd sssd oddjob oddjob-mkhomedir samba-common-tools adcli(CentOS/RHEL)或apt install -y realmd sssd sssd-tools adcli samba-common-bin(Debian/Ubuntu) - 发现域:
realm discover YOURDOMAIN.COM—— 如果报No such realm found,立刻回头查 DNS 和大小写(域名必须全大写,如YOURDOMAIN.COM,不是yourdomain.com) - 加入域:
realm join --user=Administrator YOURDOMAIN.COM,输密码;成功后会自动启用sssd并修改/etc/nsswitch.conf - 验证:
id DOMAIN\username或getent passwd 'DOMAIN\username';若返回空,说明 SSSD 没拉到用户,看journalctl -u sssd -n 50
手动配 krb5.conf 和 smb.conf 容易踩的坑
如果你非得走传统路径(比如受限于旧系统或审计要求),/etc/krb5.conf 和 /etc/samba/smb.conf 的大小写、空格、缩进全是雷区,尤其 default_realm 和 realm 字段不一致会导致 kinit: Cannot find KDC。
-
krb5.conf中[libdefaults] default_realm和[realms] YOURDOMAIN.COM必须完全一致(含大小写),且dns_lookup_kdc = false时,kdc地址必须写死为 IP+端口(如192.168.1.10:88) -
smb.conf的security = ADS不可写成ads或ad;password server建议用 IP 而非主机名,避免 Kerberos 预认证失败 -
net ads join -S dc.yourdomain.com -U Administrator失败时,加-d3看调试输出,常见错误是GENSEC backend 'gssapi_spnego' failed—— 往往是 Kerberos 票据未生成或过期,先kdestroy && kinit Administrator@YOURDOMAIN.COM
登录和权限控制实际怎么起作用
加域成功 ≠ 能登录。Linux 默认只认本地用户,要让域用户登录,得靠 sssd 或 winbind 把 AD 用户映射成 UID/GID,并在 PAM 层放行。
- 确保
/etc/nsswitch.conf里passwd:和group:行包含sss(SSSD)或winbind(旧方案),顺序很重要:优先级高的排前面 - 域用户首次登录时家目录不会自动创建,除非装了
oddjob-mkhomedir并启用了oddjobd服务;否则会卡在 “Could not chdir to home directory” - sudo 权限要显式加:在
/etc/sudoers里写%DOMAIN\domain^users ALL=(ALL) ALL(注意转义),或者用sudo groupadd domainadmins && sudo usermod -aG domainadmins 'DOMAIN\admin'
真正麻烦的从来不是命令敲对了没,而是 DNS 解析对不对、时间差几秒、大小写漏了一个字母、或者家目录权限被 SELinux 拦了——这些地方没日志,只能挨个排除。










