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.tgzwget 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 Ссылки
- Suhosin: http://www.hardened-php.net/suhosin/index.html
- PHP: http://www.php.net
- CentOS: http://www.centos.org
Get new posts in your inbox
No spam. Unsubscribe anytime.