如何对网站子文件夹进行沙盒处理?

如何对网站子文件夹进行沙盒处理?

假设我有一个网站,www.example.com并且还想在子文件夹下建立一个博客,例如www.example.com/blog/。我如何将此文件夹放入沙盒中,以便在其中运行的任何脚本都无法触及其外部的任何文件?

编辑:添加下面的信息。

当前配置使用带有 Suexec 和 php-fastcgi 的 Apache:

<VirtualHost X.X.X.X:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /home/example/public_html
    ScriptAlias /cgi-bin/ /home/example/cgi-bin/
    DirectoryIndex index.html index.htm index.php

    RemoveHandler .php
    php_admin_value engine Off
    IPCCommTimeout 301
    FcgidMaxRequestLen 1073741824
    SuexecUserGroup "#1000" "#1000"

    <Directory /home/example/public_html>
        Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
        allow from all
        AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
        Require all granted
        AddType application/x-httpd-php .php
        AddHandler fcgid-script .php
        FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php
    </Directory>

    <Directory /home/example/cgi-bin>
        allow from all
        AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
        Require all granted
    </Directory>

</VirtualHost>

/home/example/fcgi-bin/php5.fcgi 包含:

#!/bin/bash
PHPRC=$PWD/../etc/php5
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=99999
export PHP_FCGI_MAX_REQUESTS
SCRIPT_FILENAME=$PATH_TRANSLATED
export SCRIPT_FILENAME
exec /usr/bin/php5-cgi

据我所知,SuexecUserGroup只能在服务器配置或虚拟主机上下文中使用,因此无法在目录上下文中指定。我有什么选择?

答案1

您想要的并不完全可能,但需要考虑以下几点:

  • 使用 Apache 的Alias指令:允许/blog/URL 位于文件系统上的不同位置,而不是与其他 Web 内容位于同一目录中。

  • 不要使用 mod_php 作为所有网站内容相同的 Web 服务器 UID 来运行 PHP 脚本,而要使用 CGI 模式的 PHP(例如php-fpm),并为博客站点指定不同的 UID 上下文。suexec 对于 CGI 脚本而言类似。

  • 使用反向代理将/blog/URL 指向您博客的完全不同的 Web 服务器(实例):

    ProxyPass /blog/ http://blog.example.org:81/blog/
    ProxyPassReverse /blog/ http://blog.example.org:81/blog/

答案2

你可以example.com/blog重定向到 vhost blog.example.com。然后你可以使用例如苏php以完全不同的用户身份运行此虚拟主机中的脚本。这应该可以为您提供所需的隔离。

相关内容