为什么 nginx 可以访问 /etc/passwd?

为什么 nginx 可以访问 /etc/passwd?

我正在尝试为我的几个网站设置新的 VPS。

安装了 nginx、php-fpm 和其他所需服务。

我为我的网站设置了一个 nginx 服务器块(虚拟主机),然后尝试创建一个 php 文件进行测试。一切运行良好,但我想尝试echo file_get_contents('/etc/passwd')文件进行安全检查。它也起作用了,test.php 文件可以访问我的 VPS etc/passwd 文件等。

在我尝试之后echo shell_exec('ls /'),这会显示我的根文件夹。

那么这是正常的吗?或者我该如何防止这种情况发生。我想拒绝除运行 php 代码的用户之外/var/www的所有人访问。www-data

对不起,我的英语不好。

谢谢。

答案1

所有用户都可以读取 passwd 文件。这很正常。/ 也一样。程序需要访问 /etc/passwd 才能将用户名映射到 ID。实际密码存储在 /etc/shadow 中,该目录受到更多限制。

如果出于某种原因您不希望程序看到这些文件,您应该考虑创建一个 chroot jail,为其提供自己的虚假根目录和所有所需文件的单独副本。但对于大多数服务来说,这是不必要的。

答案2

您可以通过设置和使用 AppArmour 或 SELinux 来防止超出限制的访问。

您在这里真正想说的是:“我放到系统上并运行的脚本有权读取系统上可供全世界读取的文件。”

是的,确实如此。

相关内容