我有一个托管多个网站的Ubuntu系统。每个网站的DocumentRoot
文件夹是独立的,并且具有不同的用户。路径是这样的:
/<path_from_root>/websites/websiteA
/<path_from_root>/websites/websiteB
假设各个用户是 userA 和 userB 。但是, userB 对 websiteA 文件夹没有读取权限,但 apache 用户确实具有访问权限。 userB 可以在他的目录中简单地写一个这样的php文件:
<?php
$x=file_get_contents('../websiteA/config.php');
echo $x;
?>
此文件会将 config.php 文件公开给 userB 。关键问题是 apache 需要对两个文件夹具有读取权限才能运行Web服务,但 userB 可以利用它来访问 userA 的档案。如何防止这种情况发生?
答案 0 :(得分:1)
您可以在apache或vhost配置文件中使用php指令open_basedir individual settings。
<VirtualHost *:80>
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
<VirtualHost>
因此,此路径中的脚本无法打开其外的文件。
答案 1 :(得分:0)
您可能希望了解Apache和PHP在您的计算机上的连接方式。如果您使用Apache模块mod_php,据我所知,所有PHP代码都是以Apache本身运行的用户身份执行的。如果您使用CGI(fcgi,fastcgi或该范围内的某些内容)连接PHP,则可以使用suEXEC。使用suEXEC,您可以设置PHP应按虚拟主机运行的用户。