Установка 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 --reload1 Установка 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. Создайте testuser.php:
nano /var/www/example.com/testuser.phpВставьте:
Измените владельца:
chown web1:web1 /var/www/example.com/testuser.phpОткройте http://example.com/testuser.php — результат должен быть: web1

Удалите тестовые файлы после валидации и разверните ваш сайт.
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 вызывает проблемы в продакшене:
- Откатите конфигурацию виртуального хоста на предыдущую рабочую копию.
- Отключите загрузку модуля mod_suphp, перезапустите Apache.
- Восстановите доступность сайтов и исследуйте логи на тестовом стенде.
Частые ошибки и способы их устранения
- Неверный путь к 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 и настроьте права.
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить