PHP Seguridad · 4 min read · Oct 25, 2025
Cómo endurecer PHP5 con Suhosin en CentOS 5.0 - Página 2
4 Instalando Suhosin
Suhosin se puede descargar desde aquí: http://www.hardened-php.net/suhosin/download.html
Para instalar el parche Suhosin, necesitamos recompilar PHP5 desde las fuentes, pero utilizaremos el paquete CentOS 5.0 PHP5.src.rpm para esto (usando el comando rpmbuild), de modo que obtengamos nuevos paquetes PHP5.rpm (con Suhosin) que podemos instalar. De esa manera, no tenemos que preocuparnos por las opciones de configuración correctas de PHP5 porque rpmbuild se encargará de esto.
Pero primero tomamos una copia de la clave de firma de lanzamiento del Proyecto Hardened-PHP e importamos en nuestro llavero de GNU Privacy Guard:
wget http://www.hardened-php.net/hardened-php-signature-key.asc
gpg --import < hardened-php-signature-key.ascLuego descargamos un paquete PHP5.src.rpm (que se ajuste a nuestra versión de PHP instalada actualmente, 5.1.6 en este ejemplo) de un espejo de CentOS 5.0 a /usr/src e instalamos:
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(Como ves arriba, descargo el PHP5.src.rpm más nuevo del directorio updates/ de mi espejo de CentOS; por supuesto, también puedes descargar el original.src.rpm del directorio os/, por ejemplo http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.0/os/SRPMS/php-5.1.6-5.el5.src.rpm. Si lo haces, tendrás que ajustar los nombres de archivo en el resto de este tutorial.)
rpm -ivh php-5.1.6-12.el5.src.rpmSi recibes advertencias como esta:
warning: user mockbuild does not exist - using rootpuedes ignorarla.
A continuación, descargamos el parche Suhosin que se ajuste a nuestra versión de PHP en /usr/src/redhat/SOURCES (puedes encontrar todos los parches disponibles en la página de descargas de Suhosin):
cd /usr/src/redhat/SOURCES
wget http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.1.6-0.9.6.patch.gzAhora deberíamos comprobar que la suma MD5 del parche descargado es idéntica a la publicada en la página de descargas de Suhosin:
md5sum suhosin-patch-5.1.6-0.9.6.patch.gzSi la suma MD5 está bien, podemos verificar la firma digital así:
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 ves esta línea en la salida:
gpg: Good signature from "Hardened-PHP Signature Key"todo está bien con el parche descargado, y podemos continuar.
Ahora descomprimimos el parche Suhosin, lo renombramos para que se ajuste al esquema de nombres de CentOS, y modificamos el archivo /usr/src/redhat/SPECS/php.spec para que el comando rpmbuild sepa que debe incluir el parche Suhosin cuando recompila 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.specAgrega Patch0: php-5.1.6-suhosin.patch a la estrofa donde se enumeran todos los parches y comenta la línea Patch14: php-5.1.6-ecalloc.patch en la misma estrofa (el parche ecalloc entra en conflicto con Suhosin), y luego agrega %patch0 -p1 -b .suhosin a la estrofa %setup -q y comenta la línea %patch14 -p1 -b .ecalloc en la misma estrofa:
| [...] 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 [...] |
Ahora recompilamos PHP5:
rpmbuild -ba php.specDependiendo de qué módulos de PHP5 tengas instalados, rpmbuild probablemente se quejará de paquetes faltantes que necesita para construir nuevos paquetes para los varios módulos de 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 ves un error como este, instala los paquetes faltantes, por ejemplo así:
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-develDespués, ejecuta rpmbuild nuevamente:
rpmbuild -ba php.specEsto debería compilar PHP5 y todos los módulos de PHP5 instalados nuevamente y crear nuevos paquetes .rpm en el directorio /usr/src/redhat/RPMS/i386. Esto puede tardar un tiempo, así que por favor ten paciencia.
Después, podemos instalar los nuevos paquetes PHP5 así:
cd /usr/src/redhat/RPMS/i386
rpm -Uvh --force php-*Eso es todo para el parche Suhosin.
Ahora vamos a construir la extensión PHP de Suhosin. Primero descargamos sus fuentes al directorio /usr/src (las fuentes de la extensión Suhosin están disponibles en la página de descargas de Suhosin):
cd /usr/src
wget http://www.hardened-php.net/suhosin/_media/suhosin-0.9.20.tgzA continuación, comprobamos la suma MD5 y la firma nuevamente:
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.sigLuego descomprimimos las fuentes y construimos la extensión así:
tar xvfz suhosin-0.9.20.tgz
cd suhosin-0.9.20
phpize
./configure
make
make installPara habilitar la extensión Suhosin, creamos el archivo /etc/php.d/suhosin.ini y ponemos la línea extension=suhosin.so en él:
vi /etc/php.d/suhosin.ini| extension=suhosin.so |
Todo lo que queda por hacer ahora es reiniciar Apache2:
/etc/init.d/httpd restartAhora llamemos nuevamente a nuestra página info.php en un navegador (por ejemplo, http://192.168.0.100/info.php). Si todo salió bien, deberías ver a Suhosin mencionado en dos lugares en la página:


Eso es todo. Si lo deseas, puedes configurar Suhosin (ver http://www.hardened-php.net/suhosin/configuration.html), aunque Suhosin funcionará directamente con su configuración predeterminada, así que asegúrate de saber lo que estás haciendo.
5 Enlaces
- Suhosin: http://www.hardened-php.net/suhosin/index.html
- PHP: http://www.php.net
- CentOS: http://www.centos.org
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.