Nginx 通过 pam_script 进行 PAM 身份验证

Env*_*vek 5 nginx authentication pam

有没有人设置过这样的配置?它对我不起作用。

我已经在 Ubuntu 12.04(它是用 PAM 模块构建的)上安装了 nginx-extras,并添加到站点配置中:

location ^~ /restricted_place/ {
    auth_pam              "Please specify login and password from main_site";
    auth_pam_service_name "nginx";
}
Run Code Online (Sandbox Code Playgroud)

之后,在/etc/pam.d/nginx

auth    required    pam_script.so dir=/path/to/my/auth_scripts
Run Code Online (Sandbox Code Playgroud)

并写得最简单/path/to/my/auth_scripts/pam_script_auth(我也尝试过编写复杂的脚本)

#!/bin/sh
exit 0 # should allow anyone
Run Code Online (Sandbox Code Playgroud)

不起作用。脚本已启动(我编写了功能齐全的脚本,该脚本成功执行、检查凭据、写入自己的日志并返回正确的退出代码,并且执行时间很长)。但是没有访问被授予,只有被拒绝。

/var/log/nginx/error.log出现这一行:

2012/09/13 10:44:42 [alert] 1666#0: waitpid() failed (10: No child processes)
Run Code Online (Sandbox Code Playgroud)

如果我指定/etc/pam.d/nginx

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

并授予www-data用户阅读/etc/shadow权限,unix 授权工作正常。但是脚本身份验证不起作用。

我不明白,哪里出了问题。是在 nginx 模块中,还是在 pam_script 模块中?

mgo*_*ven 2

nginx PAM 模块也运行 PAMaccount操作,因此您还需要对其进行配置。您可以使用该pam_permit模块始终成功:

auth    required    pam_script.so dir=/path/to/my/auth_scripts
account required    pam_permit.so
Run Code Online (Sandbox Code Playgroud)