Гид по технологиям

Настройка suPHP на сервере ISPConfig на Debian Etch

5 min read Серверная администрация Обновлено 27 Nov 2025
suPHP на ISPConfig (Debian Etch) — настройка
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, чтобы изменения не перезаписывались.

Пошаговая инструкция

  1. Сделайте резервную копию vhosts:
cp /etc/apache2/vhosts/Vhosts_ispconfig.conf /etc/apache2/vhosts/Vhosts_ispconfig-backup.conf
  1. Отключите модуль php5 (по умолчанию PHP может работать как модуль):
a2dismod php5
  1. Удалите все phpadmin‑записи в исходном Vhosts_ispconfig.conf (если они есть), затем перезапустите Apache:
/etc/init.d/apache2 restart

После этого при перезапуске ошибок быть не должно.

  1. Установите apxs (в Etch это apxs2) для сборки suPHP как DSO:
apt-get install apache2-prefork-dev
  1. Установите PHP‑CGI:
apt-get install php5-cgi
cd /tmp
  1. Скачайте и распакуйте 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, номера строк в файле могут отличаться.

  1. Замените указанные строки (в примере строки 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"),
  1. Соберите и установите suPHP как модуль Apache:
./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2
make
make install
  1. Скопируйте пример конфигурации 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
  1. Подключите модуль suPHP в Apache, добавив в /etc/apache2/httpd.conf:
vi /etc/apache2/httpd.conf

Добавьте строку:

LoadModule suphp_module       /usr/lib/apache2/modules/mod_suphp.so
  1. Перезапустите Apache:
/etc/init.d/apache2 restart
  1. Обновите конфигурацию ISPConfig, чтобы он генерировал vhost’ы для suPHP. Отредактируйте файл конфигурации ISPConfig:
vi /home/admispconfig/ispconfig/lib/config.inc.php

Найдите строку:

$go_info["server"]["apache2_php"] = 'both';

и замените на:

$go_info["server"]["apache2_php"] = 'suphp';
  1. В 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
  1. Картинка: при соединении по FTP вы увидите, что можно выставлять права файлов в интерфейсе.

Скриншот FTP: установка прав chmod в файловом менеджере

  1. Теперь 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).
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как сделать правый клик на Chromebook
Chromebook

Как сделать правый клик на Chromebook

Не удалось инициализировать Direct3D — решения
Техподдержка

Не удалось инициализировать Direct3D — решения

Исправить Data Retrieval в Diablo 4 на Steam
Игры

Исправить Data Retrieval в Diablo 4 на Steam

Open Graph в WordPress — настройка мета‑тегов
WordPress SEO

Open Graph в WordPress — настройка мета‑тегов

getconf: адаптивные скрипты для разных Linux
Linux

getconf: адаптивные скрипты для разных Linux

Проверка входов в Windows — успешные и неудачные попытки
Безопасность Windows

Проверка входов в Windows — успешные и неудачные попытки