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

Php 如何禁用对DocumentRoot的父目录的访问?,php,apache,apache2,httpd.conf,Php,Apache,Apache2,Httpd.conf,我有一个Ubuntu系统,上面有几个网站。每个网站的DocumentRoot文件夹是独立的,并且有不同的用户。路径如下所示: /<path_from_root>/websites/websiteA /<path_from_root>/websites/websiteB //网站/网站a //网站/网站b 让我们假设各自的用户是userA和userB。虽然userB没有对文件夹websiteA的读取权限,但是apache用户有访问权限。userB只需在其目录中编写如下p

我有一个Ubuntu系统,上面有几个网站。每个网站的
DocumentRoot
文件夹是独立的,并且有不同的用户。路径如下所示:

/<path_from_root>/websites/websiteA
/<path_from_root>/websites/websiteB
//网站/网站a
//网站/网站b
让我们假设各自的用户是userA和userB。虽然userB没有对文件夹websiteA的读取权限,但是apache用户有访问权限。userB只需在其目录中编写如下php文件:

<?php
$x=file_get_contents('../websiteA/config.php');
echo $x;
?>


此文件将向用户b公开config.php文件。关键问题是apache需要对这两个文件夹都具有读取权限才能运行web服务,但userB可以利用这一点访问userA的文件。如何防止这种情况发生?

您可能希望了解Apache和PHP在您的计算机上是如何连接的。如果您使用Apache模块mod_php,据我所知,所有php代码都是在用户Apache自身运行时执行的。如果您将PHP与CGI(fcgi、fastcgi或该范围内的其他内容)连接,则可以使用。使用suEXEC,您可以设置PHP应按照虚拟主机运行的用户。

您可以在apache或vhost配置文件中使用PHP指令open\u basedir进行配置


php\u admin\u值open\u basedir/docroot

因此,此路径中的脚本无法打开其外部的文件。

每个
都应该有一个配置选项,告诉它在哪个用户下运行,如果我回忆正确的话。没有提到任何这样的选项。不过,我把它与nginx混淆了。谢谢,这正是我需要的!拯救我的一天
<VirtualHost *:80>
    <Directory /docroot>
        php_admin_value open_basedir /docroot 
    </Directory>
<VirtualHost>