Я использую сервер аутентификации Kerberos/LDAP уже много лет. Данные Kerberos хранятся внутри LDAP. Теперь у меня есть второй сайт, и я хочу отразить сервер на новом сайте. Это в основном работает, но есть странный побочный эффект. На каждом сервере работают KDC и LDAP. KDC общается с LDAP, используя локальный ldapi:///.
Если я использую оригинальный KDC krb1.example.com
Я могу аутентифицироваться на главном LDAP и реплике. Если я использую реплицированный KDC krb2.example.com
, я все еще могу аутентифицироваться на главном LDAP, но пробуя реплику, я получаю
Аутентификация SASL/GSSAPI запущена
ldap_sasl_interactive_bind_s: локальная ошибка (-2)
дополнительная информация: SASL(-1): общий сбой: ошибка GSSAPI: неопределенный сбой GSS. Второстепенный код может предоставить дополнительную информацию (KDC не поддерживает тип шифрования)
Что странно, поскольку крб2
буквально клон контейнера LXC крб1
то естьконфигурации идентичны, безопасны для изменений, необходимых для репликации. Но еще больше озадачивает просмотр кэшей билетов после попытки запроса любого из серверов LDAP. С TGT от крб1
root@krb2:/# klist -e
Кэш билетов: ФАЙЛ:/tmp/krb5_cc_0.tkt
Принципал по умолчанию: [email protected]
Действительный начальный срок действия субъекта-службы
04.02.2022 01:05:29 04.02.2022 11:05:29 krbtgt/[email protected]
продлевать до 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
04.02.2022 01:05:42 04.02.2022 11:05:29 ldap/[email protected]
продлевать до 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
04.02.2022 01:05:53 04.02.2022 11:05:29 ldap/[email protected]
продлевать до 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
и из крб2
:
root@krb2:/# klist -e
Кэш билетов: ФАЙЛ:/tmp/krb5_cc_0.tkt
Принципал по умолчанию: [email protected]
Действительный начальный срок действия субъекта-службы
04.02.2022 00:53:45 04.02.2022 10:53:45 krbtgt/[email protected]
продлевать до 05.02.2022 00:53:41, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
04.02.2022 00:53:47 04.02.2022 10:53:45 ldap/[email protected]
продлевать до 05.02.2022 00:53:41, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
который не имеет входа для ldap/krb2.example.com
из-за ошибки. Но, по-видимому, нет никакой разницы в требуемых типах шифрования. Итак, почему он жалуется?
В настоящее время оба сервера LDAP относятся к крб1
. Но из-за репликации LDAP все ключи должны быть идентичными, т.е. ключ из крб1
должно быть таким же, как из крб2
, не так ли? А если ключи от крб1
работают для обоих серверов LDAP, почему ключ от сервера-реплики работает только для главного LDAP?
поддерживаемые_enctypes
для царства в обоих /etc/krb5kdc/kdc.conf
находятся support_enctypes = aes256-cts:нормальный arcfour-hmac:нормальный des3-hmac-sha1:нормальный des-cbc-crc:нормальный des:нормальный des:v4 des:norealm des:onlyrealm des:afs3
. Ни в одном из них нет директив enctype. /etc/krb5.conf
. Нет ссф
конфигурация, используемая в любом LDAP. krbPrincipalName
записи для крб2
существуют в обоих LDAP.
Даже если я получу TGT от крб2
а затем переключите krb5.conf
к крб1
для билета службы я могу аутентифицироваться в LDAP на крб2
.
Версия OpenLDAP 2.4.47, Kerberos 1.17 на обеих машинах (текущая стабильная версия Debian).
Обновлять: Оказалось, что репликация неполная, т.е. krbPrincipalKey
не (надежно) реплицируется. я проверил slapd
вывод отладки:
9 февраля 19:14:52 krb1 slapd[19560]: conn=1300 op=3 BIND authcid="sync/[email protected]" authzid="dn:uid=sync/krb2.example.com, cn=example.com,cn=gssapi,[email protected]"
9 февраля 19:14:52 krb1 slapd[19560]: conn=1300 op=3 BIND dn="cn=admin,dc=example,dc=com" mech=GSSAPI sasl_ssf=256 ssf=256
Так, синпров
видимо связывает как cn=admin,dc=пример,dc=com
, что и предназначено. Однако, если я сделаю
root@krb1:~# ldapsearch -b 'cn=KERBEROS,dc=example,dc=com' -D 'cn=admin,dc=example,dc=com' -Wx 'krbPrincipalName=ldap/krb2.example.com@ ПРИМЕР.COM'
тогда я вижу krbPrincipalKey
. Так почему же это не тиражируется?
я перезагружаю slapd
на крб2
с опциями -c рид=1,csn=0
, который, как я понял, должен синхронизировать всю базу данных. Но поскольку у некоторых записей есть ключ, а у некоторых нет, я не верю, что это правда.