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.ascPoi 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.rpmSe ricevi avvisi come questo:
warnings: user mockbuild does not exist - using rootpuoi 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.gzDovremmo 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.gzSe 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.sigSe 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.specAggiungi 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.specA 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-develDopo, esegui di nuovo rpmbuild:
rpmbuild -ba php.specQuesto 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.tgzSuccessivamente controlliamo di nuovo la somma MD5 e la firma:
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.sigPoi 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 installPer 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 restartOra 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
- Suhosin: http://www.hardened-php.net/suhosin/index.html
- PHP: http://www.php.net
- CentOS: http://www.centos.org
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.