Я пытаюсь перенести heimdal KDC с бэкэндом OpenLDAP с сервера Debian 5.x (heimdal 1.2.dfsg.1-2.1) на сервер Ubuntu 14.04 (heimdal 1.6 ~ git20131207 + dfsg-1ubuntu1.1), и я столкнулся с проблемами с kadmind в системе 14.04.
Некоторые функции kerberos работают нормально - я могу запустить kinit, получить билет и успешно использовать аутентификацию GSSAPI с sshd. Я даже могу успешно использовать kadmin с параметром -l. Однако, когда я не использую параметр -l и пытаюсь поговорить с kadmind, я получаю ошибки. Например, если я экспортирую kadmin / admin keytab в файл /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.db по умолчанию, который создается вместе с установкой пакета heimdal, я вижу ошибку, отличную от 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. Кажется странным, что к статическому файлу db каким-то образом обращаются, когда участники находятся в каталоге LDAP. Я убедился, что я скопировал каталог LDAP в неповрежденном виде из системы Debian 5.x в систему Ubuntu 14.04, и что не используется главный ключ (нет директивы mkey_file, и даже если я скопирую m-ключ по умолчанию файл, который изначально был автоматически сгенерирован в Debian 5.x, это не имеет значения). Не уверен, что еще я могу сделать, чтобы конфигурации были максимально похожи.
Я также попытался перенести более свежий пакет heimdal 1.6rc2 на версию 14.04, но получил те же ошибки. Я попытался отследить поведение kadmind с помощью gdb, но ничего не выскочило как очевидная проблема.
Кто-нибудь знает, что здесь может происходить? Вот файлы /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
к аргументам kadmind в /etc/inetd.confЭто указывает kadmind явно искать в /etc/krb5.keytab (вместо «HDBGET:») принципала kadmin / admin, который он использует для аутентификации в kdc.
Для получения дополнительной информации см. https://github.com/heimdal/heimdal/issues/133