Kerberos是一种基于对称密钥加密的网络身份认证协议,由麻省理工学院(MIT)在上世纪80年代开发。它解决了分布式环境中安全验证的核心问题:如何在不可信网络上安全地验证用户身份。协议名称来源于希腊神话中守卫冥界大门的三头犬,象征着其作为网络安全守卫者的角色。
在现代企业环境中,Kerberos已成为Windows Active Directory和许多UNIX/Linux系统的默认认证机制。其核心价值在于实现了"单点登录"(SSO)功能——用户只需登录一次,即可访问所有被授权的网络服务,同时避免了密码在网络中的明文传输。
关键特性:采用时间戳防止重放攻击、支持双向认证、票据具有有限生命周期、通过票据授权票据(TGT)实现会话复用
Kerberos使用对称加密算法(默认AES)实现安全通信,涉及三种密钥:
实际部署中建议使用256位AES加密,避免使用已弃用的DES算法
Kerberos严格依赖时间同步(默认允许5分钟偏差):
bash复制# 部署NTP服务确保时间同步
sudo apt install chrony
sudo systemctl enable --now chronyd
chronyc sources # 验证时间源
建议配置策略:
Windows AD域中可通过组策略调整:
code复制计算机配置 > 策略 > Windows设置 > 安全设置 > 账户策略 > Kerberos策略
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| KDC_ERR_PREAUTH_FAILED | 密码错误/密钥版本不匹配 | 重置密码或同步密钥版本 |
| KRB_AP_ERR_SKEW | 时钟不同步 | 检查NTP服务配置 |
| KDC_ERR_C_PRINCIPAL_UNKNOWN | 客户端主体不存在 | 检查用户SPN配置 |
多域环境需确保:
调试命令:
bash复制kinit -k -t keytab.keytab user@REALM # 使用keytab测试认证
klist -e # 查看票据加密类型
Linux系统默认缓存位置:
code复制/tmp/krb5cc_${UID}
建议调整:
bash复制export KRB5CCNAME=FILE:/var/tmp/krb5cache_$(id -u)
现代环境推荐加密类型:
配置示例(/etc/krb5.conf):
code复制[libdefaults]
default_tkt_enctypes = aes256-cts aes128-cts
permitted_enctypes = aes256-cts aes128-cts
主从架构要点:
同步配置示例:
bash复制kdb5_util dump /var/kerberos/krb5kdc/slave-dump
kprop -f /var/kerberos/krb5kdc/slave-dump kdc-slave.example.com
关键备份内容:
恢复流程: