Я успешно реализовал единый вход на 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.