Вопрос или проблема
Я пытаюсь настроить PAM для использования файлов “passwd” и “shadow” хостинговой системы для аутентификации пользователя, который работает с веб-приложением.
Я использую RedHat 6, Apache версии 2.2, модуль mod_authnz_pam для Apache.
PAM в apache (httpd.conf
) настроен следующим образом:
<Location />
AuthType Basic
AuthName "basic_auth"
AuthBasicProvider PAM
AuthPAMService httpd
Require valid-user
</Location>
Я создал файл с именем httpd
в /etc/pam.d
со следующей конфигурацией:
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
SELinux включен. getenforce
возвращает “Enforcing”.
Я также выполнил следующее
setsebool -P allow_httpd_mod_auth_pam 1
Поэтому при попытке посетить IP-адрес у меня запрашивают учетные данные пользователя. Но когда я ввел свои системные учетные данные, я получил следующие логи
unix_chkpwd[29856]: check pass; user unknown
unix_chkpwd[29856]: password check failed for user (username)
localhost httpd: pam_unix(httpd:auth): authentication failure; logname= uid=48 euid=48 tty= ruser= rhost=xxx.xx.xx.x user=username
Мое имя пользователя определенно существует в файлах passwd и shadow, но почему-то PAM утверждает, что его не существует.
Что еще я упустил?
Настройте /etc/pam.d/httpd
следующим образом или похоже.
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit force revoke
session include system-auth
session required pam_loginuid.so
Идея заключается в том, чтобы заставить стек pam просматривать другие файлы вместо того, чтобы пытаться проверить вход. system-auth
обычно вызывается многими другими службами pam, такими как login
, su
и sudo
.
Ответ или решение
Вопрос: Что мне не хватает в настройке PAM для Apache на RedHat?
Ответ:
Вы на верном пути, но ключевая проблема заключается в том, как настроены PAM и файлы конфигурации. Давайте рассмотрим, что может быть упущено или отрегулировано для успешной аутентификации пользователей через модуль mod_authnz_pam
в Apache.
Актуальность и контекст
Вы используете RedHat 6 с Apache 2.2 и хотите аутентифицировать пользователей с использованием файлов passwd
и shadow
. Исходя из вашей конфигурации, аутентификация запускается, но PAM не может найти пользователя, основанного на входных данных, что подразумевает, что настройки PAM либо неверны, либо недостаточны.
Настройка PAM
- Проверка файла
/etc/pam.d/httpd
:
Такие конфигурации, как ваша, могут не всегда правильно включать другие необходимые модули PAM. Вместо простой настройки, я рекомендую адаптировать файл PAM, чтобы использоватьsystem-auth
, как это предложено вами:
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit force revoke
session include system-auth
session required pam_loginuid.so
Эта конфигурация обеспечит использование всех основных механизмов аутентификации, которые уже настроены в system-auth
, что должно упростить разбирание и устранение проблем.
- Проверка конфигурации
system-auth
:
Проверьте сам файл/etc/pam.d/system-auth
, чтобы удостовериться, что он правильно настроен для работы сpam_unix.so
. Важно проверить, правильно ли установлены параметры дляpam_unix
, такие какnullok
,try_first_pass
и аналогичные.
SELinux и его влияние
Убедитесь, что SELinux не блокирует работу Apache или PAM. Вы уже активировали allow_httpd_mod_auth_pam
, но также проверьте логи SELinux на наличие записей, указывающих на потенциальные блокировки. Используйте команду:
sudo ausearch -m avc -ts recent
Это покажет записи о блокировках, если они есть. Если проблемы будут выявлены, вы можете временно установить SELinux в режим разрешения для диагностики:
setenforce 0
Логи и отладка
Логи, которые вы предоставили, показывают, что unix_chkpwd
не может найти пользователя, это часто связано с тем, что пользователь не был найден в системных файлах. Убедитесь, что выполняется следующее:
- Пользователь существует в
/etc/passwd
и/etc/shadow
. - Убедитесь, что формат и структура этих файлов корректны, и у пользователя есть права доступа, соответствующие требованиям.
Дополнительные рекомендации
- Проверьте разрешения для файлов конфигурации PAM. Они должны быть защищены (например,
chmod 700
) от несанкционированного доступа. - Убедитесь, что Apache работает от имени пользователя, который имеет доступ к необходимым файловым ресурсам.
- Возможно, стоит протестировать аутентификацию с помощью другой утилиты, которая использует PAM, чтобы подтвердить корректность конфигурации PAM отдельно от Apache.
Заключение
Убедившись, что настройки PAM правильные и что SELinux настроен для работы с Apache, ваша конфигурация должна заработать. Если же возникает необходимость в дальнейшей диагностике, используйте логи PAM и SELinux, чтобы выявить проблему. Во избежание дублирования проблем с аутентификацией всегда полезно сосредотачиваться на детальных и проверенных конфигурациях, которые уже были устоявшимися в других сервисах PAM.
Надеюсь, эти рекомендации помогут вам окончательно настроить аутентификацию PAM для вашего Apache сервера.