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

Установка SuPHP на CentOS 7.2 из исходников

7 min read Linux Обновлено 07 Nov 2025
Установка SuPHP на CentOS 7.2 — из исходников
Установка SuPHP на CentOS 7.2 — из исходников

SuPHP позволяет запускать PHP-скрипты под учетной записью владельца файлов, повышая безопасность хостинга. На CentOS 7.2 официальных пакетов SuPHP нет, поэтому этот пошаговый материал показывает установку из исходников: подготовка сервера, компиляция с патчем для Apache 2.4, конфигурация модулей, пример виртуального хоста, тесты и рекомендации по безопасности. Внизу — контрольный чеклист, сценарии тестирования и альтернативные подходы.

Введение

SuPHP — это модуль Apache, который запускает PHP как отдельного Linux-пользователя, отличного от пользователя Apache. Это уменьшает риск доступа между сайтами на одном сервере, поскольку каждый сайт может работать под собственным системным пользователем. В этой инструкции описана установка SuPHP на CentOS 7.2 из исходников, включая патч для совместимости с Apache 2.4.

Короткое определение: SuPHP — модуль, переключающий PHP-процесс на владельца скрипта перед выполнением.

Основные варианты использования

  • Виртуальный хост на общем сервере, где требуется изоляция сайтов.
  • Хостинг, где нельзя применять PHP-FPM по политике или ограничениям приложений.
  • Легковесная альтернатива контейнерам для старых систем.

Предпосылки

Эта инструкция предполагает сервер с CentOS 7.2 или более новой версией. В примерах используется хостнейм server1.example.com и IP 192.168.1.100 — замените их на значения вашего сервера.

Рекомендуется настроить брандмауэр. Если firewalld не установлен, выполните:

yum -y install firewalld

Запустите и включите автозапуск:

systemctl start firewalld.service
systemctl enable firewalld.service

Откройте SSH для удалённого доступа:

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

1 Установка Apache 2.4 и PHP 5

Apache и PHP доступны в стандартных репозиториях CentOS. Установите Apache и пакет разработки для компиляции модулей:

yum -y install httpd httpd-devel

Установите PHP и часто используемые расширения:

yum -y install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl

Включите автозапуск Apache и запустите службу:

systemctl start httpd.service
systemctl enable httpd.service

Откройте HTTP и HTTPS в брандмауэре:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Важно: если у вас уже установлен Apache или используется нестандартный путь, скорректируйте команды и конфигурации в дальнейшем.

2 Компиляция и установка SuPHP из исходников

Мы будем собирать SuPHP из исходников. Установите инструменты для сборки и полезные утилиты:

yum -y groupinstall 'Development Tools'
yum -y install wget nano

Скачайте и распакуйте исходники:

cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gz

Поскольку CentOS 7 использует Apache 2.4, требуется патч для совместимости. Примените патч и подготовьте сборку:

wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if

После autoreconf вы увидите сообщения автотулов — это нормально.

Запустите configure с нужными опциями. Команда должна быть в одной строке:

./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log

Скомпилируйте и установите:

make
make install

Добавьте модуль SuPHP в конфигурацию Apache, создав файл:

nano /etc/httpd/conf.d/suphp.conf

Впишите:

LoadModule suphp_module modules/mod_suphp.so

Создайте основной конфигурационный файл SuPHP:

nano /etc/suphp.conf

Содержимое файла:

[global]
;Path to logfile
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=apache
;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-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"

Перезапустите Apache, чтобы применить изменения:

systemctl restart httpd.service

Важно: пути к бинарникам PHP и Apache должны соответствовать вашей установке. Если используете другой путь к php-cgi, укажите его в секции handlers.

3 Конфигурация виртуального хоста для запуска PHP под отдельным пользователем

Пример: домен www.example.com, пользователь и группа web1, корень сайта /var/www/example.com.

Создайте пользователя и директорию сайта:

useradd web1
mkdir /var/www/example.com
chown web1:web1 /var/www/example.com

Добавьте файл виртуального хоста:

