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

Установка Suhosin на Debian/Ubuntu

5 min read Безопасность сервера Обновлено 25 Nov 2025
Установка Suhosin на Debian/Ubuntu
Установка Suhosin на Debian/Ubuntu

Введение

В этом руководстве показано, как установить расширение Suhosin и как применить Suhosin-патч к исходникам PHP5 на Debian Etch / Ubuntu. Подход использует исходный пакет PHP, из которого собран текущий php5 в системе, — это позволяет сохранить корректные конфигурационные опции и совместимость с apt.

Важно: описываемая процедура перекомпиляции относится к ветке PHP5 и старым версиям дистрибутивов (Debian Etch, Ubuntu старых выпусков). Для современных дистрибутивов и PHP рекомендуется проверять актуальную документацию Suhosin и пакеты в репозиториях.

Что потребуется

  • root-доступ или sudo
  • Доступ в интернет для скачивания исходников и патча
  • Набор инструментов для сборки пакетов Debian

Кратко: apt-get install php5-suhosin, затем при необходимости перекомпиляция PHP5 с применением патча Suhosin.

1. Установка готового пакета Suhosin

Если Suhosin доступен как пакет в ваших репозиториях, установите его командой:

apt-get install php5-suhosin

Это самый быстрый и безопасный способ: пакет устанавливается через apt, обновления придут через пакетный менеджер.

2. Установка Suhosin как патча к PHP5 (перекомпиляция из исходников)

Если вам нужен патч (а не только расширение), необходимо перекомпилировать PHP5. Набросок процесса:

  1. Установить инструменты сборки и зависимости.
  2. Скачать исходный пакет php5 из репозиториев apt.
  3. Скачать подпись Hardened PHP и импортировать ключ.
  4. Скачать подходящий патч Suhosin для вашей версии PHP.
  5. Распаковать и применить патч к исходникам.
  6. Собрать .deb-пакеты с помощью dpkg-buildpackage.
  7. Установить полученные .deb.

2.1 Установить инструменты сборки

apt-get install dpkg-dev build-essential

2.2 Скачать исходники PHP5

Переключаемся в /usr/src и получаем исходники, из которых был собран текущий пакет:

cd /usr/src
apt-get source php5

2.3 Импортировать подпись Hardened PHP

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

2.4 Скачать патч Suhosin

Перейдите на страницу загрузки Suhosin (http://www.hardened-php.net/suhosin/download.html) и выберите патч, соответствующий вашей версии PHP. В примере ниже использована версия PHP 5.2.0 — для неё загружается патч:

wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.0-0.9.6.2.patch.gz

2.5 Применить патч

Распакуйте патч и примените его к каталогам с исходниками:

gunzip suhosin-patch-5.2.0-0.9.6.2.patch.gz
cd php5-5.2.0
patch -p 1 -i ../suhosin-patch-5.2.0-0.9.6.2.patch

Если patch завершился без ошибок, можно переходить к сборке.

2.6 Собрать .deb-пакеты

В каталоге с исходниками выполните:

dpkg-buildpackage

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

server1:/usr/src/php5-5.2.0# dpkg-buildpackage
dpkg-buildpackage: source package is php5
dpkg-buildpackage: source version is 5.2.0-8+etch1
dpkg-buildpackage: source changed by sean finney <[email protected]>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 5.2.0-8+etch1
dpkg-checkbuilddeps: Unmet build dependencies: apache-dev (>= 1.3.23) apache2-prefork-dev (>= 2.0.53-3) bison chrpath debhelper (>= 3) firebird2-dev flex (>= 2.5.4) freetds-dev libapr1-dev (>= 1.2.7-8) libbz2-dev (>= 1.0.0) libc-client-dev libcurl3-openssl-dev | libcurl3-dev libdb4.4-dev libexpat1-dev (>= 1.95.2-2.1) libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev (>= 2.0.28-3) libjpeg62-dev libkrb5-dev libldap2-dev libmcrypt-dev libmhash-dev (>= 0.8.8) libmysqlclient15-dev | libmysqlclient12-dev libncurses5-dev libpam0g-dev libpcre3-dev (>= 6.6) libpng12-dev libpq-dev | postgresql-dev libpspell-dev librecode-dev libsnmp9-dev | libsnmp-dev libsqlite0-dev libt1-dev libtidy-dev libwrap0-dev libxmltok1-dev libxml2-dev (>= 2.4.14) libxslt1-dev (>= 1.0.18) re2c unixodbc-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)

