Как настроить suPHP на сервере ISPConfig на Debian Sarge
Version 1.3
Author:
Введение
В этом руководстве показано, как настроить suPHP на сервере ISPConfig, основанном на Debian Sarge, с PHP4. Основная база — руководства Falko и материалы форумов Howtoforge. Здесь собраны пошаговые команды и пояснения, чтобы сократить разброс информации по форумам.
Важно: я тестировал эту инструкцию на Debian Sarge с ISPConfig 2.2.11 и Apache 4.3.10-19; гарантий работоспособности в других сборках нет.
Требования
- root-доступ к серверу
- ISPConfig установлен и доступен
- Резервная копия конфигураций Apache
Важно: перед началом сделайте копию вашего файла /etc/apache2/vhosts/Vhosts_ispconfig.conf, например:
cp /etc/apache2/vhosts/Vhosts_ispconfig.conf /etc/apache2/vhosts/Vhosts_ispconfig-backup.confОбзор подхода
Мы отключаем модуль php4, устанавливаем php4-cgi и собираем suPHP как модуль Apache (DSO) через apxs2. Затем настраиваем /etc/suphp.conf и даём ISPConfig управлять vhost-файлами так, чтобы для каждого сайта добавлялись директивы suPHP_Engine и suPHP_UserGroup.
Пошаговая установка
- Отключите PHP4 как модуль Apache:
a2dismod php4- Удалите все упоминания phpadmin в оригинальном Vhosts_ispconfig.conf (если есть), затем перезапустите Apache:
/etc/init.d/apache2 restartПосле этого ошибок при рестарте Apache быть не должно.
- Установите apxs (в Sarge это apxs2), чтобы собирать модуль:
apt-get install apache2-prefork-dev- Установите php4-cgi и перейдите во временную папку:
apt-get install php4-cgi
cd /tmp- Скачайте и распакуйте suPHP (в инструкции использована версия 0.6.2):
wget http://www.suphp.org/download/suphp-0.6.2.tar.gz
tar xvfz suphp-0.6.2.tar.gz
cd suphp-0.6.2
vi src/apache2/mod_suphp.cВ файле src/apache2/mod_suphp.c замените строки 324/325 на эти (в других версиях номера строк могут отличаться):
AP_INIT_ITERATE("suPHP_AddHandler", suphp_handle_cmd_add_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp to handle these MIME-types"),
AP_INIT_ITERATE("suPHP_RemoveHandler", suphp_handle_cmd_remove_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp not to handle these MIME-types"),- Соберите и установите suPHP:
./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2
make
make install- Скопируйте пример конфигурации suPHP и отредактируйте его:
cp /tmp/suphp-0.6.2/doc/suphp.conf-example /etc/suphp.conf
vi /etc/suphp.confПример содержимого /etc/suphp.conf (сохраните значения, приведённые ниже, или адаптируйте при необходимости):
[global]
;Path to logfile
logfile=/var/log/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=www-data
;Path all scripts have to be in
docroot=/
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100
[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php4-cgi
;Handler for CGI-scripts
x-suphp-cgi=execute:!self- Подключите модуль suPHP в Apache, добавив в /etc/apache2/httpd.conf строку:
LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.soЗатем перезапустите Apache:
/etc/init.d/apache2 restart- Сообщите ISPConfig, что Apache должен использовать suPHP. Отредактируйте файл конфигурации ISPConfig:
vi /home/admispconfig/ispconfig/lib/config.inc.phpНайдите строку:
$go_info["server"]["apache2_php"] = 'both';и замените на:
$go_info["server"]["apache2_php"] = 'suphp';- Внесите любое небольшое изменение в сайт через ISPConfig (например, включите CGI-скрипты) — это заставит ISPConfig перезаписать vhost-файл. В /etc/apache2/vhosts/Vhosts_ispconfig.conf вы увидите для каждого сайта добавленные строки вида:
suPHP_Engine on
suPHP_UserGroup username groupname
AddHandler x-httpd-php .php .php3 .php4 .php5
suPHP_AddHandler x-httpd-php
Важно: не вносите ручные изменения в /etc/apache2/vhosts/Vhosts_ispconfig.conf — ISPConfig управляет этим файлом и перезапишет ваши правки.
- Проверка прав и запуск скриптов
После настройки вы сможете назначать права через FTP и запускать PHP-скрипты от имени пользователя сайта вместо системного www-data:

Это удобно для CMS вроде Joomla — сайт получает нужные права без опасных chmod 777.
Откат для отдельных сайтов: модульный PHP4
Если для конкретного сайта вы хотите оставить php4 как модуль, включите модуль php4 и перезагрузите Apache:
a2enmod php4
/etc/init.d/apache2 force-reloadВ интерфейсе ISPConfig для этого сайта отключите php и в поле Apache directives добавьте:
AddType application/x-httpd-php .php .php3 .php4
php_admin_flag safe_mode Off
Таким образом, вы можете сочетать PHP4-mod и PHP4-CGI+suPHP в одном сервере.
Когда этот подход может не подходить
- Если у вас специфические модули, зависящие от mod_php (модульного PHP), которые не совместимы с CGI
- Если у вас очень высоконагруженные сайты: модульный PHP иногда эффективнее по потреблению при большом количестве запросов (вместо запуска CGI-процесса)
- Для современных проектов лучше использовать PHP-FPM с пулом процессов вместо устаревшего php4
Альтернативные подходы
- PHP-FPM + Apache (mod_proxy_fcgi) — современный и производительный вариант для PHP 5.3+ и выше
- Оставить mod_php (php4) для совместимости, но следить за безопасностью
- Переход на более новую версию дистрибутива и PHP — рекомендуется для долгосрочной поддержки и безопасности
Критерии приёмки
- Apache стартует без ошибок после внесённых изменений
- Для сайта в Vhosts_ispconfig.conf присутствуют suPHP_Engine on и suPHP_UserGroup
- PHP-скрипты выполняются от имени владельца сайта (проверяется через phpinfo() или исполняемый скрипт, выводящий getmyuid())
- Логи suPHP (/var/log/suphp.log) не содержат критических ошибок при запуске страниц
Чек-лист для администратора
- Сделан бэкап /etc/apache2/vhosts/Vhosts_ispconfig.conf
- Отключён модуль php4 (a2dismod php4)
- Установлен php4-cgi
- Собран и установлен mod_suphp через apxs2
- Отредактирован /etc/suphp.conf и /etc/apache2/httpd.conf
- Изменён параметр apache2_php в конфиге ISPConfig
- Проверены права и запуск скриптов под владельцем сайта
Простая методология проверки (микро-SOP)
- Сделать бэкап конфигурации Apache. 2. Отключить модуль php4 и установить php4-cgi. 3. Собрать и установить suPHP, отредактировать /etc/suphp.conf. 4. Подключить модуль в httpd.conf, перезапустить Apache. 5. Изменить конфиг ISPConfig и обновить vhost через GUI. 6. Проверить запуск страниц и логи.
Набор тестов/критерии приёмки
- Тест 1: Открыть phpinfo() — должен быть виден CGI-интерпретатор, UID владельца совпадает с пользователем сайта.
- Тест 2: Попытка записи файла скриптом — успешна только при корректных правах владельца и настройках allow_*.
- Тест 3: Проверка логов — отсутствие ошибок suPHP при запросах сайта.
Факты и важные параметры
- По умолчанию min_uid и min_gid в примере заданы как 100 — это предотвращает запуск от системных пользователей.
- umask=0077 повышает безопасность файлов, создаваемых процессом.
- Логи suPHP находятся в /var/log/suphp.log — первичный источник при отладке.
Риски и смягчения
- Риск: неправильные права файлов приведут к ошибкам выполнения. Смягчение: строгие umask и тестирование на тестовом сайте.
- Риск: вмешательство в Vhosts_ispconfig.conf будет перезаписано ISPConfig. Смягчение: правьте только шаблоны через ISPConfig.
Короткое объявление (100–200 слов)
Если вы управляете сайтом на Debian Sarge с ISPConfig и хотите, чтобы PHP-скрипты выполнялись от имени пользователя сайта, а не от www-data, настройка php4-cgi + suPHP — практичное решение. Эта инструкция проведёт вас через отключение модульного PHP4, установку php4-cgi, сборку и установку suPHP через apxs2, настройку /etc/suphp.conf и интеграцию с ISPConfig. suPHP особенно полезен для CMS вроде Joomla: вы получаете безопасные права файлов без необходимости ставить chmod 777. При необходимости можно оставить php4 как модуль для отдельных сайтов. Всегда делайте бэкапы конфигураций и проверяйте логи после изменений.
Краткое резюме
- suPHP позволяет запускать PHP-скрипты от имени владельца сайта.
- Процесс: отключаем модуль php4, устанавливаем php4-cgi, собираем suPHP, правим конфиги и даём ISPConfig управлять vhosts.
- Тестируйте и держите резервные копии конфигураций.
Важно: эта инструкция ориентирована на старые сборки (Debian Sarge, PHP4). Для современных систем рекомендуется использовать PHP-FPM и обновлённые дистрибутивы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента