Apache Chroot · 3 min read · Dec 26, 2025

Chrooting Apache2 Com mod_chroot No Debian Squeeze

Chrooting Apache2 Com mod_chroot No Debian Squeeze

Versão 1.0
Autor: Falko Timme
Siga-me no Twitter

Este guia explica como configurar o mod_chroot com Apache2 em um sistema Debian Squeeze. Com o mod_chroot, você pode executar o Apache2 em um ambiente chroot seguro e tornar seu servidor menos vulnerável a tentativas de invasão que tentam explorar vulnerabilidades no Apache2 ou em suas aplicações web instaladas.

Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Estou assumindo que você tem um sistema Debian Squeeze em funcionamento com um Apache2 funcionando, por exemplo, como mostrado neste tutorial: Instalando Apache2 Com Suporte a PHP5 E MySQL No Debian Squeeze (LAMP). Além disso, assumo que você tem um ou mais sites configurados dentro do diretório /var/www (por exemplo, se você usar o ISPConfig).

2 Instalando mod_chroot

Para instalar o mod_chroot, simplesmente executamos:

apt-get install libapache2-mod-chroot

Em seguida, habilitamos o mod_chroot e reiniciamos o Apache:

a2enmod mod_chroot  
/etc/init.d/apache2 restart

3 Configurando o Apache

Quero usar o diretório /var/www como o diretório que contém a prisão chroot. O Apache do Debian usa o arquivo PID /var/run/apache2.pid; quando o Apache é chrooted para /var/www, /var/run/apache2.pid se traduz em /var/www/var/run/apache2.pid. Portanto, criamos esse diretório agora:

mkdir -p /var/www/var/run  
chown -R root:root /var/www/var/run

Agora devemos informar ao Apache que queremos usar /var/www como nosso diretório chroot. Abrimos /etc/apache2/apache2.conf e logo abaixo da linha PidFile, adicionamos uma linha ChrootDir:

vi /etc/apache2/apache2.conf

| [...] # # PidFile: O arquivo no qual o servidor deve registrar seu número # de identificação de processo quando inicia. # Isso precisa ser definido em /etc/apache2/envvars # PidFile ${APACHE_PID_FILE} ChrootDir /var/www [...] |

Em seguida, devemos informar nossos vhosts que o diretório raiz do documento mudou (por exemplo, um DocumentRoot /var/www se traduz agora em DocumentRoot /). Podemos fazer isso alterando a diretiva DocumentRoot de cada vhost, ou mais facilmente, criando um symlink no sistema de arquivos.


3.1 Primeiro Método: Mudando O DocumentRoot

Vamos supor que temos um vhost com DocumentRoot /var/www. Agora devemos abrir a configuração do vhost desse vhost e mudar DocumentRoot /var/www para DocumentRoot /. Consequentemente, DocumentRoot /var/www/web1/web agora se traduziria em DocumentRoot /web1/web, e assim por diante. Se você quiser usar este método, deve mudar o DocumentRoot para cada vhost individualmente.

3.2 Segundo Método: Criando Um Symlink No Sistema De Arquivos

Este método é mais fácil, porque você só precisa fazê-lo uma vez e não precisa modificar nenhuma configuração de vhost. Criamos um symlink apontando de /var/www/var/www para /var/www:

mkdir -p /var/www/var  
cd /var/www/var  
ln -s ../../ www

Finalmente, temos que parar o Apache, criar um symlink de /var/run/apache2.pid para /var/www/var/run/apache2.pid e iniciá-lo novamente:

/etc/init.d/apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid  
/etc/init.d/apache2 start

É isso. Agora você pode chamar suas páginas web como antes, e elas devem ser servidas sem problemas, desde que sejam arquivos HTML estáticos ou usando mod_php.

Se você estiver usando CGI, por exemplo, Perl, suPHP, Ruby, etc., então você deve copiar o interpretador (por exemplo, /usr/bin/perl, /usr/lib/suphp/suphp, etc.) para a prisão chroot junto com todas as bibliotecas necessárias pelo interpretador. Você pode descobrir sobre as bibliotecas necessárias com o comando ldd, por exemplo:

ldd /usr/lib/suphp/suphp
root@server1:~# ldd /usr/lib/suphp/suphp  
        linux-vdso.so.1 =>  (0x00007f3fdcc6e000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fdc953000)  
        libm.so.6 => /lib/libm.so.6 (0x00007f3fdc6d1000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fdc4ba000)  
        libc.so.6 => /lib/libc.so.6 (0x00007f3fdc158000)  
        /lib64/ld-linux-x86-64.so.2 (0x00007f3fdcc6f000)  
root@server1:~#

Se você copiou todos os arquivos necessários, mas a página ainda não está funcionando, deve dar uma olhada no log de erros do Apache. Geralmente, ele informa onde está o problema. Também leia http://core.segfault.pl/~hobbit/mod_chroot/caveats.html para problemas e soluções conhecidas.

4 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.