假设我有一个网站,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以完全不同的用户身份运行此虚拟主机中的脚本。这应该可以为您提供所需的隔离。