Remover Suhosin del PHP5

Sin votos aún

Se deshabilita el parche Suhosin para un para un servidor con alto tráfico donde el parche estaba generando problemas al matar el thread (hilo) de Apache cuando detectaba un posible desbordamiento del "buffer". 

Cuando se mata thread corta la conexión del usuario con el equipo (interrumpe la descarga de los usuarios).  Los usuarios recargaban la página y volvían a disparar el proceso.  Con el tiempo esto llevaba a la disminución de hilos del proceso disponibles.  El Apache creaba nuevos pero en los momentos de alto tráfico esto generaba un aumento en la carga del servidor superior al que podía procesar.

Ese equipo recibe sobre el apache unos 50 accesos  por segundo en los momentos de mayor carga (por día unas 400.000 páginas vistas).

Procedimiento:

La prima actividad que se debe realizar es actualizar la información de las librerías de software disponibles y actualizar el equipo.

< sudo apt-get update
< sudo apt-get upgrade

A continuación se instalan las herramientas necesarias para poder compilar las fuentes de php

< sudo apt-get install devscripts liburi-perl build-essential shtool

posteriormente se descarga el paquete fuente del php5 y las dependencias para poder  compilarlo

< cd /usr/src/
< sudo apt-get source php5
< sudo apt-get build-dep php5
> Reading package lists... Done
> Building dependency tree      
> Reading state information... Done
> The following NEW packages will be installed:
>   apache2-prefork-dev autoconf automake1.4 autotools-dev bison chrpath comerr-dev
> debhelper diffstat flex fontconfig freetds-dev gettext html2text intltool-debian
> libapr1-dev libaprutil1-dev libaspell-dev libaspell15 libaudio2 libbz2-dev libct3
> libcurl3 libcurl4-openssl-dev libdb-dev libdb4.6-dev libedit-dev libexpat1-dev
> libfontconfig1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libglib2.0-0
> libgmp3-dev libgmp3c2 libgmpxx4ldbl libgpg-error-dev libice-dev libice6 libidn11-dev
> libjpeg62-dev libkadm55 libkrb5-dev liblcms1 libldap2-dev libltdl3 libltdl3-dev
> libmhash-dev libmhash2 libmng1 libmysqlclient15-dev libncurses5-dev libodbcinstq1c2
> libpam0g-dev libpcre3-dev libpcrecpp0 libperl5.8 libpng12-dev libpq-dev libpspell-dev
> libpthread-stubs0 libpthread-stubs0-dev libqt3-mt librecode-dev librecode0
> libsasl2-dev libsensors-dev libsensors3 libsm-dev libsm6 libsnmp-base libsnmp-dev
> libsnmp-perl libsnmp15 libsqlite0 libsqlite0-dev libsqlite3-dev libssl-dev libsybdb5
> libt1-dev libtidy-0.99-0 libtidy-dev libtool libwrap0-dev libx11-dev libxau-dev
> libxaw-headers libxaw7 libxaw7-dev libxcb-xlib0-dev libxcb1-dev libxcursor1
> libxdmcp-dev libxext-dev libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxml2-dev
> libxmltok1 libxmltok1-dev libxmu-dev libxmu-headers libxmu6 libxpm-dev libxrandr2
> libxrender1 libxslt1-dev libxslt1.1 libxt-dev libxt6 m4 odbcinst1debian1 pkg-config
> po-debconf quilt re2c unixodbc unixodbc-dev uuid-dev x11proto-core-dev
> x11proto-input-dev x11proto-kb-dev x11proto-xext-dev xtrans-dev zlib1g-dev
> 0 upgraded, 127 newly installed, 0 to remove and 0 not upgraded.
> Need to get 9115kB/47.0MB of archives.
> After this operation, 144MB of additional disk space will be used.
> Do you want to continue [Y/n]?

Finalizada la descarga e instalación de paquetes, se debe ingresar al directorio donde están las fuentes de php5

< cd php5-5.2.4/

Para remover el parche se debe remober el archivo con la definición del parche

< sudo rm debian/patches/suhosin.patch

y editar el archivo donde se define la secuencia y parches a aplicar para remover la línea "suhosin.patch"

< sudo vi debian/patches/series

Finalizada la edición se debe definir el nombre del cambio de versión.

< sudo debchange -v 5.2.4-2ubuntu6-sismo-01

El último paso es contruir los .deb para instalar en el sistema.

< sudo debuild

Sobre el final aparecerá un error porque no estan las firmas digitales disponibles para firmar los paquetes (no es necesario tener los paquetes firmados).

Los .deb se encuentran en el "/usr/src", ahí se encuentran los .deb del php5 y relacionados.  No es necesario instalar TODOS los paquetes generados, por lo general solo se necesitan/instalan php-pear, php5-gd, php5-common, php5-mysql, php5-cli, php5-cgi, php5-curl, libapache2-mod-php5.

< sudo dpkg -i \
     php-pear_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_all.deb     \
     php5-gd_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb    \
     php5-common_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb \
php5-mysql_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb \
php5-cli_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb \
php5-cgi_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb \
php5-curl_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb \
libapache2-mod-php5_5.2.10.dfsg.1-2ubuntu6.4-sismo-01_i386.deb

Finalizada la instalación se debe reiniciar el apache para que tome los cambios.

< sudo /etc/init.d/apache2 restart

Si se compilaron módulos de php en forma previa a la instalación de estos binarios, deben ser recompilados para que puedan ser ejecutados.