Перейти к содержанию

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.