Как поиграть в песочнице подпапку веб-сайта?

Скажем, у меня есть веб-сайт под www.example.com и хотел бы также иметь блог под подпапкой, например. www.example.com/blog/. Как я могу поиграть в песочнице эту папку, так, чтобы какой-либо сценарий, работающий в ней, не мог коснуться каких-либо файлов за пределами нее?

Править: Добавленная информация ниже.

Текущая конфигурация использует Apache с Suexec и php-fastcgi:

<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 может использоваться только в конфигурации сервера или virtualhost контексте, таким образом, это не может быть указано в контексте каталога. Какие опции я имею?

-1
задан 13 March 2015 в 16:39
2 ответа

То, что вы хотите, не совсем возможно, но некоторые вещи нужно учитывать:

  • используйте директиву Apache Alias : которая позволяет URL /blog/ находиться в другом месте файловой системы, а не в том же каталоге, что и другое веб-содержимое.

  • Вместо mod_php, который запускает PHP-скрипты как UID веб-сервера, который одинаков для всего содержимого сайта, используйте PHP в CGI режиме (например, php-fpm) с другим UID-контекстом для блога. suexec похож для CGI-скриптов.

  • Использование обратного прокси для /blog/ URL на совершенно другой веб-сервер (экземпляр) для вашего блога:

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

0
ответ дан 5 December 2019 в 20:37

Вы можете переадресовать example.com/blog на vhost blog.example.com. Затем вы можете использовать, например, suphp для запуска скриптов в этом vhost как совершенно другой пользователь. Это должно дать вам нужную изоляцию.

.
0
ответ дан 5 December 2019 в 20:37

Теги

Похожие вопросы