Apache Chroot · 3 min read · Jan 02, 2026
Chrooting Apache2 Con mod_chroot En Fedora 12
Chrooting Apache2 Con mod_chroot En Fedora 12
Version 1.0
Autor: Falko Timme
Sígueme en Twitter
Esta guía explica cómo configurar mod_chroot con Apache2 en un sistema Fedora 12. Con mod_chroot, puedes ejecutar Apache2 en un entorno chroot seguro y hacer que tu servidor sea menos vulnerable a intentos de intrusión que intentan explotar vulnerabilidades en Apache2 o en tus aplicaciones web instaladas.
¡No emito ninguna garantía de que esto funcione para ti!
1 Nota Preliminar
Asumo que tienes un sistema Fedora 12 en funcionamiento con un Apache2 operativo, por ejemplo, como se muestra en este tutorial: El Servidor Perfecto - Fedora 12 x86_64 [ISPConfig 2]. Además, asumo que tienes uno o más sitios web configurados dentro del directorio /var/www (por ejemplo, si usas ISPConfig).
2 Instalando mod_chroot
No hay un paquete mod_chroot para Fedora 12, por lo tanto, debemos construirlo nosotros mismos. Primero instalamos los requisitos previos:
yum groupinstall 'Development Tools'yum groupinstall 'Development Libraries'yum install httpd-develAhora construimos mod_chroot de la siguiente manera:
cd /tmp
wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz
tar xvfz mod_chroot-0.5.tar.gz
cd mod_chroot-0.5
apxs -cia mod_chroot.cLuego reiniciamos Apache:
/etc/init.d/httpd restart3 Configurando Apache
Quiero usar el directorio /var/www como el directorio que contiene la cárcel chroot. El Apache de Fedora utiliza el archivo PID /var/run/httpd/httpd.pid; cuando Apache está chrooted a /var/www, /var/run/httpd/httpd.pid se traduce a /var/www/var/run/httpd/httpd.pid. Por lo tanto, creamos ese directorio ahora:
mkdir -p /var/www/var/run/httpd
chown -R root:apache /var/www/var/run/httpdAhora debemos decirle a Apache que queremos usar /var/www como nuestro directorio chroot. Abrimos /etc/httpd/conf/httpd.conf, y justo debajo de la línea PidFile, agregamos la línea ChrootDir /var/www; también comentamos la línea PidFile run/httpd.pid y agregamos la línea PidFile /var/run/httpd/httpd.pid:
vi /etc/httpd/conf/httpd.conf| [...] # # PidFile: El archivo en el que el servidor debe registrar su número de identificación de proceso cuando se inicia. # #PidFile run/httpd.pid PidFile /var/run/httpd/httpd.pid ChrootDir /var/www [...] |
A continuación, debemos decirle a nuestros vhosts que la raíz del documento ha cambiado (por ejemplo, un DocumentRoot /var/www se traduce ahora a DocumentRoot /). Podemos hacer esto ya sea cambiando la directiva DocumentRoot de cada vhost, o más fácil, creando un symlink en el sistema de archivos.
3.1 Primer Método: Cambiando El DocumentRoot
Supongamos que tenemos un vhost con DocumentRoot /var/www. Ahora debemos abrir la configuración del vhost de ese vhost y cambiar DocumentRoot /var/www a DocumentRoot /. En consecuencia, DocumentRoot /var/www/web1/web ahora se traduciría a DocumentRoot /web1/web, y así sucesivamente. Si deseas usar este método, debes cambiar el DocumentRoot para cada vhost individual.
3.2 Segundo Método: Creando Un Symlink En El Sistema De Archivos
Este método es más fácil, porque solo tienes que hacerlo una vez y no tienes que modificar ninguna configuración de vhost. Creamos un symlink que apunte de /var/www/var/www a /var/www:
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ wwwFinalmente, debemos detener Apache, eliminar el directorio /var/run/httpd, crear un symlink de /var/run/httpd a /var/www/var/run/httpd, y volver a iniciarlo:
/etc/init.d/httpd stoprm -fr /var/run/httpd
ln -sf /var/www/var/run/httpd /var/run/httpd
/etc/init.d/httpd startEso es todo. Ahora puedes llamar a tus páginas web como antes, y deberían servirse sin problemas, siempre que sean archivos HTML estáticos o usen mod_php.

Si estás usando CGI, por ejemplo, Perl, suPHP, Ruby, etc., entonces debes copiar el intérprete (por ejemplo, /usr/bin/perl, /usr/sbin/suphp, etc.) a la cárcel chroot junto con todas las bibliotecas necesarias por el intérprete. Puedes averiguar sobre las bibliotecas requeridas con el comando ldd, por ejemplo:
ldd /usr/sbin/suphp[server2:/var/www/web1/log]# ldd /usr/sbin/suphp
linux-gate.so.1 => (0xffffe000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)
/lib/ld-linux.so.2 (0xb7f23000)
[server2:/var/www/web1/log]#Si has copiado todos los archivos requeridos, pero la página aún no funciona, deberías echar un vistazo al registro de errores de Apache. Por lo general, te dice dónde está el problema. También lee http://core.segfault.pl/~hobbit/mod_chroot/caveats.html para problemas y soluciones conocidos.
4 Enlaces
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- Fedora: http://fedoraproject.org/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.