Apache Chroot · 3 min read · Dec 30, 2025

Chrooting Apache2 Com mod_chroot No OpenSUSE 12.2

Chrooting Apache2 Com mod_chroot No OpenSUSE 12.2

Version 1.0
Autor: Falko Timme
Siga-me no Twitter

Este guia explica como configurar o mod_chroot com Apache2 em um sistema OpenSUSE 12.2. 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 OpenSUSE 12.2 em funcionamento com um Apache2 funcionando. Além disso, assumo que você tem um ou mais sites configurados dentro do diretório /srv/www (por exemplo, se você usar o ISPConfig).

2 Instalando o mod_chroot

Não há pacote mod_chroot para OpenSUSE 12.2, portanto, devemos construí-lo nós mesmos. Primeiro, instalamos os pré-requisitos:

zypper install libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim apache2-devel

Agora 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  
apxs2 -cia mod_chroot.c

Em seguida, reiniciamos o Apache:

systemctl restart apache2.service

3 Configurando o Apache

Quero usar o diretório /srv/www como o diretório que contém a jaula chroot. O Apache do OpenSUSE usa o arquivo PID /var/run/httpd2.pid; quando o Apache está chrooted para /srv/www, /var/run/httpd2.pid se traduz em /srv/www/var/run/httpd2.pid. Portanto, criamos esse diretório agora:

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

Agora devemos informar ao Apache que queremos usar /srv/www como nosso diretório chroot. Abrimos /etc/apache2/httpd.conf, e logo abaixo da linha Include /etc/apache2/sysconfig.d/loadmodule.conf, adicionamos a linha ChrootDir /srv/www; na estrofe , comentamos a linha Options None e adicionamos a linha Options +FollowSymLinks:

vi /etc/apache2/httpd.conf

| [...] # gerado a partir de APACHE_MODULES em /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # proibir acesso a todo o sistema de arquivos por padrão #Options None Options +FollowSymLinks AllowOverride None Order deny,allow Deny from all [...] |

Em seguida, devemos informar nossos vhosts que a raiz do documento mudou (por exemplo, um DocumentRoot /srv/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 /srv/www. Agora devemos abrir a configuração do vhost e mudar DocumentRoot /srv/www para DocumentRoot /. Consequentemente, DocumentRoot /srv/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.

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 /srv/www/srv/www para /srv/www:

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

Finalmente, devemos parar o Apache, criar um symlink de /var/run/httpd2.pid para /srv/www/var/run/httpd2.pid, e iniciá-lo novamente:

systemctl stop apache2.service
ln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid  
systemctl start apache2.service

É 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/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 conhecidos e soluções.

4 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.