我想授予我的 Web 服务器用户 (nginx) 对 /etc/shadow 文件的读取权限,并确认我为此采取的步骤。我使用的系统是 CentOS 7。
- 首先我创建了一个名为 shadow 的组:
groupadd shadow
- 然后我将 Web 服务器用户(nginx)添加到组 shadow:
usermod -aG shadow nginx
- 然后我将所有者更改为root,并将文件组所有者更改为组shadow:
chown root:shadow /etc/shadow
- 然后我允许 shadow 组中所有用户具有读取 /etc/shadow 文件的权限:
chmod g+r /etc/shadow
完成这些步骤后,我运行ls -l /etc/shadow
并看到以下输出
----r-----. 1 root shadow 1390 8月30日 12:51 /etc/shadow
我遵循的这些步骤正确吗?请告诉我,如果需要,我可以提供更多信息。
答案1
更改如此重要的文件的所有者组甚至可能会破坏某些东西,这是危险的。
实现此目的的正确安全方法是使用 POSIX ACL:
setfacl -m u:special_user:r /etc/shadow
这里的另一个问题是,你把这个权利给了Nginx/etc/shadow
,一个 Web 服务器。我猜想它运行着一些 Web 应用程序。而从 Web 应用程序直接访问是非常糟糕的主意。
这看起来可能适得其反,但所有严肃的系统都是这样做的:它们包括私人安全代理服务它执行所有安全检查,并且只有 Web 前端可以与此代理服务通信以访问敏感数据或执行其他敏感操作。例如,这是 Proxmox VE 的构建方式:有一个执行危险操作的 pvedaemon,而 pveproxy(Web 服务器)仅在需要执行此类操作时才与 pvedaemon 通信。
第三个问题是您根本无法访问此文件。您打算做什么?此文件是 PAM 套件的一部分。如果某些系统身份验证被修改,使其不使用影子文件,或者被移动,该怎么办?您应该使用 PAM 库调用,它将为您完成所有这些工作。
答案2
这看起来像是
chmod g=r /etc/shadow
并不是
chmod g+r /etc/shadow
也就是说,您似乎不小心使用了等号而不是加号。
编辑:
我刚刚仔细检查了我的系统,我的文件的权限/etc/shadow
如下所示:
`----------. 1 root root 1183 20 Aug 11.53 /etc/shadow`
因此看起来您的权限是符合预期的!