跳转至

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 标志将 HOSTREQUEST 变量添加到 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 仓库 中找到有关此模块的其他配置提示和文档。