Назад | Перейти на главную страницу

Linux SSO для нескольких доменов Windows

Я успешно реализовал единый вход на apache для пользователей Windows в том же домене AD, в котором находится сервер apache: AD domain = example.com Linux server = linux.example.com KDC = ad.example.com

Я установил для KrbLocalUserMapping значение ON в httpd.conf, поскольку приложение, в которое входят пользователи, требует удаления части имени пользователя @ example.com.

Теперь я хочу разрешить пользователям из филиалов также входить в приложение, но они происходят из другого домена = branch.example.com. Оба домена находятся в доверительных отношениях.

Когда пользователи из branch.example.com пытаются войти в систему, они получают сообщение «Internal Server Error», а в журнале ошибок apache говорится: «Krb5_aname_to_localname () не обнаружил сопоставления для основного user@branches.example.com»

Я предполагаю, что пользователи, пришедшие из поддомена branch.example.com, не получают доменную часть имени пользователя.

Что мне нужно изменить и где (возможно, krb5.conf?). Нужно ли мне создавать отдельную вкладку для поддомена веток?

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

Я только что столкнулся с той же проблемой, что и вы, и благодаря эта тема вот, я нашел ответ!

После включения второй (доверенной) области в моем mod_auth_kerb настройки и поместив нужные данные в keytab, если я пытался войти в систему с пользователем из второго домена, я получал ошибки в журнале httpd, например:

[auth_kerb:notice] [pid 1234] [client X.X.X.X:12345] krb5_aname_to_localname() found no mapping for principal user@BRANCHES.EXAMPLE.COM

Хорошая новость в том, что я решил эту проблему! Подробности ниже....


Во-первых, в конфигурации Apache HTTPD вам нужно что-то вроде:

# Use this one for both Examples and Branches together
KrbAuthRealms EXAMPLE.COM BRANCHES.EXAMPLE.COM

# Strip the realm from the username
KrbLocalUserMapping On

Это говорит mod_auth_kerb принимать пользователей либо из области основного домена, либо из области ветвей, и убирать область из имени пользователя. Что означает, что admin@example.com переходит к администратору, а guest@branches.example.com идет в guest

Далее, предполагая, что MIT kerberos, вам нужно отредактировать свой /etc/krb5.conf файл и расскажите, как сопоставить принципалов с именами пользователей. По разным историческим причинам это не делается в libdefaults раздел, как и следовало ожидать. Это также не сделано для отдельных областей, что меня зацепило. Вместо этого это делается с auth_to_local записи в [realm] раздел области по умолчанию.

По умолчанию krb5_aname_to_localname() Функция libkrb5 удалит область из области по умолчанию и оставит ее там в противном случае. Итак, мы должны добавить запись, чтобы сказать ему, что нужно также удалить область из области ветвей. (Возможны и более сложные правила, см. krb5.conf страницу руководства для получения дополнительной информации)

Итак, мы хотели бы, чтобы наша конфигурация была примерно такой:

[libdefaults]
  default_realm = EXAMPLE.COM

[realms]
   EXAMPLE.COM = {
     kdc = dc.example.com
     admin_server = dc.example.com
     auth_to_local = RULE:[1:$1@$0](^.*@BRANCHES\.EXAMPLE\.COM)s/@.*//
     auth_to_local = DEFAULT
   }
   BRANCHES.EXAMPLE.COM = {
     kdc = dc.branches.example.com
     admin_server = dc.branches.example.com
   }

Обратите внимание, как BRANCHES.EXAMPLE.COM правило отображения живет не в своей сфере, а в основном EXAMPLE.COM область, которая является областью по умолчанию.


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

После изменений требуется перезапуск только службы HTTPD Apache.