Скажем, у меня есть веб-сайт под 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 контексте, таким образом, это не может быть указано в контексте каталога. Какие опции я имею?
То, что вы хотите, не совсем возможно, но некоторые вещи нужно учитывать:
используйте директиву 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/