Установка 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 --reload2 Установка 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 configtest4 Тестирование установки SuPHP
Проверим работу PHP и то, под каким пользователем выполняются скрипты.
- Проверка 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.

- Проверка имени пользователя выполнения: создайте testuser.php:
nano /var/www/example.com/testuser.phpВставьте:
Сделайте владельцем web1 и откройте http://example.com/testuser.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 — краткий список шагов
- Подготовка сервера: обновление, установка firewalld.
- Установка Apache и PHP: yum install httpd httpd-devel php …
- Установка инструментов сборки: Development Tools, wget.
- Скачивание и распаковка suphp-0.7.2.tar.gz.
- Применение патча для Apache 2.4 и autoreconf -if.
- ./configure … ; make ; make install.
- Добавление /etc/httpd/conf.d/suphp.conf и /etc/suphp.conf.
- Создание пользователя сайта, настройка прав и виртуального хоста.
- Тестирование phpinfo() и whoami.
- Настройка 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 с пулом пользователей.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента