PHP, Suhosin · 3 min read · Oct 25, 2025

Как защитить PHP5 с помощью Suhosin на Fedora 7 - Страница 2

4 Установка Suhosin

Suhosin можно скачать отсюда: http://www.hardened-php.net/suhosin/download.html

Чтобы установить патч Suhosin, нам нужно перекомпилировать PHP5 из исходников, но мы будем использовать пакет Fedora 7 PHP5.src.rpm для этого (используя команду rpmbuild), чтобы получить новые пакеты PHP5.rpm (с Suhosin), которые мы можем установить. Таким образом, нам не нужно беспокоиться о правильных параметрах конфигурации PHP5, потому что rpmbuild позаботится об этом.

Но сначала мы получаем копию ключа подписи релиза проекта Hardened-PHP и импортируем его в наш ключевой хранилище GNU Privacy Guard:

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

Затем мы загружаем пакет PHP5.src.rpm (который соответствует нашей установленной версии PHP, 5.2.2 в этом примере) с зеркала Fedora 7 в /usr/src и устанавливаем его:

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/releases/7/Fedora/source/SRPMS/php-5.2.2-3.src.rpm  
rpm -ivh php-5.2.2-3.src.rpm

Если вы получите предупреждения, подобные этому:

warning: group kojibuilder does not exist - using root

вы можете игнорировать это.

Далее мы загружаем патч Suhosin, который соответствует нашей версии PHP, в /usr/src/redhat/SOURCES (вы можете найти все доступные патчи на странице загрузки Suhosin):

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

Теперь мы должны проверить, что MD5-сумма загруженного патча идентична той, что опубликована на странице загрузки Suhosin:

md5sum suhosin-patch-5.2.2-0.9.6.2.patch.gz

Если MD5-сумма в порядке, мы можем проверить цифровую подпись вот так:

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

Если вы видите эту строку в выводе:

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

всё в порядке с загруженным патчем, и мы можем продолжать.

Теперь мы распаковываем патч Suhosin, переименовываем его так, чтобы он соответствовал схеме именования Fedora, и изменяем файл /usr/src/redhat/SPECS/php.spec так, чтобы команда rpmbuild знала, что ей нужно включить патч Suhosin при пересборке PHP5:

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

Добавьте Patch0: php-5.2.2-suhosin.patch в раздел, где перечислены все патчи, и %patch0 -p1 -b .suhosin в раздел %setup -q:

| [...] Source3: macros.php Patch0: php-5.2.2-suhosin.patch Patch1: php-5.1.4-gnusrc.patch [...] %setup -q %patch0 -p1 -b .suhosin %patch1 -p1 -b .gnusrc [...] |

Теперь мы пересобираем PHP5:

rpmbuild -ba php.spec

В зависимости от того, какие модули PHP5 у вас установлены, rpmbuild, скорее всего, будет жаловаться на отсутствующие пакеты, которые ему нужны для сборки новых пакетов для различных модулей PHP5:

[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.2.2-3.i386  
        httpd-devel >= 2.0.46-1 is needed by php-5.2.2-3.i386  
        pcre-devel >= 4.5 is needed by php-5.2.2-3.i386  
        uw-imap-devel is needed by php-5.2.2-3.i386  
        mysql-devel >= 4.1.0 is needed by php-5.2.2-3.i386  
        postgresql-devel is needed by php-5.2.2-3.i386  
        unixODBC-devel is needed by php-5.2.2-3.i386  
        net-snmp-devel is needed by php-5.2.2-3.i386  
        libxslt-devel >= 1.0.18-1 is needed by php-5.2.2-3.i386  
[root@server1 SPECS]#

Если вы видите ошибку подобного рода, установите отсутствующие пакеты, например, вот так:

yum install aspell-devel httpd-devel pcre-devel uw-imap-devel mysql-devel postgresql-devel unixODBC-devel net-snmp-devel libxslt-devel

После этого снова запустите rpmbuild:

rpmbuild -ba php.spec

Теперь это должно скомпилировать PHP5 и все установленные модули PHP5 снова и создать новые пакеты .rpm в каталоге /usr/src/redhat/RPMS/i386. Это может занять некоторое время, так что, пожалуйста, будьте терпеливы.

После этого мы можем установить новые пакеты PHP5 вот так:

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

Вот и всё для патча Suhosin.

Теперь мы собираемся создать расширение Suhosin для PHP. Сначала мы загружаем его исходники в каталог /usr/src (исходники расширения Suhosin доступны на странице загрузки Suhosin):

cd /usr/src  
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgz

Далее мы снова проверяем MD5-сумму и подпись:

md5sum suhosin-0.9.20.tgz
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgz.sig  
gpg suhosin-0.9.20.tgz.sig

Затем мы распаковываем исходники и собираем расширение вот так:

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

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

vi /etc/php.d/suhosin.ini

| extension=suhosin.so |

Всё, что осталось сделать, это перезапустить Apache2:

/etc/init.d/httpd restart

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

Вот и всё. Если хотите, вы можете настроить Suhosin (см. http://www.hardened-php.net/suhosin/configuration.html), хотя Suhosin будет работать из коробки с его конфигурацией по умолчанию, так что убедитесь, что вы знаете, что делаете.

5 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.