Настройка файла krb5.conf Kerberos для работы с основным и вторичным ‘клонированным’ доменом.

Вопрос или проблема

(Обязательный префикс для новичка: никогда много не играл с Kerberos, так что обращайтесь ко мне мягко!)

У нас есть два домена foo.local и .test.

.test был клонирован из foo.local, и, зайдя на сервер внутри .test, домен думает, что он является доменом foo.local.

Например, myserver.foo.local имеет IP-адрес 10.250.20.10, а myserver.test имеет IP-адрес 10.253.20.10 находясь внутри домена foo.local, но видит себя как 10.250.20.10, когда находится внутри домена .test.

Кроме того, myserver.foo.local может обратиться к myserver.test, но наоборот это не сработает.

Также, myserver.foo.local при обращении к myothersever.foo.local действительно попадает на сервер, который находится внутри домена foo.local, однако когда myserver.test подключается к myotherserver.foo.local, он застревает внутри домена .test.

При всем этом, вот мой файл /etc/krb5.conf (который я был бы более чем рад узнать, что он плохо сконфигурирован):

[libdefaults]
  default_realm = FOO.LOCAL

[realms]
    FOO.LOCAL = {
        kdc = foo-dc01.foo.local
    }

    TEST = {
        kdc = foo-dc02.test
    }

Жизнь хороша, когда подключаешься к серверам внутри foo.local, и действительно мой kinit работает превосходно. Test не так уж хорошо.

myLogin$ kinit -V  mylogin@test
Пароль mylogin@test: 
kinit: krb5_get_init_creds: невозможно достучаться до KDC в домене test, пробовал 0 KDC

Итак, вопросы:

1) Какие шаги я пропустил, чтобы аутентифицироваться против тестового домена – как мне настроить kinit, чтобы использовать сервер домена foo-dc02.test для аутентификации (или даже, нужно ли это, учитывая, что мой Windows LoginId и пароль одинаковы)?

2) Как только я это сделаю, как я могу убедиться, что при подключении к myserver.test он использует токен, полученный из kinit mylogin@test при попытке подключения?

Информация о системе: Все серверы AD работают на Windows, сейчас мои тесты POC проводятся с моего MacBook, но клиенты, работающие на Windows, Mac и Linux, в конечном итоге тоже должны будут работать.

Например, myserver.foo.local имеет IP-адрес 10.250.20.10, а myserver.test имеет IP-адрес 10.253.20.10, находясь внутри домена foo.local, но видит себя как 10.250.20.10, находясь внутри домена .test.

Адресация обычно не имеет значения для Kerberos, пока клиенты могут разрешать имена DNS и общаться с серверами (отправлять/получать IP-пакеты).

myLogin$ kinit -V mylogin@test
Пароль mylogin@test:
kinit: krb5_get_init_creds: невозможно достучаться до KDC в домене test, пробовал 0 KDC

Вы пытаетесь аутентифицироваться в домене test. Для Kerberos это не то же самое, что и домен TEST, который у вас в krb5.conf – в отличие от доменов DNS или доменов AD, имя домена Kerberos чувствительно к регистру.

Поскольку домен в нижнем регистре test не находится в [realms] в вашем krb5.conf, kinit использует другие методы для поиска KDC сервера – он ищет DNS SRV _kerberos._udp.<realm> записи после того, как переведет домен обратно в DNS домен.

Например, когда вы аутентифицируетесь по адресу …@test или …@TEST, и нет соответствующего подраздела [realms], вам нужны SRV записи по адресу _kerberos._udp.test по меньшей мере. (Active Directory должен добавлять их автоматически.)

Либо используйте kinit mylogin@TEST с правильным регистром, либо отрегулируйте конфигурацию [realms], либо убедитесь, что в вашем DNS домене test есть SRV записи, указывающие на контроллер домена.

(Кроме того: Если вы решите использовать строчную версию kinit mylogin@test, KDC Active Directory признает строчную форму, но возвращаемые билеты имеют домен в каноническом верхнем регистре, и большинство версий kinit отклонит несоответствующий ответ. Вы сможете разрешить канонизацию, используя kinit -C.)

Если ваше клиентское ПО – MIT Krb5, используйте export KRB5_TRACE=/dev/stderr, чтобы получить больше информации о том, что именно оно делает. (На macOS, вероятно, используется Heimdal.)

2) Как только я это сделаю, как я могу убедиться, что при подключении к myserver.test он использует токен, полученный из kinit mylogin@test при попытке подключения?

Проверьте, какой тип кеша учетных данных используется (как показано командой klist в “Кеш билетов” или установленным в переменной окружения $KRB5CCNAME).

