我正在尝试将带有 OpenLDAP 后端的 heimdal KDC 从 Debian 5.x 服务器(heimdal 1.2.dfsg.1-2.1)迁移到 Ubuntu 14.04 服务器(heimdal 1.6~git20131207+dfsg-1ubuntu1.1),我在 14.04 系统上遇到 kadmind 问题。
某些 kerberos 功能运行良好——我可以运行 kinit、获取票证并成功使用 GSSAPI 身份验证和 sshd。我什至可以成功地使用带有 -l 选项的 kadmin。但是,当我省略 -l 选项并尝试与 kadmind 对话时,我会收到错误消息。例如,如果我将 kadmin/admin 密钥表导出到文件 /tmp/kadmin.keytab 并运行:
kadmin -p kadmin/admin -K /tmp/kadmin.keytab get kadmin/admin
我得到错误:
kadmind[38823]: krb5_recvauth: start_seq_get is not supported in the HDBGET keytab type
这个完全相同的命令,带有完全相同的 kadmin.keytab 文件,在 debian 5.x 系统上运行良好。
我收到上述错误的情况是我将 /var/lib/heimdal-kdc/heimdal.db 文件从 Debian 5.x 服务器复制到 Ubuntu 14.04 服务器,或者 heimdal.db 文件是不存在的。如果我使用与 heimdal 软件包安装一起创建的默认 heimdal.db 文件,我会看到来自 kadmind 的不同错误:
kadmind[38853]: krb5_recvauth: Decrypt integrity check failed for checksum type hmac-sha1-96-aes256, key type aes256-cts-hmac-sha1-96
我不明白为什么 heimdal.db 的内容很重要,因为我使用的是 OpenLDAP 后端。当主体位于 LDAP 目录中时,以某种方式查询静态 db 文件似乎很奇怪。我已经验证我已经将 LDAP 目录完整地从 Debian 5.x 系统复制到了 Ubuntu 14.04 系统,并且没有使用主密钥(没有 mkey_file 指令,即使我复制了默认的 m-key最初在 Debian 5.x 上自动生成的文件没有任何区别)。不知道我还能做些什么来确保配置尽可能相似。
我还尝试将更新的 heimdal 1.6rc2 包向后移植到 14.04,但得到了相同的错误。我尝试使用 gdb 跟踪 kadmind 的行为,但没有发现任何明显的问题。
有谁知道这里可能发生了什么?下面是 /etc/krb5.conf 和 /etc/heimdal-kdc/kdc.conf 文件来说明配置:
# /etc/krb5.conf
[libdefaults]
default_realm = EXAMPLE.COM
forwardable = true
proxiable = true
renewable = true
scan_interfaces = true
[realms]
EXAMPLE.COM = {
admin_server = localhost
kdc = localhost
}
[domain_realm]
example.com = EXAMPLE.COM
.example.com = EXAMPLE.COM
[logging]
default = SYSLOG:INFO
# /etc/heimdal-kdc/kdc.conf
[logging]
kdc = FILE:/var/log/heimdal-kdc.log
kdc = SYSLOG:INFO
[kdc]
database = {
dbname = ldap:dc=example,dc=com
hdb-ldap-create-base = ou=Kerberos,dc=example,dc=com
acl_file = /etc/heimdal-kdc/kadmind.acl
}
看起来 1.2 和 1.6 之间的各种代码更改导致了我看到的问题。为了解决这个问题,我做了以下事情:
--keytab=/etc/krb5.keytab
到 /etc/inetd.conf 中的 kadmind 参数这告诉 kadmind 明确地在 /etc/krb5.keytab(而不是“HDBGET:”)中查找它用来向 kdc 进行身份验证的 kadmin/admin 主体。
有关更多信息,请参阅https://github.com/heimdal/heimdal/issues/133