【问题标题】:How to disable access to parent directory of DocumentRoot?如何禁用对 DocumentRoot 父目录的访问?
【发布时间】:2015-07-07 01:10:18
【问题描述】:

我有一个托管多个网站的 Ubuntu 系统。每个网站的DocumentRoot 文件夹是独立的并且有不同的用户。路径是这样的:

/<path_from_root>/websites/websiteA
/<path_from_root>/websites/websiteB

假设各自的用户是 userAuserB。虽然 userB 没有对文件夹 websiteA 的读取权限,但 apache 用户确实有权限。 userB 可以简单的在他的目录下写一个这样的php文件:

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

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

【问题讨论】:

  • 如果我没记错的话,每个&lt;VirtualHost&gt; 都应该有一个配置选项,告诉它在哪个用户下运行它。
  • documentation of apache 没有提及任何此类选项。
  • 没关系,我把它和 nginx 搞混了。

标签: php apache apache2 httpd.conf


【解决方案1】:

您可以在您的 apache 或 vhost 配置文件中为 individual settings 使用 php 指令 open_basedir。

<VirtualHost *:80>
    <Directory /docroot>
        php_admin_value open_basedir /docroot 
    </Directory>
<VirtualHost>

所以此路径中的脚本无法打开它之外的文件。

【讨论】:

  • 谢谢,正是我需要的!
  • 节省了我的一天电视
【解决方案2】:

您可能想了解 Apache 和 PHP 在您的机器上是如何连接的。如果您使用 Apache 模块 mod_php,据我所知,所有 PHP 代码都是按照用户 Apache 本身运行的方式执行的。如果您将 PHP 与 CGI(fcgi、fastcgi 或该范围内的其他东西)连接起来,您可以使用suEXEC。使用 suEXEC,您可以设置 PHP 应该按照虚拟主机运行的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2017-06-22
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多