使用 FastCGI 和 Suexec 的多个 VHost

使用 FastCGI 和 Suexec 的多个 VHost

我有一台 Debian 虚拟机服务器,我可以完全控制它,但有人想在上面托管一个域。这显然是一个安全问题,因为即使他的特定用户无法读取其他域的所有其他文件,但他在 Web 服务器上运行的任何脚本 (PHP) 都可以。举例来说:

% ls -l /srv
drwxr-x--x 5 admin    admin    4096 Mar  4 13:29 secretsite.com
drwxr-x--x 4 bob      bob      4096 Apr  4 12:41 mycoolsite.co.uk
$ su - bob
$ ls /srv/
ls: cannot open directory /srv/: Permission denied
$ ls -R /srv/mycoolsite.co.uk/
/srv/mycoolsite.co.uk:
public

/srv/mycoolsite.co.uk/public:
htdocs

/srv/mycoolsite.co.uk/public/htdocs:
index.php

然而:

$ cat /srv/mycoolsite.co.uk/public/htdocs

<?php
echo shell_exec('whoami');

echo shell_exec('ls /srv');
?>

在浏览器中输出:www-data secretsite.com mycoolsite.co.uk...不太理想。

因此我决定使用 FastCGI 和 Suexec 来确保 bob 的 PHP 文件以他的身份执行。我主要遵循给出的说明这里,但我已经设置好了大规模托管的 Apache 配置。

sites-enabled有一个名为的配置文件zz-mass-hosting

NameVirtualHost my.ip.address:80

<VirtualHost my.ip.address:80>
    <Directory "/srv">
        AllowOverride all
    </Directory>

    AddHandler cgi-script .cgi
    UseCanonicalName        Off

    VirtualDocumentRoot     /srv/%0/public/htdocs/
    VirtualScriptAlias      /srv/%0/public/cgi-bin/

    SetVirtualDocumentRoot on


</VirtualHost>

效果非常好。

因此,为了设置这个域,mycoolsite.co.uk具体来说我是通过 apt 安装的:libapache2-mod-fcgid apache2-suexec-custom php5-cgi

我修改/etc/apache2/suexec/www-data为:/srv。没有第二行。并创建/etc/apache2/conf.d/php5-fastcgid.conf

AddType application/x-httpd-php .php

AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php5-fcgi

Alias /fcgi-bin/ /home/www-data/

<Location /fcgi-bin/>
        SetHandler fcgid-script
        Options +ExecCGI
</Location>

/home/www-data/php5-fcgi 是:

#!/bin/sh
exec /usr/bin/php5-cgi

拥有所有权www-data:www-data。我拥有/home/www-data/bob所有权bob:bob并复制到php5-fcgi那里。

然后我创建zzz-mycoolsite.co.uksites-available

<VirtualHost my.ip.address:80>

             ServerAdmin [email protected]
             ServerName mycoolsite.co.uk

             Alias /fcgi-bin/ /home/www-data/bob/
             SuexecUserGroup bob bob

             DocumentRoot /srv/mycoolsite.co.uk/public/htdocs/

             <Directory /srv/mycoolsite.co.uk/public/htdocs/>
                        Options Indexes FollowSymLinks
                        AllowOverride None
                        Order allow,deny
                        allow from all
             </Directory>

</VirtualHost>

但当我激活此网站并访问时,mycoolsite.co.uk/index.php它仍然显示正在运行www-data。有人能看出我哪里出错了吗?

答案1

最有可能的原因是,默认情况下,debian 的 suexec root 是使用 /var/www 进行编译的,而您尝试在 /srv 上使用。另请参阅:如何将 suexec 根目录从“/var/www”更改为“/home”?

相关内容