Servidor Apache · 3 min read · Jan 02, 2026
Chrooting Apache2 Com mod_chroot No Fedora 12
Chrooting Apache2 Com mod_chroot No Fedora 12
Versão 1.0
Autor: Falko Timme
Siga-me no Twitter
Este guia explica como configurar o mod_chroot com Apache2 em um sistema Fedora 12. 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 Fedora 12 em funcionamento com um Apache2 funcionando, por exemplo, como mostrado neste tutorial: O Servidor Perfeito - Fedora 12 x86_64 [ISPConfig 2]. 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
Não há pacote mod_chroot para Fedora 12, portanto, devemos construí-lo nós mesmos. Primeiro, instalamos os pré-requisitos:
yum groupinstall 'Development Tools'yum groupinstall 'Development Libraries'yum install httpd-develAgora construímos o mod_chroot da seguinte forma:
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.cEntão reiniciamos o Apache:
/etc/init.d/httpd restart3 Configurando o Apache
Quero usar o diretório /var/www como o diretório que contém a jaula chroot. O Apache do Fedora usa o arquivo PID /var/run/httpd/httpd.pid; quando o Apache está chrooted para /var/www, /var/run/httpd/httpd.pid se traduz em /var/www/var/run/httpd/httpd.pid. Portanto, criamos esse diretório agora:
mkdir -p /var/www/var/run/httpd
chown -R root:apache /var/www/var/run/httpdAgora devemos informar ao Apache que queremos usar /var/www como nosso diretório chroot. Abrimos /etc/httpd/conf/httpd.conf e logo abaixo da linha PidFile, adicionamos a linha ChrootDir /var/www; também comentamos a linha PidFile run/httpd.pid e adicionamos a linha PidFile /var/run/httpd/httpd.pid:
vi /etc/httpd/conf/httpd.conf| [...] # # PidFile: O arquivo no qual o servidor deve registrar seu número # de identificação de processo quando inicia. # #PidFile run/httpd.pid PidFile /var/run/httpd/httpd.pid ChrootDir /var/www [...] |
Em seguida, devemos informar nossos vhosts que a raiz do documento mudou (por exemplo, um DocumentRoot /var/www se traduz agora em DocumentRoot /). Podemos fazer isso mudando 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 ../../ wwwFinalmente, precisamos parar o Apache, excluir o diretório /var/run/httpd, criar um symlink de /var/run/httpd para /var/www/var/run/httpd e iniciá-lo novamente:
/etc/init.d/httpd stoprm -fr /var/run/httpd
ln -sf /var/www/var/run/httpd /var/run/httpd
/etc/init.d/httpd startÉ isso. Agora você pode acessar 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/sbin/suphp, etc.) para a jaula 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/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]#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. Normalmente, 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
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- Fedora: http://fedoraproject.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.