Вопрос или проблема
Я пытаюсь настроить репозиторий Apache SVN с аутентификацией Kerberos и авторизацией по членству в группе LDAP, так чтобы только пользователи, принадлежащие к определенной группе, могли получить к нему доступ. Аутентификация Kerberos сама по себе работает нормально, как и LDAP. Но я хотел бы объединить их таким образом, чтобы в конфигурации Apache не было учетных данных в открытом виде для привязки к директории LDAP. Моя текущая конфигурация (которая не работает) следующая:
LDAPVerifyServerCert Off
<Location /svn01>
DAV svn
SVNParentPath /var/www/svn01
AuthType Kerberos
Authname "Test Repo"
KrbMethodK5Passwd On
KrbAuthRealms KOUKOU.LOCAL
KrbSaveCredentials On
KrbServiceName HTTP
Krb5KeyTab /etc/httpd/conf.d/svnusr.http.keytab
AuthLDAPUrl ldaps://ad01.koukou.local:636/dc=koukou,dc=local?krbPrincipalName
Require ldap-group CN=admins,CN=Users,DC=koukou,DC=local
</Location>
Я видел такую конфигурацию в интернете, но у меня она не работает. В браузере я получаю “Unauthorized”, а в журнале ошибок Apache я вижу:
[Thu Mar 02 09:55:21.817559 2017] [authnz_ldap:debug] [pid 10314] mod_authnz_ldap.c(838): [client 172.21.11.13:57737] AH01711: auth_ldap authorise: User DN not found, User not found
и
[Thu Mar 02 09:55:21.817605 2017] [authz_core:error] [pid 10314] [client XXX.XXX.XXX.XXX:57737] AH01631: user [email protected]: authorization failure for "/svn01/repo":
Что-то не так? Даже если я добавляю сегмент для привязки с учетными данными в конфигурации, я по-прежнему получаю вышеуказанные ошибки.
Версия Apache 2.4.6, CentOS 7.2 и Windows AD 2012R2 с функциональным уровнем 2008.
Спасибо заранее,
Ник
Для этой конкретной проблемы у меня это работает:
KrbLocalUserMapping On
Вам необходима как минимум эта версия: mod_auth_kerb-5.4
Больше об этом:
https://bugzilla.redhat.com/show_bug.cgi?id=970678
Кроме того, я использую и это:
Require valid-user
Больше об этом:
https://cwiki.apache.org/confluence/display/HTTPD/PasswordBasicAuth
Ответ или решение
Настройка Apache 2.4 с аутентификацией Kerberos и авторизацией LDAP — это сложная, но осуществимая задача. Давайте проанализируем вашу текущую конфигурацию и предложим некоторое решение, чтобы обеспечить безопасность вашего репозитория SVN, используя Kerberos для аутентификации и LDAP для управления доступом на основе групп.
Шаг 1: Подготовка окружения
Перед началом настройки убедитесь, что у вас установлены все необходимые модули Apache, в частности:
mod_auth_kerb
(илиmod_auth_gssapi
, который является более новым)mod_authnz_ldap
mod_ssl
(если вы используете LDAPS)
Убедитесь, что Apache настроен для работы с Kerberos и что у вас есть правильный ключевой табулятор (keytab), чтобы избежать ввода паролей в plaintext.
Шаг 2: Обновленная конфигурация Apache
Давайте рассмотрим вашу первоначальную конфигурацию и внесем необходимые изменения:
LDAPVerifyServerCert Off
<Location /svn01>
DAV svn
SVNParentPath /var/www/svn01
AuthType Kerberos
AuthName "Test Repo"
KrbMethodK5Passwd On
KrbAuthRealms KOUKOU.LOCAL
KrbSaveCredentials On
KrbServiceName HTTP
Krb5KeyTab /etc/httpd/conf.d/svnusr.http.keytab
# Используйте правильный LDAP URL и атрибут
AuthLDAPUrl "ldaps://ad01.koukou.local:636/dc=koukou,dc=local?samaccountname?sub?(objectClass=user)"
# Проверка членства в группе
Require ldap-group CN=admins,CN=Users,DC=koukou,DC=local
Require valid-user
</Location>
Шаг 3: Разъяснение изменений
-
AuthLDAPUrl: Убедитесь, что ваш URL LDAP правильно формируется. Я рекомендую использовать
samaccountname
, так как это распространённый атрибут для имен пользователей в Active Directory. Также проверьте, что фильтр суб-объекта (sub) корректен для вашей структуры LDAP. -
KrbLocalUserMapping: Добавьте
KrbLocalUserMapping On
в вашу конфигурацию Apache для сопоставления имен пользователей Kerberos с локальными именами пользователей Apache. -
Require valid-user: Эта директива позволяет любому аутентифицированному пользователю получить доступ к ресурсу, если он соответствует требованиям в
Require ldap-group
.
Шаг 4: Логирование и отладка
Если после этих изменений вы всё ещё сталкиваетесь с ошибками, убедитесь, что включен режим отладки для соответствующих модулей. Вы можете добавить следующие директивы в конфигурацию Apache:
LogLevel debug mod_authnz_ldap:debug mod_auth_kerb:debug
Сотрудничайте с журналами ошибок Apache, чтобы найти дополнительные подсказки о том, что именно может вызывать проблемы. Ошибки, связанные с «User DN not found» могут указывать на проблемы с конфигурацией LDAP или с самим фильтром.
Заключение
Данная конфигурация предоставляет вам рабочий пример настройки аутентификации и авторизации для Apache с использованием Kerberos и LDAP. Всегда тестируйте ваши изменения в тестовой среде перед развертыванием в продуктиве. Не забывайте, что возмещение кода и конфигурации — это нормальная часть процесса, так как каждая установка может иметь свои уникальные аспекты.
Если вам нужна дополнительная помощь, не стесняйтесь задавать вопросы!