如何禁用对DocumentRoot父目录的访问?

时间:2015-04-28 09:11:14

标签: php apache apache2 httpd.conf

我有一个托管多个网站的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 的档案。如何防止这种情况发生?

2 个答案:

答案 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应按虚拟主机运行的用户。