auth-pam: NGINX 的 PAM 认证动态模块
安装
您可以在任何基于 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,于 2023 年 6 月 20 日发布。
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";
}
请注意,模块以 Web 服务器用户的身份运行,因此所使用的 PAM 模块必须能够在不使用 root 权限的情况下认证用户;这意味着如果您想使用 pam_unix.so 模块来认证用户,您需要让 Web 服务器用户能够读取 /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 中(请记住,Web 服务器用户必须能够读取此文件)。
PAM 环境
如果您想使用 pam_exec.so 插件进行基于请求的认证,模块可以通过设置 auth_pam_set_pam_env 标志将 HOST 和 REQUEST 变量添加到 PAM 环境中:
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。
GitHub
您可以在 nginx-module-auth-pam 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。