Настройка suPHP на сервере ISPConfig на Debian Etch
Введение
Этот документ — перевод и адаптация оригинального howto для Debian Etch. Он объясняет, как запустить PHP‑скрипты под учётной записью владельца сайта (не под www‑data) с помощью suPHP. Преимущества: повышенная безопасность, удобство для владельцев сайтов и корректная работа CMS (например, Joomla) без необходимости широко открывать права (chmod 777).
Важно: инструкция тестировалась на Debian Etch с ISPConfig 2.2.11, PHP 5.2.0-8 и Apache 2.2.3. Это не универсальная гарантия — проверяйте на тестовой машине перед продакшеном.
Требования и совместимость
- Сервер: Debian Etch
- ISPConfig: проверено на 2.2.11
- Apache: 2.2.x (инструкции используют apxs2)
- PHP: php5 и php5‑cgi (пример использует PHP 5.2.x)
- suPHP: в инструкции использована версия 0.6.2
Факт‑бокс:
- suPHP запускает PHP‑скрипты с правами владельца файла.
- Рекомендуемая umask в примере: 0077.
Важные замечания
Важно: перед началом сделайте резервную копию /etc/apache2/vhosts/Vhosts_ispconfig.conf (например, в /etc/apache2/vhosts/Vhosts_ispconfig-backup.conf).
Примечание: никогда не вносите ручные изменения в /etc/apache2/vhosts/Vhosts_ispconfig.conf после того, как ISPConfig генерирует vhost’ы. Изменяйте настройки через интерфейс ISPConfig, чтобы изменения не перезаписывались.
Пошаговая инструкция
- Сделайте резервную копию vhosts:
cp /etc/apache2/vhosts/Vhosts_ispconfig.conf /etc/apache2/vhosts/Vhosts_ispconfig-backup.conf- Отключите модуль php5 (по умолчанию PHP может работать как модуль):
a2dismod php5- Удалите все phpadmin‑записи в исходном Vhosts_ispconfig.conf (если они есть), затем перезапустите Apache:
/etc/init.d/apache2 restartПосле этого при перезапуске ошибок быть не должно.
- Установите apxs (в Etch это apxs2) для сборки suPHP как DSO:
apt-get install apache2-prefork-dev- Установите PHP‑CGI:
apt-get install php5-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Если у вас другая версия suPHP, номера строк в файле могут отличаться.
- Замените указанные строки (в примере строки 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 как модуль Apache:
./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/php5-cgi
;Handler for CGI-scripts
x-suphp-cgi=execute:!self- Подключите модуль suPHP в Apache, добавив в /etc/apache2/httpd.conf:
vi /etc/apache2/httpd.confДобавьте строку:
LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so- Перезапустите Apache:
/etc/init.d/apache2 restart- Обновите конфигурацию ISPConfig, чтобы он генерировал vhost’ы для 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
- Картинка: при соединении по FTP вы увидите, что можно выставлять права файлов в интерфейсе.

- Теперь PHP‑скрипты будут запускаться от имени пользователя сайта (username), а не от system user www‑data. Это упрощает работу владельца сайта и повышает безопасность.
Когда suPHP не подходит и альтернативы
- Если для конкретного сайта вам требуется быстрый модульный PHP (php5 как модуль) — вы можете оставить php5 как модуль только для этого сайта. Для этого:
a2enmod php5
/etc/init.d/apache2 force-reloadВ интерфейсе сайта ISPConfig отключите CGI и в поле директив Apache добавьте:
AddType application/x-httpd-php .php .php3 .php4 .php5
php_admin_flag safe_mode Off
- Альтернатива: PHP‑FPM + mod_proxy_fcgi или php-fpm + socket (позволяет запускать процессы под разными пулами и пользователями при правильной настройке), но это выходит за рамки данного howto.
Контрольный список администратора
- Сделана резервная копия /etc/apache2/vhosts/Vhosts_ispconfig.conf
- Отключён модуль php5 (a2dismod php5)
- Установлен php5-cgi
- Установлен и собран suPHP (модуль mod_suphp.so)
- Отредактирован /etc/suphp.conf (docroot, log, umask)
- LoadModule suphp_module добавлен в /etc/apache2/httpd.conf
- В конфиге ISPConfig apache2_php установлен в ‘suphp’
- Проверен vhost после пересоздания через ISPConfig
- Тесты: загрузка PHP‑страницы, проверка владельца процесса и прав файлов
Траблшутинг и распространённые ошибки
- Apache не стартует после добавления LoadModule: проверьте путь /usr/lib/apache2/modules/mod_suphp.so и права на файл.
- Ошибки при сборке suPHP: убедитесь, что установлен apache2-prefork-dev (apxs2) и что вы используете правильный путь к apxs (/usr/bin/apxs2).
- Скрипты всё ещё выполняются под www‑data: проверьте, что в vhost’е есть строки suPHP_Engine on и suPHP_UserGroup username groupname, и что ISPConfig действительно пересоздал vhost.
- Права на файлы: если suPHP блокирует исполнение, проверьте allow_file_others_writeable и allow_file_group_writeable в /etc/suphp.conf.
Модель принятия решения (когда использовать suPHP)
Используйте suPHP, если:
- Нужна простая схема запуска PHP под владельцем сайта.
- Требуется минимизировать использование chmod 777.
- У вас небольшое количество сайтов и вы готовы принять небольшие накладные расходы на производительность.
Предпочтение PHP‑FPM, если:
- Нужна лучшая производительность и масштабирование.
- Требуется гибкая конфигурация пулов процессов и настройки по сайту.
Простая decision‑flow (Mermaid):
flowchart TD
A[Нужен запуск PHP под владельцем сайта?] -->|Да| B[Использовать suPHP]
A -->|Нет| C[Использовать модульный PHP или PHP-FPM]
B --> D[Понимание: возможна потеря производительности]
C --> E[Плюс: лучшая производительность]Критерии приёмки
- Apache успешно перезапускается без ошибок.
- Виртуальный хост содержит строки suPHP_Engine и suPHP_UserGroup после пересоздания ISPConfig.
- PHP‑страницы исполняются под учётной записью владельца сайта (проверить через скрипт или через ls -l файлов).
- Нет необходимости выставлять chmod 777 для работы CMS.
Контрольные тесты
- Загрузить простую php-страницу с getmyuid() и сравнить с владельцем файлов.
- Попробовать создать/записать файл через CMS (например, загрузить изображение в Joomla) — операция должна пройти без chmod 777.
- Проверить логи /var/log/suphp.log и Apache error_log на предмет предупреждений.
Роль‑ориентированные чек‑листы
Администратор сервера:
- Резервное копирование конфигураций
- Установка пакетов и сборка suPHP
- Перезапуск и проверка сервисов
Владелец сайта / Dev:
- Проверка записи файлов через CMS
- Проверка прав на файлы и директорий
Краткое резюме
suPHP позволяет запускать PHP‑скрипты от имени владельца сайта и улучшает безопасность по сравнению с практикой chmod 777. На Debian Etch и ISPConfig нужно отключить модуль php5, установить php5‑cgi и собрать suPHP как модуль Apache, обновить /etc/suphp.conf и настроить ISPConfig для генерации правильных vhost’ов.
Если требуется, можно оставить php5 как модуль только для отдельных сайтов — инструкция это также описывает.
Ключевые файлы для проверки: /etc/suphp.conf, /etc/apache2/httpd.conf, /etc/apache2/vhosts/Vhosts_ispconfig.conf, /home/admispconfig/ispconfig/lib/config.inc.php
1‑строчный глоссарий:
- suPHP — модуль/обёртка, запускающая PHP‑скрипты под пользователями владельцев файлов.
- php5‑cgi — CGI‑версия PHP, используемая вместе с suPHP.
- apxs2 — инструмент сборки модулей Apache (Debian Etch).
Похожие материалы
Как сделать правый клик на Chromebook
Не удалось инициализировать Direct3D — решения
Исправить Data Retrieval в Diablo 4 на Steam
Open Graph в WordPress — настройка мета‑тегов
getconf: адаптивные скрипты для разных Linux