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-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
apxs2 -cia mod_chroot.cEm seguida, reiniciamos o Apache:
systemctl restart apache2.service3 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/runAgora 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
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 |
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 ../ wwwFinalmente, 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.serviceln -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/suphpserver2:/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
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- OpenSUSE: http://www.opensuse.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.