Традиционный кеш учетных данных “FILE:” может содержать только билеты для одного клиента в первую очередь. Если вы выполните kinit как mylogin@TEST, вы всегда будете использовать билеты для mylogin@TEST. В этом случае вам придется вручную переключаться между различными кешами, установив $KRB5CCNAME на разные пути.

$ export KRB5CCNAME="FILE:/tmp/krb5cc_1000_prod" && kinit user@PROD && klist
$ export KRB5CCNAME="FILE:/tmp/krb5cc_1000_test" && kinit user@TEST && klist

$ kset() { export KRB5CCNAME="FILE:/tmp/krb5cc_$(id -u)_$1"; }
$ kset prod && kinit user@PROD && klist

При использовании MIT Krb5, кеши учетных данных “DIR:” и (на Linux) “KEYRING:” поддерживают несколько принципалов клиента одновременно. Вы можете просто несколько раз выполнить kinit, затем переключить ‘активный’ принципал, используя kswitch или даже определить пользовательские правила в файле ~/.k5identity (man 5 k5identity).

К сожалению, некоторые важные программы (такие как smbclient или Apache Directory Studio) пока не понимают кеши “DIR:” (или что-либо, кроме FILE: на самом деле).

При использовании macOS, то же самое применимо, но я считаю, что тип кеша учетных данных по умолчанию – “KCM:”, который может вероятно содержать несколько принципалов клиента. Или может и нет ¯\_(ツ)_/¯

Windows работает иначе; кеш билетов жестко связан с вашей сессией входа и (опять же) поддерживает только одного принципала клиента. Чтобы запустить программы от имени другого принципала без полного выхода из системы, используйте runas /netonly:

runas /netonly /user:mylogin@test cmd

Ответ или решение

Настройка файла krb5.conf для работы с двумя доменами Kerberos

Настройка Kerberos и работы с его конфигурационным файлом krb5.conf может быть непростой задачей, особенно для новичков. В вашем случае вы работаете с двумя доменами: foo.local и test, где последний был клонирован из первого. При этом, ваша конфигурация требует определенных корректировок для успешной аутентификации и взаимодействия между доменами.

1. Проблемы с аутентификацией к домену test

Существует несколько проблем, о которых стоит упомянуть в вашем текущем файлe krb5.conf:

[libdefaults]
  default_realm = FOO.LOCAL

[realms]
    FOO.LOCAL = {
        kdc = foo-dc01.foo.local
    }
    TEST = {
        kdc = foo-dc02.test
    }
Проблема с именами реалмов

Kerberos различает регистры символов в именах реалмов. Вы указываете TEST в секции [realms], однако, при выполнении команды kinit вы обращаетесь к test в нижнем регистре. Это приводит к тому, что Kerberos не находит KDC (Key Distribution Center) для вашего запроса.

Решение: Убедитесь, что вы используете правильный регистр при аутентификации. Вы можете изменить ваши команды kinit на:

kinit -V mylogin@TEST

Либо измените конфигурацию, добавив test в секцию [realms], чтобы она выглядела следующим образом:

[realms]
    FOO.LOCAL = {
        kdc = foo-dc01.foo.local
    }
    TEST = {
        kdc = foo-dc02.test
    }
    test = {
        kdc = foo-dc02.test
    }
Правильная конфигурация DNS

Если вы хотите использовать аутентификацию через нижний регистр (например, mylogin@test), убедитесь, что DNS-серверы настроены на выдачу SRV-записей для вашего домена test. Записи должны быть следующими:

_kerberos._udp.test.  IN  SRV  0  0  88 foo-dc02.test.

2. Использование токена после аутентификации через kinit

После успешной аутентификации с помощью kinit на myserver.test, необходимо гарантировать, что система использует токен, полученный при аутентификации:

kinit mylogin@TEST
Управление кэшем билетов

Важно обратить внимание на то, какой тип кэша билетов используется. Например, если вы используете FILE: кэш, то у вас будут билеты только для одного клиента. Для работы с несколькими кэшами вам придется вручную менять значения переменной окружения KRB5CCNAME.

Пример управления различными кэшами:

export KRB5CCNAME=FILE:/tmp/krb5cc_1000_test
kinit mylogin@TEST

Чтобы просмотреть активные билеты, используйте команду:

klist

В случае, если у вас установлена MIT Kerberos, вы можете рассмотреть использование DIR: или KEYRING: кэшей, которые поддерживают несколько клиентских принципов.

Заключение

Таким образом, для успешной аутентификации и работы с двумя клонированными доменами в Kerberos необходимо следить за корректным использованием регистров символов в именах реалмов, настроить DNS для поддержки SRV-записей и правильно управлять кэшами билетов. Используя вышеуказанные рекомендации, вы сможете добиться стабильной работы системы аутентификации, успешного исхода всех тестов и избежать распространенных ошибок в конфигурации Kerberos.

Оцените материал
Добавить комментарий

Капча загружается...