Если вы увидите подобную ошибку, установите указанные зависимости (символ | означает альтернативу — можно установить любую из предложенных пакетов). Пример команды для установки часто требуемых пакетов:

apt-get install apache-dev apache2-prefork-dev bison chrpath debhelper firebird2-dev flex freetds-dev libapr1-dev libbz2-dev libc-client-dev libcurl3-dev libdb4.4-dev libexpat1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libjpeg62-dev libkrb5-dev libldap2-dev libmcrypt-dev libmhash-dev libmysqlclient15-dev libncurses5-dev libpam0g-dev libpcre3-dev libpng12-dev libpq-dev libpspell-dev librecode-dev libsnmp9-dev libsqlite0-dev libt1-dev libtidy-dev libwrap0-dev libxmltok1-dev libxml2-dev libxslt1-dev re2c unixodbc-dev

После установки зависимостей запустите сборку ещё раз:

dpkg-buildpackage

Сборка может занять значительное время. В конце возможны предупреждения о подписях — их можно проигнорировать, если пакеты успешно собраны.

2.7 Просмотр результатов сборки

Перейдите в /usr/src и посмотрите полученные .deb-файлы и исходники:

cd /usr/src
ls -l

Пример вывода каталога после сборки (сохранён для наглядности):

server1:/usr/src# ls -l
total 21792
-rw-r--r--  1 root src     1351 2005-07-05 13:02 hardened-php-signature-key.asc
-rw-r--r--  1 root src  2419598 2007-03-29 16:37 libapache2-mod-php5_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src  2418714 2007-03-29 16:37 libapache-mod-php5_5.2.0-8+etch1_i386.deb
drwxr-xr-x 20 root root    4096 2007-03-29 16:37 php5-5.2.0
-rw-r--r--  1 root src     1044 2007-03-29 16:37 php5_5.2.0-8+etch1_all.deb
-rw-r--r--  1 root src   124228 2007-03-29 16:02 php5_5.2.0-8+etch1.diff.gz
-rw-r--r--  1 root src     1739 2007-03-29 16:02 php5_5.2.0-8+etch1.dsc
-rw-r--r--  1 root src     5689 2007-03-29 16:38 php5_5.2.0-8+etch1_i386.changes
-rw-r--r--  1 root src  8583491 2006-11-07 13:34 php5_5.2.0.orig.tar.gz
-rw-r--r--  1 root src  4771850 2007-03-29 16:37 php5-cgi_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src  2405518 2007-03-29 16:37 php5-cli_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src   215058 2007-03-29 16:37 php5-common_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    24464 2007-03-29 16:37 php5-curl_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src   350954 2007-03-29 16:37 php5-dev_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    33416 2007-03-29 16:37 php5-gd_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    34496 2007-03-29 16:37 php5-imap_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    44322 2007-03-29 16:37 php5-interbase_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    17232 2007-03-29 16:37 php5-ldap_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    12822 2007-03-29 16:37 php5-mcrypt_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src     5046 2007-03-29 16:37 php5-mhash_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    64902 2007-03-29 16:37 php5-mysql_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    33410 2007-03-29 16:37 php5-odbc_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    50652 2007-03-29 16:37 php5-pgsql_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src     8628 2007-03-29 16:37 php5-pspell_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src     4756 2007-03-29 16:37 php5-recode_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    11302 2007-03-29 16:37 php5-snmp_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    34454 2007-03-29 16:37 php5-sqlite_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    18392 2007-03-29 16:37 php5-sybase_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    16478 2007-03-29 16:37 php5-tidy_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    36450 2007-03-29 16:37 php5-xmlrpc_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src    12260 2007-03-29 16:37 php5-xsl_5.2.0-8+etch1_i386.deb
-rw-r--r--  1 root src   310194 2007-03-29 16:37 php-pear_5.2.0-8+etch1_all.deb
-rw-r--r--  1 root src    95588 2007-03-06 10:37 suhosin-patch-5.2.0-0.9.6.2.patch

2.8 Установка только нужных пакетов

Установите те .deb-пакеты, которые вам действительно нужны. В примере автор не устанавливает php5-cgi и php5-cli (так как используется модуль Apache), а также не устанавливает пакеты для Apache 1.3 (libapache-mod-php5). Вместо этого устанавливается libapache2-mod-php5 для Apache 2.2:

