在Linux环境中使用Kerberos进行身份验证时,为确保其安全性,需从多个层面进行加固。以下是详细的解决方案:
密码复杂性要求
通过Kerberos KDC(Key Distribution Center)的kadmin
工具设置密码策略:
kadmin.local -q "addpol -minlength 12 -minclasses 3 -maxfailure 5 admin_policy"
minclasses 3
:至少包含3种字符类型(大写、小写、数字、符号)。maxfailure 5
:允许的最大失败尝试次数。定期密钥轮换
强制定期更新服务密钥(如每90天):
kadmin.local -q "modprinc -maxrenewlife 90days -maxlife 1week user/principal"
/etc/krb5.conf
中限制加密类型:
ini
[libdefaults]
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
KDC防火墙规则
仅允许必要的端口(默认88/TCP, 88/UDP, 749/TCP):
sudo iptables -A INPUT -p tcp --dport 88 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 88 -j ACCEPT
sudo iptables -A INPUT -j DROP
启用TCP协议
在krb5.conf
中强制使用TCP(避免UDP丢包导致重放攻击):
[libdefaults]
udp_preference_limit = 0
物理安全与隔离
sudo setsebool -P kdc_disable_trans=0
日志监控
配置KDC日志(/var/log/krb5kdc.log
)并集中收集:
[kdcdefaults]
kdc_console = FILE:/var/log/krb5kdc.log
服务Principal限制
为每个服务分配独立Principal,避免共享密钥:
kadmin.local -q "addprinc -randkey host/server.example.com"
票据生命周期控制
缩短默认票据有效期(如10小时):
[libdefaults]
ticket_lifetime = 10h
renew_lifetime = 7d
ini
[kdcdefaults]
kdc_replay_cache_size = 100000
kdc_replay_cache_timeout = 300
bash
kadmin.local -q "listprincs" | grep -i "expired"
bash
sudo yum update krb5-server krb5-workstation
kpropd
)避免单点故障。/var/kerberos/krb5kdc/principal*
文件。错误:Clock skew too great
确保所有主机时间同步(NTP服务):
sudo chronyc sources
错误:Invalid ticket
检查服务Principal和密钥表(keytab)是否匹配:
klist -kte /etc/krb5.keytab
通过以上措施,可显著提升Kerberos在Linux环境中的安全性。实际部署时需根据网络架构和合规要求调整参数。