如何使用 nginx PAM 模块?

noi*_*llo 7 freebsd nginx authentication pam

我想使用 nginx PAM 模块在 FreeBSD 系统上使用现有用户对站点进行身份验证。我尝试使用 pam_unix.so,但没有成功。它只是不让我使用我的 usr/psw 对。:(

nginx配置:

location / {
        root html;
        auth_pam               "Secure Zone";
        auth_pam_service_name  "nginx";
        fastcgi_pass           127.0.0.1:9000;
        fastcgi_index          index.php;
        fastcgi_param          SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
        include                fastcgi_params;
    }
Run Code Online (Sandbox Code Playgroud)

目录中的nginx文件/usr/local/etc/pam.d

auth    required     pam_unix.so
account required     pam_unix.so
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我一个工作配置,我将不胜感激。:)

Guy*_*Guy 5

回答一个非常古老的问题,但我能够确认这确实有效,因此这可能会有所帮助。这允许根据本地服务器帐户名称对 nginx 位置进行身份验证。天啊。

  • Ubuntu 18.04
  • nginx 1.14(包括 http_auth_pam 模块)
nginx -v
nginx version: nginx/1.14.0 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)

创建/etc/pam.d/nginx并添加行:

@include common-auth
Run Code Online (Sandbox Code Playgroud)

在您的 nginx 配置中:

location /secure {
        auth_pam                "Secure zone";
        auth_pam_service_name   "nginx";
}
Run Code Online (Sandbox Code Playgroud)

神奇的酱汁是:

sudo usermod -aG shadow www-data
Run Code Online (Sandbox Code Playgroud)

检查 nginx.conf 中使用的帐户user www-data。它有时可以配置为nobody.

重启 nginx 和宾果游戏!

感谢上面的答案帮助我完成了这个解决方案


小智 4

不确定你是否已经尝试过这个,但我确实注意到了:

请注意,该模块以 Web 服务器用户身份运行,因此所使用的 PAM 模块必须能够在无需 root 的情况下对用户进行身份验证;这意味着如果你想使用 pam_unix.so 模块来验证用户,你需要让 Web 服务器用户读取 /etc/shadow 文件(如果这不会吓到你)(在 Debian 之类的系统上,你可以添加 www-data用户到影子组)。

Nginx HTTP Auth PAM 模块自述文件

恐怕我无法确认您的配置,因为我没有使用 pam_unix.so。