Я пытаюсь настроить Debian 6.0.4 для массового виртуального хостинга с PHP5. Пакеты apache2-mpm-worker libapache2-mod-fcgid apache2-suexec
установлены.
Я успешно загрузил mod_vhost_alias
и suexec
чтобы управлять моими доменами по каталогам, я поместил эту конфигурацию в /etc/apache2/sites-enabled/001-vhostalias
:
NameVirtualHost *:80
ServerName web-test.mynet.lan
DocumentRoot /var/www/
SuexecUserGroup www-data www-data
UseCanonicalName Off
VirtualDocumentRoot /var/www/www.%2+/public_html/
VirtualScriptAlias /var/www.%2+/cgi-bin/
DirectoryIndex index.html index.htm index.shtml index.php
ScriptAlias /__php5-cgi/ "/usr/local/lib/custom-cgi/php5-cgi/"
Action php5-script /__php5-cgi/php5-cgi
AddHandler php5-script .php
При этом выше, стр. е., размещение домена с именем www.test-a.com
потребности:
adduser test-a.com
(принудительное использование плохого имени) mkdir -p /var/www/www.test-a.com/public_html
и размещение данныхchmod
и chown
и все работает нормально...Без suEXEC я сделал несколько простых тестов PHP, он отлично работает как uid / gid www-data
. Но теперь мне нужно включить suEXEC для изоляции доменов ...
Вопрос в том: как я могу сказать suEXEC чтобы автоматически получить правильный uid / gid?
Я использую конфигурацию suEXEC по умолчанию:
root@web-test:/var/www# /usr/lib/apache2/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
Но вылетает:
root@web-test:/var/www# tail /var/log/apache2/suexec.log
[2012-05-05 18:31:48]: cannot run as forbidden uid (33/php5-cgi)
[2012-05-05 18:34:24]: uid: (33/www-data) gid: (33/www-data) cmd: php5-cgi
Примечание: Я раньше использовал apache2-mpm-itk
но он довольно нестабилен после 400-500 определений VirtualHost, особенно он падает на apache2ctl restart|graceful"
.
Спасибо
Предлагаю использовать mpm-itk
Package: apache2-mpm-itk
Description: multiuser MPM for Apache 2.2
The ITK Multi-Processing Module (MPM) works in about the same way as the classical "prefork" module (that is, without threads),
except that it allows you to constrain each individual vhost to a particular system user. This allows you to run several different
web sites on a single server without worrying that they will be able to read each others' files. This is a third-party MPM that is
not included in the normal Apache httpd.
Please note that this MPM is somewhat less tested than the MPMs that come with Apache itself.
С дополнительным патч вы можете назначать uid / gid динамически. Я без проблем использую такое решение около 2 лет.
<VirtualHost *:80>
ServerName www.example.net
ServerAlias *.example.net
UseCanonicalName Off
VirtualDocumentRoot /vhosts/example.net/%1
DirectoryIndex index.php index.html
AssignUserFromPath "^/vhosts/example.net/([^/]+)" mvh_$1 mvh_$1
<Directory /vhosts/example.net>
Options -Indexes +Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
В SuexecUserGroup Директива, похоже, не поддерживает переменные, поэтому нет простого способа делать то, что вы хотите. Это сообщение в списке рассылки также говорит, что это невозможно, и что CGIwrap следует использовать вместо этого. Единственный другой подход, который я могу придумать, - это злоупотребление suEXEC mod_userdir интеграция и как-то переписывать запросы в каталог пользователя, но вряд ли это сработает.