PHP Security · 4 min read · Oct 25, 2025
Comment durcir PHP5 avec Suhosin sur CentOS 5.0 - Page 2
4 Installation de Suhosin
Suhosin peut être téléchargé ici : http://www.hardened-php.net/suhosin/download.html
Pour installer le patch Suhosin, nous devons recompiler PHP5 à partir des sources, mais nous utiliserons le package CentOS 5.0 PHP5.src.rpm pour cela (en utilisant la commande rpmbuild), afin d’obtenir de nouveaux packages PHP5.rpm (avec Suhosin) que nous pouvons installer. De cette façon, nous n’avons pas à nous soucier des bonnes options de configuration PHP5 car rpmbuild s’en occupera.
Mais d’abord, nous récupérons une copie de la clé de signature de la version du projet Hardened-PHP et l’importons dans notre trousseau de clés GNU Privacy Guard :
wget http://www.hardened-php.net/hardened-php-signature-key.asc
gpg --import < hardened-php-signature-key.ascEnsuite, nous téléchargeons un package PHP5.src.rpm (qui convient à notre version de PHP installée, 5.1.6 dans cet exemple) depuis un miroir CentOS 5.0 vers /usr/src et l’installons :
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(Comme vous le voyez ci-dessus, je télécharge le plus récent PHP5.src.rpm depuis le répertoire updates/ de mon miroir CentOS ; bien sûr, vous pouvez également télécharger l’original .src.rpm depuis le répertoire os/, par exemple http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm. Si vous le faites, vous devrez ajuster les noms de fichiers dans le reste de ce tutoriel.)
rpm -ivh php-5.1.6-12.el5.src.rpmSi vous obtenez des avertissements comme celui-ci :
warning: user mockbuild does not exist - using rootvous pouvez l’ignorer.
Ensuite, nous téléchargeons le patch Suhosin qui convient à notre version de PHP vers /usr/src/redhat/SOURCES (vous pouvez trouver tous les patches disponibles sur la page de téléchargement de Suhosin) :
cd /usr/src/redhat/SOURCES
wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gzNous devrions maintenant vérifier que la somme MD5 du patch téléchargé est identique à celle publiée sur la page de téléchargement de Suhosin :
md5sum suhosin-patch-5.1.6-0.9.6.patch.gzSi la somme MD5 est correcte, nous pouvons vérifier la signature numérique comme ceci :
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.sigSi vous voyez cette ligne dans la sortie :
gpg: Good signature from "Hardened-PHP Signature Key"tout va bien avec le patch téléchargé, et nous pouvons continuer.
Maintenant, nous décompressons le patch Suhosin, le renommons pour qu’il s’adapte au schéma de nommage de CentOS, et modifions le fichier /usr/src/redhat/SPECS/php.spec afin que la commande rpmbuild sache qu’elle doit inclure le patch Suhosin lors de la reconstruction de 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.specAjoutez Patch0: php-5.1.6-suhosin.patch à la strophe où tous les patches sont listés et commentez la ligne Patch14: php-5.1.6-ecalloc.patch dans la même strophe (le patch ecalloc entre en conflit avec Suhosin), puis ajoutez %patch0 -p1 -b .suhosin à la strophe %setup -q et commentez la ligne %patch14 -p1 -b .ecalloc dans la même strophe :
| [...] 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 [...] |
Maintenant, nous reconstruisons PHP5 :
rpmbuild -ba php.specEn fonction des modules PHP5 que vous avez installés, rpmbuild se plaindra probablement des packages manquants dont il a besoin pour construire de nouveaux packages pour les différents modules 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]#Si vous voyez une erreur comme celle-ci, installez les packages manquants, par exemple comme ceci :
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-develEnsuite, exécutez à nouveau rpmbuild :
rpmbuild -ba php.specCela devrait maintenant compiler PHP5 et tous les modules PHP5 installés à nouveau et créer de nouveaux packages .rpm dans le répertoire /usr/src/redhat/RPMS/i386. Cela peut prendre un certain temps, alors soyez patient.
Ensuite, nous pouvons installer les nouveaux packages PHP5 comme ceci :
cd /usr/src/redhat/RPMS/i386
rpm -Uvh --force php-*C’est tout pour le patch Suhosin.
Maintenant, nous allons construire l’extension PHP Suhosin. Tout d’abord, nous téléchargeons ses sources dans le répertoire /usr/src (les sources de l’extension Suhosin sont disponibles sur la page de téléchargement de Suhosin) :
cd /usr/src
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgzEnsuite, nous vérifions à nouveau la somme MD5 et la signature :
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.sigPuis nous décompressons les sources et construisons l’extension comme ceci :
tar xvfz suhosin-0.9.20.tgz
cd suhosin-0.9.20
phpize
./configure
make
make installPour activer l’extension Suhosin, nous créons le fichier /etc/php.d/suhosin.ini et y mettons la ligne extension=suhosin.so :
vi /etc/php.d/suhosin.ini| extension=suhosin.so |
Tout ce qu’il reste à faire maintenant est de redémarrer Apache2 :
/etc/init.d/httpd restartMaintenant, appelons à nouveau notre page info.php dans un navigateur (par exemple, http://192.168.0.100/info.php). Si tout s’est bien passé, vous devriez maintenant voir Suhosin mentionné à deux endroits sur la page :


C’est tout. Si vous le souhaitez, vous pouvez configurer Suhosin (voir http://www.hardened-php.net/suhosin/configuration.html), bien que Suhosin fonctionne par défaut avec sa configuration par défaut, alors assurez-vous de savoir ce que vous faites.
5 Liens
- Suhosin : http://www.hardened-php.net/suhosin/index.html
- PHP : http://www.php.net
- CentOS : http://www.centos.org
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.