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

Как укрепить PHP5 с Suhosin на CentOS 5.0 - Страница 2

4 Установка Suhosin

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

Чтобы установить патч Suhosin, нам нужно перекомпилировать PHP5 из исходников, но мы будем использовать пакет CentOS 5.0 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.1.6 в этом примере) с зеркала CentOS 5.0 в /usr/src и устанавливаем его:

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/updates/SRPMS/php-5.1.6-12.el5.src.rpm

(Как вы видите выше, я загружаю самый новый PHP5.src.rpm из каталога updates/ моего зеркала CentOS; конечно, вы также можете загрузить оригинальный .src.rpm из каталога os/, например, http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm. Если вы сделаете это, вам нужно будет отрегулировать имена файлов в остальной части этого руководства.)

rpm -ivh php-5.1.6-12.el5.src.rpm

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

warning: user mockbuild 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.1.6-0.9.6.patch.gz

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

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"

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

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

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

Добавьте Patch0: php-5.1.6-suhosin.patch в раздел, где перечислены все патчи, и закомментируйте строку Patch14: php-5.1.6-ecalloc.patch в том же разделе (патч ecalloc конфликтует с Suhosin), а затем добавьте %patch0 -p1 -b .suhosin в раздел %setup -q и закомментируйте строку %patch14 -p1 -b .ecalloc в том же разделе:

| [...] Source51: php.ini Patch0: php-5.1.6-suhosin.patch 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 [...] %setup -q %patch0 -p1 -b .suhosin %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 [...] |

Теперь мы пересобираем 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.1.6-12.i386  
        httpd-devel >= 2.0.46-1 is needed by php-5.1.6-12.i386  
        libjpeg-devel is needed by php-5.1.6-12.i386  
        libpng-devel is needed by php-5.1.6-12.i386  
        pcre-devel >= 4.5 is needed by php-5.1.6-12.i386  
        libc-client-devel is needed by php-5.1.6-12.i386  
        mysql-devel >= 4.1.0 is needed by php-5.1.6-12.i386  
        postgresql-devel is needed by php-5.1.6-12.i386  
        unixODBC-devel is needed by php-5.1.6-12.i386  
        net-snmp-devel is needed by php-5.1.6-12.i386  
        gd-devel is needed by php-5.1.6-12.i386  
        freetype-devel is needed by php-5.1.6-12.i386  
[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:

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.