macOS 10.13主机名变更后Kerberos故障排查求助
我之前处理过好几起macOS服务器改主机名搞崩Kerberos的案例,你的情况核心是主机名变更后,Kerberos的Realm映射、服务主体和底层配置没跟上OD的变更——虽然你已经重新导入了OD配置,changeip也显示成功,但Kerberos有自己独立的缓存和配置逻辑,给你一步步排查修复:
1. 补全krb5.conf的关键映射(最可能的直接原因)
你的/etc/krb5.conf只有超时配置,主机名变更后,Kerberos根本不知道该找哪个KDC来完成认证。先临时修改配置测试:
sudo nano /etc/krb5.conf
替换成以下内容(注意把MAC-MINI.EXAMPLE.COM和mac-mini.example.com换成你的实际新主机名/域名):
[libdefaults] kdc_timeout = 5 default_realm = MAC-MINI.EXAMPLE.COM [realms] MAC-MINI.EXAMPLE.COM = { kdc = mac-mini.example.com admin_server = mac-mini.example.com } [domain_realm] .example.com = MAC-MINI.EXAMPLE.COM example.com = MAC-MINI.EXAMPLE.COM
保存后再跑kinit test@MAC-MINI.EXAMPLE.COM,如果能成功,说明就是krb5.conf缺少必要的KDC映射导致的问题。
2. 刷新Open Directory的Kerberos服务主体
OD虽然导入了新配置,但Kerberos的核心服务主体(比如krbtgt/MAC-MINI.EXAMPLE.COM@MAC-MINI.EXAMPLE.COM)可能还绑定着旧主机名:
- 先停OD服务:
sudo serveradmin stop dirserv - 查看现有Kerberos主体:
dscl . -list /Kerberos/KerberosPrincipal,如果有旧Realm的krbtgt条目,删掉它:sudo dscl . -delete /Kerberos/KerberosPrincipal krbtgt/OLD-REALM@OLD-REALM - 重启OD:
sudo serveradmin start dirserv - 重新生成新Realm的krbtgt主体:
sudo kadmin.local -q "addprinc -randkey krbtgt/MAC-MINI.EXAMPLE.COM@MAC-MINI.EXAMPLE.COM"
3. 清空Kerberos缓存(避免旧票据干扰)
服务器和客户端的旧Kerberos票据会导致认证逻辑混乱,必须清理:
- 服务器端:
sudo kdestroy -A(销毁所有系统级缓存票据) - 客户端:运行
kdestroy,或者打开「钥匙串访问」→搜索「Kerberos」,删除所有相关票据。
4. 验证DNS解析(Kerberos的隐形依赖)
Kerberos严重依赖DNS的正向/反向解析和SRV记录,哪怕changeip显示成功,也要确认:
- 正向解析:
ping mac-mini.example.com,确保返回服务器的正确IP - 反向解析:
host <服务器IP>,确保返回新主机名 - 检查KDC的SRV记录:
dig _kdc._tcp.MAC-MINI.EXAMPLE.COM SRV,如果没有这条记录,需要在DNS服务器上添加,指向新主机名,端口88。
5. 确认OD的Kerberos配置一致性
检查OD的Kerberos设置是否和新主机名完全匹配:
serveradmin settings dirserv | grep Kerberos
确保dirserv:LDAPConfig:KerberosRealm是你的新Realm(MAC-MINI.EXAMPLE.COM),dirserv:LDAPConfig:KDCServer是新主机名。如果不对,手动修改:
sudo serveradmin settings dirserv:LDAPConfig:KerberosRealm = "MAC-MINI.EXAMPLE.COM" sudo serveradmin settings dirserv:LDAPConfig:KDCServer = "mac-mini.example.com" sudo serveradmin restart dirserv
6. 客户端SSO测试
客户端如果之前绑定的是旧主机名,先解绑再重新绑定到新的OD服务器。绑定后尝试登录,或者用kinit测试认证是否正常。如果客户端还是有问题,可以在客户端的/Library/Preferences/edu.mit.Kerberos里添加和服务器一致的Realm配置。
内容的提问来源于stack exchange,提问作者Moisie

