Настройка mod_auth_external для Apache
Кратко: подключите модуль mod_auth_external, соберите его через apxs2, загрузите в конфигурацию Apache и адаптируйте программу аутентификации, чтобы она читала учётные данные через stdin и возвращала коды выхода, ожидаемые модулем. В статье — пошаговые команды, чек‑лист, критерии приёмки и советы по отладке.
Что такое mod_auth_external
mod_auth_external — это модуль Apache, который позволяет реализовать внешнюю аутентификацию через произвольные программы (скрипты на shell, Perl, Java и др.). Коротко: внешний процесс получает логин/пароль и возвращает успех/ошибку аутентификации.
Зачем это полезно
Если у вас нестандартный источник пользователей (база, JDBC, внешняя служба), модуль даёт гибкость: аутентификатор может быть любым исполняемым файлом. Это удобно при интеграции с существующим Java-кодом.
Шаги установки и настройки (пошагово)
- Скачайте и распакуйте исходники mod_auth_external.
wget http://www.unixpapa.com/software/mod_auth_external-2.2.11.tar.gz
tar –xvzf mod_auth_external-2.2.11.tar.gz- Установите apxs2 (в SuSE он в пакете apache2-devel с ISO, примечание: пакет с ISO был смонтирован в /mnt/iso4).
rpm -ivh /mnt/iso4/suse/x86_64/apache2-devel-2.0.49-27.8.x86_64.rpm- Соберите и установите модуль с помощью apxs2.
apxs2 -c mod_auth_external.c
apxs2 -i -a mod_auth_external.laapxs обычно вносит изменения в конфигурацию, но в некоторых случаях автоматическая правка не срабатывает. Тогда добавьте загрузку модуля вручную и создайте нужные ссылки.
LoadModule auth_external_module /usr/lib64/apache2-prefork/mod_auth_external.so
Если Apache использует другую директорию для модулей, создайте симлинк, чтобы Apache нашёл .so файл (в примере — из /usr/lib64/apache2/ в /usr/lib64/apache2-prefork/).
Настройте директивы в httpd.conf и в секциях
по инструкции INSTALL из архива mod_auth_external (пример: ExternalAuth и связанные параметры).
Важные изменения в программе аутентификации
mod_auth_external может передавать параметры в исполняемый процесс разными способами: через переменные окружения (ENV), через пайп (stdin), через механизм checkpassword или через фиксированные функции (например, для Radius/Sybase). В моём случае модуль мог выдавать параметры по stdin, поэтому я изменил Java-программу testConnection:
- чтобы принимать username и password из stdin (pipe), а не из командной строки; это упрощает взаимодействие с модулем и закрывает передачу паролей в параметрах процесса;
- чтобы возвращать коды выхода в том формате, который ожидает модуль: примерные поведенческие образцы демонстраций показывают обратную логику, поэтому проверяйте и согласуйте exit-коды (в примерах Perl успешная аутентификация возвращала exit 1, неуспех — exit 0). Я привёл поведение Java в соответствие с этой логикой.
Важно: проверяйте конкретную реализацию модульной версии и её документацию — способы передачи и коды выхода могут различаться.
Краткая методология (минимальный план работ)
- Оценить требования к аутентификации и формат передачи данных (env/stdin/checkpassword).
- Подготовить окружение (apxs2, dev-пакеты).
- Скачать и собрать mod_auth_external.
- Зарегистрировать модуль в конфигурации Apache (LoadModule или apxs2 -a).
- Подготовить и адаптировать внешнюю программу (stdin/exit-коды).
- Тестировать через curl/браузер и логи Apache.
Чек‑лист перед запуском
- Установлен apxs2 и соответствующие dev-пакеты.
- mod_auth_external успешно скомпилирован (apxs2 завершил без ошибок).
- LoadModule корректно указан в конфигурации Apache.
- Симлинки на .so расположены там, где Apache ожидает модули.
- Внешняя программа читает stdin или ожидает env-переменные в соответствии с настройкой.
- Exit-коды внешней программы соответствуют обязанностям модуля.
- Приведены в порядок права на исполняемый файл и SELinux/аппартфильтры не блокируют запуск.
Критерии приёмки
- Apache стартует без ошибок, модуль загружается (в логах или через apachectl -M виден auth_external_module).
- Запросы, для которых должна срабатывать внешняя аутентификация, корректно перенаправляются и обрабатываются.
- При корректных учётных данных доступ разрешён; при неверных — доступ запрещён.
- В логах Apache и в логах внешней программы есть записи о вызовах и результатах аутентификации.
Отладка и распространённые ошибки
- Ошибка: модуль не загружается. Проверьте путь в LoadModule, наличие .so и права на файл.
- Ошибка: Apache падает при вызове внешней программы. Проверьте права, SELinux/AppArmor и stdout/stderr программы.
- Программа не получает пароли. Убедитесь в режиме передачи (stdin vs env). Тестируйте локально, отправляя данные в stdin.
- Неправильные exit-коды. Сопоставьте логи и установите корректные коды для успешного/неуспешного сценария.
Совет: вместо изменения продовой программы сначала сделайте небольшой тестовый скрипт (shell/Perl), чтобы подтвердить формат передачи данных.
Альтернативы и когда это не подходит
- Если нужна тесная интеграция с Java-приложением через JNI или библиотеку, лучше реализовать модуль на C или использовать модуль, поддерживающий PAM/RADIUS напрямую.
- Для полноценных SSO/OAuth решений рассмотрите внешние провайдеры (mod_auth_openidc и др.).
- Если важно производительность при высокой нагрузке, учтите накладные расходы на запуск внешних процессов и рассмотрите persistent daemon с протоколом (сокеты).
Шпаргалка — ключевые команды
- Скачивание и распаковка исходников:
wget http://www.unixpapa.com/software/mod_auth_external-2.2.11.tar.gz
tar –xvzf mod_auth_external-2.2.11.tar.gz- Установка apxs2 (пример под SuSE с ISO):
rpm -ivh /mnt/iso4/suse/x86_64/apache2-devel-2.0.49-27.8.x86_64.rpm- Сборка и установка модуля:
apxs2 -c mod_auth_external.c
apxs2 -i -a mod_auth_external.la- Принудительная загрузка модуля (если apxs2 не внес изменения автоматически):
LoadModule auth_external_module /usr/lib64/apache2-prefork/mod_auth_external.so
Однострочный глоссарий
- apxs2 — утилита для сборки и установки модулей Apache; упростит компиляцию и регистрацию .so.
- mod_auth_external — модуль Apache для вызова внешних программ аутентификации.
- stdin/pipe — механизм передачи данных в программу через стандартный ввод.
- exit-код — числовое значение, которое программа возвращает при завершении; модуль интерпретирует его как успех/ошибку.
Резюме
- mod_auth_external даёт гибкую внешнюю аутентификацию для Apache.
- Важные шаги: установка apxs2, сборка модуля, корректная загрузка в конфигурацию и адаптация внешней программы к формату передачи данных и кодам выхода.
- Тестируйте сначала с простыми скриптами и только затем подключайте приложение на Java.
Важное: всегда проверяйте логи Apache при отладке и убедитесь, что права и безопасность (SELinux/AppArmor) не мешают запуску внешних программ.
Похожие материалы
Управление таргетированной рекламой
Как улучшить качество видео в Instagram
Как перенести покемонов из 3DS в Pokémon Sword/Shield
Права для редактирования защищённых ключей реестра
Как настроить Adapt Sound на Samsung