nano /etc/httpd/conf.d/example.com.conf

Вставьте конфигурацию:


 DocumentRoot /var/www/example.com
 ServerName example.com
 ServerAdmin [email protected]
 
 
 SetHandler None
 
 
 
 suPHP_Engine on
 
 SetHandler x-httpd-suphp
 
 suPHP_AddHandler x-httpd-suphp
 

Замените ServerName и ServerAdmin на свои значения. Затем примените конфигурацию:

systemctl restart httpd.service

Примечание: директивы FilesMatch и SetHandler предотвращают двойную обработку модулем mod_php, если он установлен.

4 Тестирование установки SuPHP

Создайте phpinfo-файл для проверки режима выполнения PHP:

nano /var/www/example.com/info.php

Вставьте:

Сделайте владельцем web1:

chown web1:web1 /var/www/example.com/info.php

Откройте http://example.com/info.php. Важен параметр ServerAPI: он должен быть CGI/FastCGI, что указывает на запуск через SuPHP.

PHP Info

Проверка пользователя, от которого выполняется PHP. Создайте testuser.php:

nano /var/www/example.com/testuser.php

Вставьте:

Измените владельца:

chown web1:web1 /var/www/example.com/testuser.php

Откройте http://example.com/testuser.php — результат должен быть: web1

SuPHP runs as user web1 now.

Удалите тестовые файлы после валидации и разверните ваш сайт.

5 Советы по отладке и типичные ошибки

  • Проблема: пустой ответ или 500 при обращении к PHP. Причины: неверные права на файлы/директории, слишком строгий umask или min_uid/min_gid в /etc/suphp.conf. Проверьте /var/log/httpd/suphp.log и /var/log/httpd/error_log.
  • Проблема: ошибочный ServerAPI в phpinfo. Убедитесь, что в конфигурации виртуального хоста стоит SetHandler x-httpd-suphp и что модуль загружен.
  • Проблема: модуль mod_php конфликтует с SuPHP. Отключите мод_php или убедитесь, что файлы .php не обрабатываются им.
  • Проверка прав: файлы должны принадлежать нужному пользователю и быть невписываемыми для остальных (рекомендация: 0644 для файлов, 0755 для директорий, при необходимости скорректируйте под безопасность).

Безопасность и жесткие рекомендации

  • Минимизируйте права: umask 0077 в suphp.conf — хорошая отправная точка.
  • Запретите запись «others»: allow_file_others_writeable=false, allow_directory_others_writeable=false.
  • Логи: храните suphp.log отдельно и регулярно анализируйте на подозрительные запуски.
  • Обновления: SuPHP устарел и не поддерживается активно — рассмотрите альтернативы, если можно.
  • Бэкапы: перед сборкой/патчами делайте резервную копию конфигураций и важных директорий.

Важно: SuPHP запускает PHP через бинарник php-cgi. Это может иметь производительность хуже, чем PHP-FPM, и не поддерживает пул рабочих процессов.

Альтернативные подходы

  • PHP-FPM с конфигурацией пула процессов для каждого сайта. Лучше по производительности и гибкости, широко поддерживается.
  • Контейнеризация (Docker) для изоляции сайтов на уровне процессов и файловой системы.
  • Использование системы виртуализации или chroot-сред для изоляции.

Когда SuPHP может оказаться предпочтительнее:

  • Устаревшие окружения, где нельзя быстро мигрировать приложения.
  • Простая схема прав доступа, где каждое приложение зависит от владельца файлов.

Когда SuPHP не подходит:

  • Высоконагруженные сайты с большим количеством PHP-запросов.
  • Современные окружения, где требуется пул PHP-FPM с тонкой настройкой производительности.

Критерии приёмки

Чтобы считать установку завершённой и корректной, проверьте:

  • Apache загружается без ошибок и модуль mod_suphp загружен.
  • http://example.com/info.php показывает ServerAPI = CGI/FastCGI.
  • http://example.com/testuser.php возвращает имя ожидаемого пользователя (например, web1).
  • Логи /var/log/httpd/suphp.log существуют и не содержат фатальных ошибок.
  • Права на файлы и директории сайта соответствуют политике безопасности (файлы 0644, каталоги 0755 или строже).

