如何授予 Web 服务器用户对 /etc/shadow 文件的读取权限?

如何授予 Web 服务器用户对 /etc/shadow 文件的读取权限?

我希望本地 Linux 用户能够使用 Nginx PAM 模块进行身份验证(登录)。我使用的是 CentOS 7 服务器。具体来说,下面是我想做的事情...

自述对于 ngx http auth pam 模块说:

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

我的第一个问题是,在这种情况下,“nginx”是 Web 服务器用户吗?我的第二个问题是,我如何设置 Web 服务器用户读取 /etc/shadow 文件的权限?有人可以提供一些对他们有用的步骤吗?我按照在网上找到的许多教程操作,但没有成功。目前,当访问我希望本地 Linux 用户能够登录的站点时,我确实会收到身份验证提示(输入用户名和密码),但当输入本地 Linux 用户的凭据时,它没有成功,只是提示我再次输入。

谢谢,任何帮助我都会感激,如果需要我可以提供更多信息。

编辑:

我已经在 nginx 中配置了 PAM,首先使用以下步骤从源代码构建 nginx这里。在我的 nginx.conf 文件中,我在顶部添加了以下行以包含 PAM 模块...

load_module /etc/nginx/modules/ngx_http_auth_pam_module.so;

我还在 nginx.conf 中的 location 指令中包含了以下两行...

auth_pam "Secure area";
auth_pam_service_name "nginx";

在 nginx 服务文件的目录 '/etc/pam.d' 中,我有以下两行...

auth required /usr/lib/security/pam_unix.so
account required /usr/lib/security/pam_unix.so

看看自述对于 ngx http auth pam 模块,我发现我必须授予 Web 服务器用户对 /etc/shadow 文件的读取权限。为此,我首先创建了一个名为“shadow”的新组。然后,我将 Web 服务器用户(我假设是 nginx)分配给“shadow”组。然后,我更改了 /etc/shadow 文件的权限。我为此运行的命令如下...

groupadd shadow
usermod -a -G shadow nginx
chown root:shadow /etc/shadow
chmod g+r /etc/shadow

完成此操作后,我使用以下命令检查了 /etc/shadow 文件的权限

ls -l /etc/shadow

这就是输出的内容……

----r-----. 1 root shadow 1390 Aug 30 12:51 /etc/shadow

我还为 nginx 用户设置了密码。再次重申一下,在访问我想要进行身份验证的站点时,当我输入 nginx 用户名和密码时,它只会再次提示我输入。

答案1

我猜你已经安装了 nginx-module-auth-pam 并且配置好了/etc/pam.d/nginx

如果没有:安装 rpm 文件,因为一切都会为您配置。换句话说:您不必手动调整/etc/shadow访问设置。事实上,您一定不如果您使用 pam,请进行调整/etc/shadow。此文件包含用户的(散列)密码,因此出于安全原因,您不希望授予任何进程或程序(pam 除外)或用户(root 除外)对此文件的访问权限。

如果您有订阅:

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install nginx-module-auth-pam

如果没有:抓取或构建https://github.com/jfut/nginx-module-auth-pam-rpm

为什么不只回答你的问题?因为你提供的示例适用于类似 Debian 的系统,但对于类似 Redhat 的系统(如 CentOS 7),配置方式略有不同。

您可以在以下位置找到此模块的更多配置示例GitHub

另请检查https://nginx-extras.getpagespeed.com/了解更多配置示例。

相关内容