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

auth-pam: Динамический модуль аутентификации PAM для NGINX

Установка на Debian/Ubuntu

Эти инструкции касаются APT-пакета nginx-module-auth-pam, предоставляемого репозиторием GetPageSpeed Extras.

  1. Настройте APT-репозиторий, как описано в настройке APT-репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-auth-pam
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия            | Компонент   | Архитектуры   |
|-------------|-------------------|-------------|-----------------|
| debian      | bookworm          | main        | amd64, arm64    |
| debian      | bookworm-mainline | main        | amd64, arm64    |
| debian      | trixie            | main        | amd64, arm64    |
| debian      | trixie-mainline   | main        | amd64, arm64    |
| ubuntu      | focal             | main        | amd64, arm64    |
| ubuntu      | focal-mainline    | main        | amd64, arm64    |
| ubuntu      | jammy             | main        | amd64, arm64    |
| ubuntu      | jammy-mainline    | main        | amd64, arm64    |
| ubuntu      | noble             | main        | amd64, arm64    |
| ubuntu      | noble-mainline    | main        | amd64, arm64    |

Модуль Nginx для использования PAM для простой HTTP-аутентификации

Конфигурация

У модуля всего две директивы:

  • auth_pam: Это область аутентификации HTTP. Если указано значение off, модуль отключается (необходимо, когда мы хотим переопределить значение, установленное в директиве более низкого уровня).

  • auth_pam_service_name: это имя сервиса PAM, и по умолчанию оно установлено в nginx.

Примеры

Чтобы защитить всё под /secure, вам нужно добавить следующее в файл nginx.conf:

location /secure {
    auth_pam              "Защищённая зона";
    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              "Ограниченная зона";
    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              "Зона выполнения";
  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.