Почему "Ссылка на локальную область" не работает с MIT-Kerberos?

Я пытаюсь настроить межобластную аутентификацию между двумя KDC (EXAMPLE.COM & HADOOP.COM), чтобы пользователь в области EXAMPLE.COM мог получить доступ к службе в HADOOP.COM. Я добавил раздел capaths в мой krb5.conf для того же:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h 
 renew_lifetime = 7d
 forwardable = true

[realms]
 EXAMPLE.COM = { 
  kdc = examplekdc.example.com
  admin_server = examplekdc.example.com
 }

 HADOOP.COM = { 
  kdc = hadoopkdc.hadoop.com
  admin_server = hadoopkdc.hadoop.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

[capaths]
 HADOOP.COM = { 
  EXAMPLE.COM = . 
 }

Я также добавил требуемый принципал krbtgt/HADOOP.COM@EXAMPLE.COM в оба KDC. Пока все работает, и мое приложение может делать то, что ему нужно.

Меня беспокоит следующая строка в моем журнале трассировки на EXAMPLE.COM:

[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM

Мои вопросы следующие:

  1. что это за реферал? Это жаргон Kerberos для запросов между областями?
  2. почему местный реферал потерпит неудачу? Как явно указать, как я хочу, чтобы происходило обращение к локальной области?
  3. В чем смысл запасного царства? И как мне указать один?

Как вы можете видеть из моего krb5.conf, я не указал явно область резервирования или ссылки, поэтому я думаю, что Kerberos выбирает для них значения по умолчанию. Я хочу знать, как я могу указать их явно.

1 ответ

Решение
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database

Ваш клиент запросил у KDC принципала обслуживания. Ваш KDC не знал, как найти сферу для этого принципала. Я считаю, что если вы добавите запись в [domain_realms] раздел krb5.conf используется EXAMPLE.COM KDC с содержанием вроде

[domain_realms]
    .hadoop.com = HADOOP.COM

Тогда KDC узнает, что хосты заканчиваются на hadoop.com обслуживаются HADOOP.COM королевство и попробует реферал сам.

[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM

Это производится в try_fallback функция в src/lib/krb5/krb/get_creds.c когда клиент получает ошибку от KDC при первом запросе. Клиент немного более агрессивен в угадывании области службы, чем KDC, потому что, если клиент не может угадать, запрос потерпит неудачу. Клиент пытается HADOOP.COM потому что последнее предположение - убрать имя хоста и попробовать имя домена в верхнем регистре. Если вы правильно настроите KDC, вы сохраните один запрос. Хосты Windows, скорее всего, больше заботятся о правильной конфигурации KDC, чем MIT Kerberos.

Другие вопросы по тегам