Назад | Перейти на главную страницу

Несколько виртуальных хостов с FastCGI и Suexec

У меня есть сервер виртуальной машины Debian, над которым я полностью контролирую, но у меня есть кто-то, кто хочет разместить на нем один домен. Это, очевидно, проблема безопасности, так как даже если его конкретный пользователь не может читать все файлы другого домена, любой сценарий, который он запускает (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, чтобы убедиться, что файлы 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.uk в sites-available:

<VirtualHost my.ip.address:80>

             ServerAdmin admin@mycoolsite.co.uk
             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. Может ли кто-нибудь увидеть, где я ошибаюсь?

Скорее всего, это так, потому что по умолчанию корень suexec из debian скомпилирован с / var / www, а вы пытаетесь использовать at / srv. Смотрите также: Как изменить корневой каталог suexec с «/ var / www» на «/ home»?