dpkg -i libapache2-mod-php5_5.2.0-8+etch1_i386.deb php5_5.2.0-8+etch1_all.deb php5-common_5.2.0-8+etch1_i386.deb php5-curl_5.2.0-8+etch1_i386.deb php5-dev_5.2.0-8+etch1_i386.deb php5-gd_5.2.0-8+etch1_i386.deb php5-imap_5.2.0-8+etch1_i386.deb php5-interbase_5.2.0-8+etch1_i386.deb php5-ldap_5.2.0-8+etch1_i386.deb php5-mcrypt_5.2.0-8+etch1_i386.deb php5-mhash_5.2.0-8+etch1_i386.deb php5-mysql_5.2.0-8+etch1_i386.deb php5-odbc_5.2.0-8+etch1_i386.deb php5-pgsql_5.2.0-8+etch1_i386.deb php5-pspell_5.2.0-8+etch1_i386.deb php5-recode_5.2.0-8+etch1_i386.deb php5-snmp_5.2.0-8+etch1_i386.deb php5-sqlite_5.2.0-8+etch1_i386.deb php5-sybase_5.2.0-8+etch1_i386.deb php5-tidy_5.2.0-8+etch1_i386.deb php5-xmlrpc_5.2.0-8+etch1_i386.deb php5-xsl_5.2.0-8+etch1_i386.deb

dpkg автоматически перезапустит Apache при необходимости.

3. Проверка установки

Откройте страницу phpinfo в браузере (например, http://192.168.0.100/info.php). При корректной установке Suhosin вы увидите упоминания Suhosin в двух местах на странице phpinfo — это индикатор того, что расширение и/или патч активны.

Suhosin отображён в phpinfo — секция конфигурации расширений

Suhosin отображён в phpinfo — общая информация о модуле Suhosin

Важно: если Suhosin не отображается, проверьте логи Apache/PHP, убедитесь, что установлены правильные пакеты и что php.ini или дополнительные конфигурационные файлы загружают модуль Suhosin.

4. Настройка Suhosin

Suhosin работает из коробки с разумными настройками, но его поведение можно тонко настроить. Документация по конфигурации доступна по адресу: http://www.hardened-php.net/suhosin/configuration.html

Примечание: перед изменением параметров сохраните текущие настройки и тестируйте изменения в контролируемой среде.

Когда этот подход не подходит

  • Если вы используете современные версии PHP (7.x, 8.x) — Suhosin ориентирован на старые ветки PHP и может быть несовместим.
  • На серверах с критичным аптаймом нежелательно перекомпилировать рабочий PHP без тестовой среды. Лучше сначала протестировать сборку в CI или на стенде.
  • Если пакет php5-suhosin доступен в репозитории и устраивает по версии, предпочтительнее использовать готовый пакет.

Чек-лист для администратора (быстрая шпаргалка)

  • Сделать резервную копию конфигураций и сайтов
  • Установить dpkg-dev и build-essential
  • Скачать исходники php5: apt-get source php5
  • Скачать и импортировать hardened-php-signature-key.asc
  • Скачать патч Suhosin, соответствующий версии PHP
  • Применить patch -p 1 -i ../suhosin-*.patch
  • Установить отсутствующие зависимости для сборки
  • Выполнить dpkg-buildpackage и установить .deb через dpkg -i
  • Проверить phpinfo на наличие Suhosin

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

  • Suhosin отображается как расширение в phpinfo в двух местах.
  • Сайты корректно отрабатывают под новым модулем (нет фатальных ошибок).
  • Логи Apache/PHP не содержат критических ошибок после перезапуска.

Роль-based рекомендации

  • Системный администратор: собрать пакеты в тестовой среде, подготовить план отката (сохранить старые .deb).
  • Разработчик: проверить совместимость кода с усиленными ограничениями Suhosin (вводимые ограничения на request/headers/ввод).
  • DevOps/CI: автоматизировать сборку и тестирование с помощью скриптов сборки и тестовых окружений.

Итог

Установка Suhosin может быть простой — через пакет php5-suhosin, или более гибкой — через применение патча к исходникам PHP и сборку собственных .deb. Второй подход даёт контроль над конфигурацией, но требует времени и аккуратности при установке зависимостей и тестировании. Всегда тестируйте изменения в стенде и имейте план отката.

Ссылки

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

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

SSH honeypot: как настроить endlessh
Security

SSH honeypot: как настроить endlessh

Удаление текстового поля в Google Slides
Google Slides

Удаление текстового поля в Google Slides

Ярлыки для UWP‑приложений в Windows 11
Windows

Ярлыки для UWP‑приложений в Windows 11

Серийный номер жёсткого диска в Windows 10
Windows

Серийный номер жёсткого диска в Windows 10

PIN в Windows 10: настройка и безопасность
Windows

PIN в Windows 10: настройка и безопасность

Организация контактов на Android
Android.

Организация контактов на Android