auth-pam: Динамический модуль аутентификации PAM для NGINX
Установка на Debian/Ubuntu
Эти инструкции касаются APT-пакета nginx-module-auth-pam, предоставляемого репозиторием GetPageSpeed Extras.
- Настройте APT-репозиторий, как описано в настройке APT-репозитория.
- Установите модуль:
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.