У меня есть сервер виртуальной машины 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»?