我正在尝试为 Linux (MIT kerberos) 编写一个幂等脚本,该脚本/etc/krb5.keytab
通过与现有内容合并来应用给定的密钥表。在 MacOS(我相信它使用 Heimdal)上,这很容易:
ktutil copy /tmp/ktnew /etc/krb5.keytab
如果密钥/tmp/ktnew
已经存在/etc/krb5.keytab
那么它就不会改变(这可以通过前后哈希来确认)。
MIT 版本的ktutil
似乎只能以交互方式工作,并且没有与 等效的版本copy
。使用rkt
和wkt
会附加(因此会重复)而不是合并,因此不是幂等的。
是否可以使用 Linux 系统上常见的 MIT 工具以幂等方式(非交互方式)执行此操作?
据我所知,不是。MIT Krb5 还附带了
k5srvutil
脚本,该脚本依赖于kadmin
非交互式ktrem
子命令来删除被取代的密钥(那些 kvno 早于最新的密钥),但这就是它的全部功能。我认为合并密钥表首先就不是正确的做法——与其把所有内容都放在“机器”密钥表中(因此必须授予所有服务对密钥表的访问权限),你最多应该在其中放置
host/*
和nfs/*
,而其他所有内容都应该使用不同的密钥表文件。(不支持本机指定密钥表的服务通常会KRB5_KTNAME=
通过环境支持。)这样,keytab 的部署就会变得像覆盖整个文件一样简单。
在我自己的项目(特别是在尝试通过 kadmin 幂等请求密钥的工具中
ktadd
)中,我通过 Python 解析密钥表以确定它是否已经具有即将添加的主体的密钥。这是一个起点: