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

Установка Suhosin

• 4 min read • Администрирование • Обновлено 18 Nov 2025
Установка Suhosin на CentOS
Установка Suhosin на CentOS

Что это и зачем

Suhosin — это надёжный набор патчей и расширение для PHP, повышающее безопасность. Патч встраивается в исходники PHP и требует пересборки RPM-пакетов; расширение подключается отдельно. Короткое определение: Suhosin — защита уровня интерпретатора PHP.

Требования и примечания

  • Тестируйте на стенде перед продакшеном.
  • Используется CentOS 5.3 и PHP 5.1.6 в примерах; адаптируйте версии под вашу систему.
  • Потребуются права root и набор dev-пакетов для сборки.

Важно: не изменяйте пути и имена файлов, указанные в командах, если вы не уверены в последствиях. При изменении версии PHP адаптируйте имена RPM и патчей.

Подготовка: ключ подписи Hardened-PHP

Сначала скачайте и импортируйте ключ подписи проекта Hardened-PHP в ключницу GPG:

wget http://www.hardened-php.net/hardened-php-signature-key.asc  
gpg --import < hardened-php-signature-key.asc

Скачивание исходников RPM PHP5

Скачайте соответствующий пакет PHP5.src.rpm в /usr/src и установите его в систему билд-структур RPM:

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.3/updates/SRPMS/php-5.1.6-23.2.el5_3.src.rpm

Если вы используете оригинальную ветку os/ вместо updates/, подгоните имя rpm в дальнейших шагах.

rpm -ivh php-5.1.6-23.2.el5_3.src.rpm

Если появятся предупреждения о mockbuild, их можно игнорировать:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root

Подготовка Suhosin-патча

Скачайте патч Suhosin подходящий для вашей версии PHP в каталог SOURCES сборочного дерева RPM:

cd /usr/src/redhat/SOURCES  
wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gz

Проверьте MD5-сумму загрузки:

md5sum suhosin-patch-5.1.6-0.9.6.patch.gz

Если MD5 совпадает, проверьте цифровую подпись:

wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gz.sig  
gpg suhosin-patch-5.1.6-0.9.6.patch.gz.sig

Вы должны увидеть в выводе строку примерно такого вида:

gpg: Good signature from "Hardened-PHP Signature Key"

Важно: продолжайте только если подпись корректна.

Применение патча к спецификации RPM

Распакуйте патч и переименуйте его по схеме CentOS, затем внесите изменения в SPECS/php.spec так, чтобы rpmbuild включал патч при пересборке PHP:

gunzip suhosin-patch-5.1.6-0.9.6.patch.gz  
mv suhosin-patch-5.1.6-0.9.6.patch php-5.1.6-suhosin.patch  
cd /usr/src/redhat/SPECS/  
vi php.spec

Добавьте строку Patch106: php-5.1.6-suhosin.patch в блок с перечислением патчей. Закомментируйте конфликтующий патч ecalloc (Patch14) и добавьте вызов %patch106 в секцию %prep, закомментировав %patch14. В файле должно получиться примерно так:

[...]
Source51: php.ini

Patch1: php-5.1.4-gnusrc.patch
Patch2: php-5.1.4-warnings.patch
Patch5: php-4.3.3-install.patch
Patch6: php-5.0.4-norpath.patch
Patch7: php-4.3.2-libtool15.patch
Patch13: php-5.0.2-phpize64.patch
#Patch14: php-5.1.6-ecalloc.patch
Patch15: php-5.2.0-includedir.patch
Patch16: php-5.1.6-bug38534.patch
Patch17: php-5.1.6-umask.patch
Patch18: php-4.3.9-metaphone.patch
Patch19: php-5.1.6-zendecase.patch
Patch20: php-5.1.6-zendhash.patch
[...]
Patch99: php-5.1.6-CVE-2008-3658.patch
Patch100: php-5.1.6-CVE-2008-3660.patch
Patch101: php-5.1.6-CVE-2008-5498.patch
Patch102: php-5.1.6-CVE-2008-5557.patch
Patch103: php-5.1.6-CVE-2008-5814.patch
Patch104: php-5.1.6-mbstring-overload-func.patch
Patch105: php-5.1.6-gdoverflow.patch
Patch106: php-5.1.6-suhosin.patch
[...]
%prep
%setup -q
%patch1 -p1 -b .gnusrc
%patch2 -p1 -b .warnings
%patch5 -p1 -b .install
%patch6 -p1 -b .norpath
%patch7 -p1 -b .libtool15
%patch13 -p1 -b .phpize64
#%patch14 -p1 -b .ecalloc
%patch15 -p1 -b .includedir
%patch16 -p1 -b .bug38534
%patch17 -p1 -b .umask
%patch18 -p1 -b .metaphone
%patch19 -p1 -b .zendecase
%patch20 -p1 -b .zendhash
[...]
%patch99 -p1 -b .cve3658
%patch100 -p1 -b .cve3660
%patch101 -p1 -b .cve5498
%patch102 -p1 -b .cve5557
%patch103 -p1 -b .cve5814
%patch104 -p1 -b .mbstring-overload-func
%patch106 -p1 -b .suhosin
[...]

Особенности для x86_64

На системе x86_64 установите apr-devel.x86_64, если он ещё не установлен. Не делайте этого на i386:

yum install apr-devel.x86_64

Без этого вы можете получить ошибку при использовании apxs:

cannot open /httpd/build/config_vars.mk: No such file or directory at /usr/sbin/apxs line 201.

Пересборка PHP5 с патчем

Запустите сборку RPM-пакетов:

rpmbuild -ba php.spec

rpmbuild может жаловаться на отсутствующие dev-пакеты, необходимые для сборки дополнительных модулей. Пример вывода и список пакетов-зависимостей:

[root@server1 SPECS]# rpmbuild -ba php.spec  
cat: /usr/include/httpd/.mmn: No such file or directory  
error: Failed build dependencies:  
        aspell-devel >= 0.50.0 is needed by php-5.1.6-23.2.x86_64  
        httpd-devel >= 2.0.46-1 is needed by php-5.1.6-23.2.x86_64  
        libjpeg-devel is needed by php-5.1.6-23.2.x86_64  
        libpng-devel is needed by php-5.1.6-23.2.x86_64  
        pcre-devel >= 4.5 is needed by php-5.1.6-23.2.x86_64  
        libc-client-devel is needed by php-5.1.6-23.2.x86_64  
        mysql-devel >= 4.1.0 is needed by php-5.1.6-23.2.x86_64  
        postgresql-devel is needed by php-5.1.6-23.2.x86_64  
        unixODBC-devel is needed by php-5.1.6-23.2.x86_64  
        net-snmp-devel is needed by php-5.1.6-23.2.x86_64  
        gd-devel is needed by php-5.1.6-23.2.x86_64  
        freetype-devel is needed by php-5.1.6-23.2.x86_64  
[root@server1 SPECS]#

Установите недостающие пакеты и повторите сборку:

yum install aspell-devel httpd-devel libjpeg-devel libpng-devel pcre-devel libc-client-devel mysql-devel postgresql-devel unixODBC-devel net-snmp-devel gd-devel freetype-devel

rpmbuild -ba php.spec

Сборка создаст RPM-пакеты в каталоге /usr/src/redhat/RPMS/i386 или /usr/src/redhat/RPMS/x86_64 в зависимости от архитектуры. Процесс может занять продолжительное время.

Установка собранных пакетов

После успешной сборки установите новые пакеты:

i386:

cd /usr/src/redhat/RPMS/i386  
rpm -Uvh --force php-*

x86_64:

cd /usr/src/redhat/RPMS/x86_64  
rpm -Uvh --force php-*

Готово — патч Suhosin применён к PHP.

Сборка и установка расширения Suhosin

Скачайте исходники расширения в /usr/src:

cd /usr/src  
wget http://download.suhosin.org/suhosin-0.9.27.tgz

Проверьте MD5 и подпись:

md5sum suhosin-0.9.27.tgz

wget http://download.suhosin.org/suhosin-0.9.27.tgz.sig  
gpg suhosin-0.9.27.tgz.sig

Распакуйте и соберите расширение:

tar xvfz suhosin-0.9.27.tgz  
cd suhosin-0.9.27  
phpize  
./configure  
make  
make install

Чтобы включить расширение, создайте файл конфигурации /etc/php.d/suhosin.ini и добавьте туда строку extension=suhosin.so:

vi /etc/php.d/suhosin.ini
extension=suhosin.so

Перезапустите Apache:

/etc/init.d/httpd restart

Теперь откройте вашу страницу info.php (например, http://192.168.0.100/info.php). Если всё прошло успешно, вы увидите Suhosin в phpinfo в двух местах:

Suhosin в секции расширений phpinfo

Детали конфигурации Suhosin в phpinfo

Suhosin работает и может быть дополнительно настроен на странице конфигурации проекта: http://www.hardened-php.net/suhosin/configuration.html. По умолчанию Suhosin уже обеспечивает базовую защиту.

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

  • phpinfo показывает Suhosin в списке расширений и в разделе конфигурации.
  • Пересобранные RPM установлены и PHP запускается без ошибок.
  • Расширение suhosin.so загружено и активировано.

Чеклист администратора

  • Сохранить резервную копию конфигураций и данных перед сборкой.
  • Скачан и импортирован GPG-ключ Hardened-PHP.
  • Проверены MD5 и GPG-подпись патча и исходников.
  • Внесены изменения в php.spec и добавлен Patch106.
  • Установлены все dev-зависимости для rpmbuild.
  • Собраны и установлены RPM-пакеты.
  • Скомпилировано и подключено расширение Suhosin.
  • Apache перезапущен и phpinfo проверен.

Советы по совместимости и миграции

  • Если вы используете другую версию PHP, найдите соответствующую пару php.src.rpm и suhosin-патч. Имена файлов должны совпадать с версией.
  • На x86_64 обязательно установить apr-devel.x86_64 и другие 64-битные dev-пакеты.
  • Для минимизации рисков сначала выполняйте все шаги на тестовой машине и контролируйте поведение приложений после обновления PHP.

Быстрая методология проверки целостности

  1. Проверка MD5 для скачанного архива.
  2. Проверка GPG-подписи архива.
  3. Внесение патча в php.spec.
  4. Сборка RPM и проверка зависимостей.
  5. Установка и проверка phpinfo.

Небольшая модель зрелости безопасности

  • Базовая: использовать расширение Suhosin без патча (только .so).
  • Средняя: применять патч Suhosin в PHP и собирать RPM.
  • Продвинутая: настроить политики Suhosin под приложение и внедрить мониторинг/ALERT на изменения конфигурации.

Решение: патчать или только подключить расширение

flowchart TD
  A[Нужна ли защита сверху PHP?] -->|Да| B{Вы хотите менять PHP?}
  B -->|Да| C[Патч + пересборка RPM]
  B -->|Нет| D[Только расширение suhosin.so]
  A -->|Нет| E[Оставить как есть]

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

  • rpmbuild — инструмент для сборки RPM-пакетов.
  • php.spec — спецификация сборки пакета PHP для RPM.
  • phpize — утилита для подготовки сборки PHP-расширений.

Когда Suhosin может не подойти

  • Очень старые приложения, завязанные на специфичное поведение интерпретатора PHP — патч может менять поведение.
  • Если нет возможности тестировать и быстро откатиться, пересборка production-PHP рискованна.

Резюме

  • Suhosin можно установить двумя путями: патч исходников и пересборка RPM, и/или установка расширения suhosin.so.
  • Всегда проверяйте MD5 и GPG-подпись.
  • Тестируйте изменения на отдельной среде.

Ссылки

Поделиться: 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 быстро