玩转大数据

Kerberos ticket的lifetime和renewab

2025-12-16  本文已影响0人  AlienPaul

前言

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项设置中的最小值:

ticket renew lifetime取决于以下5项设置中的最小值:

以上引用自:【kerberos】深入理解kerberos票据生命周期 - 彬在俊 - 博客园

简单总结一下:如果需要增大所有ticket默认的lifetime和renewable lifetime,需要同时修改kdc.confkrb5.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验证了。

引用自:详细讲解kerberos认证全过程、黄金、白银票据 - FreeBuf网络安全行业门户

修改lifetime和renewable_lifetime

修改Kerberos KDC和Client的lifetime

编辑/var/kerberos/krb5kdc/kdc.conf文件和/etc/krb5.conf,修改[realms]中指定realms下的max_lifemax_renewable_life(全局最大值限制),以及[libdefaults]中的ticket_lifitimerenew_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票据生命周期 - 彬在俊 - 博客园

kerberos票证生存周期 - gentleman_hai - 博客园

详细讲解kerberos认证全过程、黄金、白银票据 - FreeBuf网络安全行业门户

上一篇 下一篇

猜你喜欢

热点阅读