Роль‑ориентированные чеклисты

Администратор сервера:

  • Установить и обновить системные пакеты.
  • Установить firewalld и открыть порты.
  • Собрать SuPHP и создать конфигурацию.
  • Проверить логи и запустить тесты.

Разработчик сайта:

  • Убедиться, что файлы принадлежат нужному пользователю.
  • Проверить работу приложений под новым окружением.
  • Исправить пути и права в развертываемых скриптах.

Оператор поддержки:

  • Мониторить логи suphp.log и error_log.
  • Реагировать на ошибки прав и проблемные запросы.

Сценарии тестирования и acceptance

Тесты:

  • Тест 1: info.php показывает CGI/FastCGI — ожидается успех.
  • Тест 2: testuser.php выводит имя владельца — ожидается web1.
  • Тест 3: попытка запуска PHP-скрипта от другого пользователя — должен выполняться от владельца файла.
  • Тест 4: создать файл с правами 0666 — SuPHP должен логировать предупреждение или отказ в зависимости от allow_file_others_writeable.

Критерий приёмки: все тесты 1–3 пройдены, лог ошибок пуст или содержит только ожидаемые предупреждения.

Модели мышления и heuristics

  • Принцип наименьших привилегий: каждый сайт должен иметь ровно те права, которые нужны для работы.
  • Правило единственной ответственности: каждый процесс должен выполнять только одну задачу — Apache обрабатывает HTTP, SuPHP переключает пользователя и запускает PHP.
  • Разграничение конфигураций: храните конфигурацию SuPHP отдельно от общих конфигов Apache.

Совместимость и миграция

  • SuPHP не активно развивается. Для долгосрочного решения планируйте миграцию на PHP-FPM.
  • При миграции учитывайте: владельцы файлов, механизмы логирования, управление пулами процессов.

Краткий глоссарий

  • Apache — HTTP-сервер.
  • SuPHP — модуль Apache для запуска PHP под владельцем файла.
  • php-cgi — бинарник, запускающий PHP в режиме CGI.

Контрольный чеклист перед продакшеном

  • Выполнена установка и сборка SuPHP.
  • Создан suphp.conf и модуль загружен в Apache.
  • Виртуальные хосты настроены с SetHandler x-httpd-suphp.
  • Права на файлы сайтов настроены согласно политике.
  • Выполнены тесты info.php и testuser.php.
  • Логи на мониторинге и ротация логов настроены.

Примерная тактика отката

Если SuPHP вызывает проблемы в продакшене:

  1. Откатите конфигурацию виртуального хоста на предыдущую рабочую копию.
  2. Отключите загрузку модуля mod_suphp, перезапустите Apache.
  3. Восстановите доступность сайтов и исследуйте логи на тестовом стенде.

Частые ошибки и способы их устранения

  • Неверный путь к php-cgi в /etc/suphp.conf — исправьте и перезапустите Apache.
  • Файлы принадлежат root — смените владельца на соответствующего пользователя сайта.
  • Конфликт с mod_php — удалите или отключите mod_php через пакетный менеджер или конфигурацию.

Заключение

SuPHP даёт простую модель изоляции PHP-приложений по владельцам файлов. На CentOS 7.2 потребуется собрать SuPHP из исходников и применить патч для Apache 2.4. Для новых проектов рассматривайте PHP-FPM как более производительную и поддерживаемую альтернативу.

Краткие шаги: подготовить систему, собрать SuPHP, подключить модуль в Apache, настроить виртуальные хосты, протестировать и настроить безопасность.

Дополнительные материалы и ссылки

  • CentOS
  • Apache Web Server
  • SuPHP

Итоги

  • SuPHP обеспечивает пользовательскую изоляцию PHP.
  • На CentOS 7.2 требуется сборка из исходников с патчем.
  • После установки протестируйте info.php и testuser.php и настроьте права.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти