Kerberos ticket的lifetime和renewab
前言
Kerberos的ticket为了安全起见规定了其生命周期(有效时间段)。可以减少攻击者拿到ticket后对系统的危害。
Kerberos共设计了两种生命周期:lifetime和renewable lifetime。lifetime规定了ticket的有效期,超过有效期之后ticket将作废不再可用。在ticket过期前,如果配置了renewable lifetime并且renewable lifetime大于lifetime,用户可以为该ticket续期。但不可无限续期,最长不得超过renewable lifetime上限。这时候只能重新申请ticket。
max_life和max_renewable_life
Kerberos可给与的最大life和renewable_life的限制条件比较复杂,并非通过单一配置项来控制。
博主查阅到有篇文章总结的不错,引用过来。
ticket lifetime取决于以下5项设置中的最小值:
- Kerberos server上/var/kerberos/krb5kdc/kdc.conf中max_life
- 内置principal krbtgt的maximum ticket life,可在kadmin命令行下用getprinc命令查看
- principal的maximum ticket life,可在kadmin命令行下用getprinc命令查看
- Kerberos client上/etc/krb5.conf的ticket_lifetime
- kinit -l 参数后面指定的时间
ticket renew lifetime取决于以下5项设置中的最小值:
- Kerberos server上/var/kerberos/krb5kdc/kdc.conf中max_renewable_life
- 内置principal krbtgt的maximum renewable life,可在kadmin命令行下用getprinc命令查看
- principal的maximum renewable life,可在kadmin命令行下用getprinc命令查看
- Kerberos client上/etc/krb5.conf的renew_lifetime
- kinit -r 参数后面指定的时间
以上引用自:【kerberos】深入理解kerberos票据生命周期 - 彬在俊 - 博客园
简单总结一下:如果需要增大所有ticket默认的lifetime和renewable lifetime,需要同时修改kdc.conf,krb5.conf以及krbtgt这个principal的lifetime配置。下一节将讲解具体的修改方式。
为什么krbtgt用户的lifetime会影响到其他用户的ticket?这个用户有什么特殊之处?可参考如下片段:
krbtgt是Kerberos中的一个特殊账户,用于存储和管理Ticket Granting Ticket(TGT)。在Kerberos认证系统中,krbtgt账户是一个系统级别的账户,用于生成TGT和使用自己的hash(krbtgt hash)加密TGT,并提供给用户进行身份验证和获取服务票据。那么如果攻击者获取到了这个hash(krbtgt hash),那么就可以任意的伪造TGT了,也就是黄金票据,拥有了黄金票据就可以跳过AS验证了。
修改lifetime和renewable_lifetime
修改Kerberos KDC和Client的lifetime
编辑/var/kerberos/krb5kdc/kdc.conf文件和/etc/krb5.conf,修改[realms]中指定realms下的max_life和max_renewable_life(全局最大值限制),以及[libdefaults]中的ticket_lifitime和renew_lifetime(票据的默认值)。完整文件如下所示:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
PAULTECH = {
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
max_life = 1d
max_renewable_life = 7d
default_principal_flags = +renewable, +forwardable
}
[logging]
default = FILE:/var/kerberos/log/krb5libs.log
kdc = FILE:/var/kerberos/log/krb5kdc.log
admin_server = FILE:/var/kerberos/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
rdns = false
default_realm = PAULTECH
default_ccache_name = KEYRING:persistent:%{uid}
ticket_lifitime = 1d
renew_lifetime = 7d
最后重启Kerberos服务:
systemctl restart krb5kdc.service
systemctl restart kadmin.service
修改krbtgt的lifetime
进入kadmin管理模式,执行kadmin.local。
kadmin.local: modprinc -maxrenewlife 100d krbtgt/PAULTECH@PAULTECH
kadmin.local: modprinc -maxlife 100d krbtgt/PAULTECH@PAULTECH
修改完毕之后可以通过getprinc krbtgt/PAULTECH@PAULTECH验证修改是否生效。
lifetime对大数据作业的影响
受到lifetime限制的主要是类似Flink流式分析这种长时间运行的作业。Ticket的失效会导致作业运行中断。为了保持作业长期稳定运行,用户需要延长ticket的lifetime,或者在作业中加入定期检测ticket是否临近过期并自动申请ticket的逻辑。Flink 1.17及其之后的版本已默认有该逻辑,用户作业中无需再重复编写。参见:Flink 源码之自动认证
参考材料
【kerberos】深入理解kerberos票据生命周期 - 彬在俊 - 博客园