为什么kerberos HOWTOs指定将keytabs安全地复制到主机上? 联网kadmin不安全吗?

Kerberos HOWTO经常有类似这样的词汇:

将(通过闪存驱动器,磁盘或encryption连接)密钥表安全地传输到客户端主机。

以root身份login客户端主机,运行kinit获取pipe理帐户的凭证,并从客户端运行kadmin不够好?

我认为这主要是从较旧的MIT Kerberos版本中解放出来的,这些版本确实存在安全问题或function较低(networking模式下的kadmin用于无法执行多项操作;必须在主KDC上运行kadmin.local )。 当然Heimdal从来没有打扰任何这样的限制,实际上简化和优化了一下过程( ktutil get )。 此外,许多官方的MIT Kerberos文档都假设了我在任何地方实际使用时都很less见到的偏执狂,比如假设任何安全凭证总是从系统手动复制到系统。

MIT的“ktadd问题”也是相关的。 MIT kadmin ktadd命令不会从KDC中提取密钥; 而是生成新密钥,将它们写入密钥表中,然后replaceKDC中的主体密钥。 只有kadmin.local能够提取密钥; kadmin RPC接口根本不会返回它们。 这被吹捧为安全function,防止受损的kadmin帐户读出每个人的密钥。 问题是,这意味着一个错误的ktadd命令会破坏正在运行的服务:如果它没有更新正确的密钥表,KDC立即开始使用服务没有的新密钥发布票证。 如果你有多台服务器用于同一个服务(比如在负载平衡器后面),你不能一个接一个地使用它们,使用ktadd来创build或者更新他们的keytabs:每次你运行keytabs时,所有其他服务实例。 你必须创buildkeytab一次,然后分开分发(例如与scp)。

这种安全function的操作危险是非常可怕的,几年前,我攻击了我们的MIT KDC,将密钥提取添加到RPC协议中,并将其作为我们的ktadd命令的默认设置。 海姆达尔没有这个问题。