PHP Security · 4 min read · Oct 25, 2025

Come indurire PHP5 con Suhosin su CentOS 5.0 - Pagina 2

4 Installazione di Suhosin

Suhosin può essere scaricato da qui: http://www.hardened-php.net/suhosin/download.html

Per installare la patch di Suhosin, dobbiamo ricompilare PHP5 dai sorgenti, ma utilizzeremo il pacchetto CentOS 5.0 PHP5.src.rpm per questo (utilizzando il comando rpmbuild), in modo da ottenere nuovi pacchetti PHP5.rpm (con Suhosin) che possiamo installare. In questo modo, non dobbiamo preoccuparci delle opzioni di configurazione corrette di PHP5 perché rpmbuild si occuperà di questo.

Ma prima prendiamo una copia della chiave di firma del rilascio del progetto Hardened-PHP e importiamola nella nostra chiave GNU Privacy Guard:

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

Poi scarichiamo un pacchetto PHP5.src.rpm (che si adatta alla nostra versione di PHP attualmente installata, 5.1.6 in questo esempio) da uno specchio CentOS 5.0 in /usr/src e lo installiamo:

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

(Come puoi vedere sopra, scarico il più recente PHP5.src.rpm dalla directory updates/ del mio specchio CentOS; ovviamente, puoi anche scaricare l’originale .src.rpm dalla directory os/, ad esempio http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm. Se lo fai, dovrai modificare i nomi dei file nel resto di questo tutorial.)

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

Se ricevi avvisi come questo:

warnings: user mockbuild does not exist - using root

puoi ignorarlo.

Successivamente scarichiamo la patch di Suhosin che si adatta alla nostra versione di PHP in /usr/src/redhat/SOURCES (puoi trovare tutte le patch disponibili nella pagina di download di Suhosin):

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

Dovremmo controllare ora che la somma MD5 della patch scaricata sia identica a quella pubblicata sulla pagina di download di Suhosin:

md5sum suhosin-patch-5.1.6-0.9.6.patch.gz

Se la somma MD5 è ok, possiamo controllare la firma digitale in questo modo:

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

Se vedi questa riga nell’output:

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

tutto va bene con la patch scaricata, e possiamo procedere.

Ora estraiamo la patch di Suhosin, rinominiamola in modo che si adatti allo schema di denominazione di CentOS e modifichiamo il file /usr/src/redhat/SPECS/php.spec in modo che il comando rpmbuild sappia che deve includere la patch di Suhosin quando ricompila 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

Aggiungi Patch0: php-5.1.6-suhosin.patch alla strofetta dove sono elencate tutte le patch e commenta la riga Patch14: php-5.1.6-ecalloc.patch nella stessa strofa (la patch ecalloc confligge con Suhosin), e poi aggiungi %patch0 -p1 -b .suhosin alla strofa %setup -q e commenta la riga %patch14 -p1 -b .ecalloc nella stessa strofa:

| [...] 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 [...] |

Ora ricompiliamo PHP5:

rpmbuild -ba php.spec

A seconda dei moduli PHP5 che hai installato, rpmbuild probabilmente si lamenterà di pacchetti mancanti di cui ha bisogno per costruire nuovi pacchetti per i vari moduli 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]#

Se vedi un errore come questo, installa i pacchetti mancanti, ad esempio in questo modo:

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

Dopo, esegui di nuovo rpmbuild:

rpmbuild -ba php.spec

Questo dovrebbe ora compilare di nuovo PHP5 e tutti i moduli PHP5 installati e creare nuovi pacchetti .rpm nella directory /usr/src/redhat/RPMS/i386. Questo può richiedere del tempo, quindi ti preghiamo di avere pazienza.

Dopo, possiamo installare i nuovi pacchetti PHP5 in questo modo:

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

Questo è tutto per la patch di Suhosin.

Ora costruiremo l’estensione PHP di Suhosin. Prima scarichiamo i suoi sorgenti nella directory /usr/src (i sorgenti dell’estensione Suhosin sono disponibili nella pagina di download di Suhosin):

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

Successivamente controlliamo di nuovo la somma MD5 e la firma:

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

Poi estraiamo i sorgenti e costruiamo l’estensione in questo modo:

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

Per abilitare l’estensione Suhosin, creiamo il file /etc/php.d/suhosin.ini e mettiamo la riga extension=suhosin.so al suo interno:

vi /etc/php.d/suhosin.ini

| extension=suhosin.so |

Tutto ciò che resta da fare ora è riavviare Apache2:

/etc/init.d/httpd restart

Ora chiamiamo di nuovo la nostra pagina info.php in un browser (ad esempio http://192.168.0.100/info.php). Se tutto è andato bene, dovresti ora vedere Suhosin menzionato in due posti sulla pagina:

Questo è tutto. Se vuoi, puoi configurare Suhosin (vedi http://www.hardened-php.net/suhosin/configuration.html), anche se Suhosin funzionerà subito con la sua configurazione predefinita, quindi assicurati di sapere cosa stai facendo.

5 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.