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.asc

Ensuite, 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.rpm

Si vous obtenez des avertissements comme celui-ci :

warning: user mockbuild does not exist - using root

vous 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.gz

Nous 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.gz

Si 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.sig

Si 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.spec

Ajoutez 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.spec

En 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-devel

Ensuite, exécutez à nouveau rpmbuild :

rpmbuild -ba php.spec

Cela 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.tgz

Ensuite, nous vérifions à nouveau la somme MD5 et la signature :

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

Puis 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 install

Pour 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 restart

Maintenant, 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

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.