我正在尝试为我的几个网站设置新的 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 来防止超出限制的访问。
您在这里真正想说的是:“我放到系统上并运行的脚本有权读取系统上可供全世界读取的文件。”
是的,确实如此。