auth-pam: динамический модуль аутентификации PAM для NGINX
Установка
Вы можете установить этот модуль в любой дистрибутив на основе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-auth-pam
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-auth-pam
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_auth_pam_module.so;
Этот документ описывает nginx-module-auth-pam v1.5.5, выпущенный 20 июня 2023 года.
Модуль Nginx для использования PAM для простой http аутентификации
Конфигурация
У модуля есть только две директивы:
-
auth_pam: Это область http аутентификации. Если указать значениеoff, модуль будет отключен (необходимо, когда мы хотим переопределить значение, установленное в директиве более низкого уровня). -
auth_pam_service_name: это имя сервиса PAM, по умолчанию оно установлено наnginx.
Примеры
Чтобы защитить все под /secure, вы добавите следующее в файл
nginx.conf:
location /secure {
auth_pam "Secure Zone";
auth_pam_service_name "nginx";
}
Обратите внимание, что модуль работает от имени пользователя веб-сервера, поэтому используемые модули PAM должны
уметь аутентифицировать пользователей без прав root; это означает, что если вы
хотите использовать модуль pam_unix.so для аутентификации пользователей, вам нужно разрешить
пользователю веб-сервера читать файл /etc/shadow, если это вас не пугает (в
системах, подобных Debian, вы можете добавить пользователя www-data в группу shadow).
В качестве примера, чтобы аутентифицировать пользователей против LDAP-сервера (используя
модуль pam_ldap.so), вы будете использовать файл /etc/pam.d/nginx следующего вида:
auth required /lib/security/pam_ldap.so
account required /lib/security/pam_ldap.so
Если вы также хотите ограничить пользователей из LDAP, которые могут аутентифицироваться, вы можете
использовать модуль pam_listfile.so; чтобы ограничить доступ к ресурсам под
/restricted, добавьте следующее в файл nginx.conf:
location /restricted {
auth_pam "Restricted Zone";
auth_pam_service_name "nginx_restricted";
}
Используйте следующий файл /etc/pam.d/nginx_restricted:
auth required /lib/security/pam_listfile.so onerr=fail item=user \
sense=allow file=/etc/nginx/restricted_users
auth required /lib/security/pam_ldap.so
account required /lib/security/pam_ldap.so
И добавьте пользователей, которым разрешено аутентифицироваться, в файл /etc/nginx/restricted_users
(не забудьте, что пользователь веб-сервера должен иметь возможность читать этот файл).
PAM окружение
Если вы хотите использовать плагин pam_exec.so для аутентификации на основе запроса, модуль может добавить в окружение PAM переменные HOST и REQUEST, если вы установите флаг auth_pam_set_pam_env::
location /pam_exec_protected {
auth_pam "Exec Zone";
auth_pam_service_name "nginx_exec";
auth_pam_set_pam_env on;
}
С этой конфигурацией, если вы получите доступ к URL, например:
http://localhost:8000/pam_exec_protected/page?foo=yes&bar=too
окружение PAM будет включать следующие переменные:
HOST=localhost:8000
REQUEST=GET /pam_exec_protected/page?foo=yes&bar=too HTTP/1.1
Вы можете использовать эту информацию для аутентификации на основе запроса. Вам нужна недавняя версия pam (>= версия 1.0.90), чтобы передавать переменные окружения в pam_exec.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-auth-pam.