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

Установка SuPHP на CentOS 7.2 — сборка и настройка

• 6 min read • DevOps • Обновлено 16 Nov 2025
SuPHP на CentOS 7.2 — сборка и настройка
SuPHP на CentOS 7.2 — сборка и настройка

Кратко

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

Важно: руководство ориентировано на CentOS 7.2+ и SuPHP 0.7.2. Замените примеры с доменами, хостом и IP на ваши значения.


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

Короткие определения:

  • SuPHP: модуль, меняющий пользователя выполнения PHP на владельца файла.
  • CGI/FastCGI: способы запуска PHP как отдельного процесса, отличного от модулей в ядре Apache.

Что в этом руководстве

  • Установка Apache 2.4 и PHP 5 через yum
  • Сборка SuPHP 0.7.2 из исходников с патчем для Apache 2.4
  • Конфигурация /etc/suphp.conf и подключение модуля в Apache
  • Настройка виртуального хоста для сайта под пользователем web1
  • Примеры тестов, отладка и рекомендации по безопасности

Предпосылки

  • Сервер с CentOS 7.2 или новее.
  • Привилегии root или sudo.
  • Примерные значения из руководства: hostname server1.example.com, IP 192.168.1.100. Замените их локальными.

Прежде чем продолжить, рекомендую настроить брандмауэр firewalld и открыть SSH-порт:

yum -y install firewalld
systemctl start firewalld.service
systemctl enable firewalld.service
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

Если у вас уже установлен apache, переходите сразу к разделу «Установка SuPHP».

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

2 Установка SuPHP (сборка из исходников)

Мы соберём SuPHP 0.7.2 из исходников и применим патч для совместимости с Apache 2.4.

Установите инструменты сборки и полезные утилиты:

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

Примените патч для Apache 2.4 и выполните autoreconf:

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, создав файл /etc/httpd/conf.d/suphp.conf:

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

Вставьте:

LoadModule suphp_module modules/mod_suphp.so

Создайте конфигурацию SuPHP /etc/suphp.conf:

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

Важно: если вы видите ошибки из-за отсутствия mod_suphp.so, проверьте путь к модулям Apache и убедитесь, что модуль действительно установлен в каталог modules.

3 Настройка виртуального хоста Apache для SuPHP

Далее создадим виртуальный хост, где PHP будет запускаться под отдельным пользователем web1.

Добавим пользователя и группу web1:

useradd web1

Создаём корень сайта и меняем владельца:

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

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

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

Вставьте следующее содержимое (замените example.com и адреса на ваши):


 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
 

Перезапустите Apache для применения настроек:

systemctl restart httpd.service

Совет: используйте команду apachectl configtest для проверки синтаксиса конфигурации перед перезапуском.

apachectl configtest

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

Проверим работу PHP и то, под каким пользователем выполняются скрипты.

  1. Проверка phpinfo(): создайте файл info.php в корне сайта:
nano /var/www/example.com/info.php

Добавьте:

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

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

Откройте http://example.com/info.php в браузере. На странице phpinfo обратите внимание на строку Server API: она должна показывать CGI/FastCGI. Это подтверждает, что PHP работает не как модуль mod_php.

Страница phpinfo() — ServerAPI показывает CGI/FastCGI

  1. Проверка имени пользователя выполнения: создайте testuser.php:
nano /var/www/example.com/testuser.php

Вставьте:

Сделайте владельцем web1 и откройте http://example.com/testuser.php — в ответе должен быть web1.

Вывод whoami через браузер — suphp запускает PHP под пользователем web1

После проверки удалите тестовые файлы.

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

Ниже перечислены распространённые проблемы и методы их устранения.

  • Модуль не загружается. Проверьте наличие modules/mod_suphp.so, права доступа и путь в /etc/httpd/conf.d/suphp.conf.
  • Ошибки сборки. Убедитесь, что установлены httpd-devel, apr и инструменты разработки (Development Tools).
  • Неправильный ServerAPI в phpinfo. Если показывает Apache Handler или модуль, проверьте конфигурацию SetHandler и suPHP_Engine.
  • Права на файлы. SuPHP запускает скрипты под владельцем файла. Убедитесь, что все PHP-файлы принадлежат нужному пользователю и имеют корректные права.
  • SELinux. На CentOS SELinux может блокировать выполнение. Для отладки временно проверьте статус SELinux и просмотрите audit-логи:
getenforce
ausearch -m avc -ts recent
tail -n 200 /var/log/audit/audit.log

Для тестов можно временно включить режим Permissive (не рекомендуется в production надолго):

setenforce 0

Лучше настроить правильные контексты SELinux для каталога сайта и бинарников, используя restorecon или chcon вместо полного отключения SELinux.

  • Ошибки прав записи. SuPHP по умолчанию запрещает файлам и каталогам быть доступными для других. Проверьте параметры allow_file_others_writeable и allow_directory_others_writeable в /etc/suphp.conf.

Логи для диагностики:

  • Apache: /var/log/httpd/error_log или journalctl -u httpd
  • SuPHP: /var/log/httpd/suphp.log

6 Рекомендации по безопасности и жёсткая настройка

  • Права файлов: держите права PHP-файлов как 0644 и каталогов как 0755, владельцем — пользователь сайта.
  • Umask: в /etc/suphp.conf умask=0077 даёт жёсткие права по умолчанию.
  • SELinux: задайте корректные контексты вместо отключения. Используйте restorecon и chcon при необходимости.
  • Логи: настройте ротацию логов для /var/log/httpd/suphp.log (например, logrotate).
  • Ограничьте доступ к php-cgi: контролируйте путь до /usr/bin/php-cgi и права на него.
  • Обновления: поддерживайте актуальность PHP и системных библиотек. SuPHP 0.7.2 — устаревшая версия; рассмотрите более современные решения (php-fpm с пулом пользователей) для новых проектов.

7 Практическое SOP — краткий список шагов

  1. Подготовка сервера: обновление, установка firewalld.
  2. Установка Apache и PHP: yum install httpd httpd-devel php …
  3. Установка инструментов сборки: Development Tools, wget.
  4. Скачивание и распаковка suphp-0.7.2.tar.gz.
  5. Применение патча для Apache 2.4 и autoreconf -if.
  6. ./configure … ; make ; make install.
  7. Добавление /etc/httpd/conf.d/suphp.conf и /etc/suphp.conf.
  8. Создание пользователя сайта, настройка прав и виртуального хоста.
  9. Тестирование phpinfo() и whoami.
  10. Настройка SELinux/логов и ротации.

8 Роль-ориентированные контрольные списки

  • Для администратора сервера:
    • Подготовить окружение (devtools, httpd-devel).
    • Проверить конфигурацию Apache и доступность модулей.
    • Настроить SELinux и ротацию логов.
  • Для разработчика сайта:
    • Убедиться, что все PHP-файлы принадлежат нужному пользователю.
    • Тестировать поведение phpinfo и сценарии с правами.
  • Для провайдера хостинга:
    • Автоматизировать создание пользователей и прав.
    • Ввести мониторинг ошибок и доступности сайтов.

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

  • Страница info.php показывает Server API = CGI/FastCGI.
  • testuser.php выводит имя пользователя, соответствующее владельцу файлов (например, web1).
  • В логах Apache и SuPHP нет критических ошибок при загрузке страницы.
  • Файлы сайта имеют корректные владельца и права, а сервис успешно перезапускается.

10 Фактбокс

  • SuPHP версия: 0.7.2 (в этом руководстве)
  • Целевая ОС: CentOS 7.2+
  • Apache: 2.4
  • PHP: 5 (используем php-cgi)
  • Порты: HTTP 80 и HTTPS 443

11 Альтернативы и когда не использовать SuPHP

  • PHP-FPM с пулом пользователей часто предпочтительнее: современнее, быстрее и лучше интегрируется с nginx и Apache (mod_proxy_fcgi).
  • Если у вас многопользовательский хостинг с большим количеством сайтов и высоким трафиком, рассмотрите PHP-FPM или контейнеризацию.

12 Краткое резюме

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

Ключевые команды для проверки и отладки:

apachectl configtest
systemctl restart httpd.service
tail -f /var/log/httpd/error_log
tail -f /var/log/httpd/suphp.log
getenforce
ausearch -m avc -ts recent

Спасибо за внимание. Если нужно, могу подготовить версию инструкции для CentOS 8/Stream или для использования PHP-FPM с пулом пользователей.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро