Introdução
Chroot permite encapsular o serviço dentro de uma jaula, de forma isolado do sistema operacional.Este tutorial trás algumas atualizações referente ao anterior Brito: Debian + chroot + apache2 devido a mudanças de versões no Apache2, e pacotes fornecidos para Debian jessie.
Escopo
- Debian-8.0.0 (Jessie)
- Apache-2.4.10
- mod-chroot-0.5
Apache-2.4
O apache sofreu atualização em estrutura e agora apresenta novos comandos. Os comandos atuais disponíveis em apache2 são: a2enmod, a2dismod, a2ensite, a2dissite, a2enconf e a2disconf.Abaixo o diagrama da nova estrutura.
/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled | `-- *.conf |-- sites-enabled | `-- *.conf
mod-chroot-0.5
No Debian jessie o libapache2-mod-chroot não esta disponível ainda no repositório, faz-se necessário a instalação manual.Instalação
Considerando que o Debian-8.0.0(jessie) esteja perfeitamente instalado e configurado com conexões de rede, proceda com os passos a seguir.Pré-dependências
# aptitude install vim openssh-server build-essential lynx elinks
instalação apache2
# aptitude install libapache2-mod-security2 apache2-mpm-prefork apache2-threaded-dev
Bibliotecas
- ln -sv /lib/x86_64-linux-gnu/{libgcc_s.so.1,libnss_dns.so.2} /lib
- ldconfig -n /lib/
- ldconfig -n /lib/x86_64-linux-gnu/
instalação mod_chroot
- wget -c http://http.debian.net/debian/pool/main/liba/libapache-mod-chroot/libapache-mod-chroot_0.5.orig.tar.gz http://http.debian.net/debian/pool/main/liba/libapache-mod-chroot/libapache-mod-chroot_0.5-7.dsc http://http.debian.net/debian/pool/main/liba/libapache-mod-chroot/libapache-mod-chroot_0.5-7.diff.gz
- tar xvzf libapache-mod-chroot_0.5.orig.tar.gz -C /usr/src/
- gunzip libapache-mod-chroot_0.5-7.diff.gz
- cd /usr/src/mod_chroot-0.5/
- patch -p1 < ~/libapache-mod-chroot_0.5-7.diff
- apxs2 -cia mod_chroot.c
Este comando deixa o modulo /usr/lib/apache2/modules/mod_chroot.so disponivel para o apache2 e cria o arquivo para ativação do módulo /etc/apache2/mods-available/chroot.load.
Ativar bibliotecas x64
ldconfig -n /usr/lib/apache2/modules
Ativar o chroot
- a2enmod chroot
- service apache2 restart
Configurar a jaula
O encapsulamento do apache agora será possível. A base para o encapsulamento será o diretório/opt
. Então proceda com as configurações abaixo.
Diretórios Principais
mkdir -pv /opt/{chroot/apache2,vm}
Disco virtual
- dd if=/dev/zero of=/opt/vm/jaulaApache.img bs=1k seek=100k count=1;
- mkfs.ext4 /opt/vm/jaulaApache.img
- mount -o loop,noexec,nodev,nosuid -t ext4 /opt/vm/jaulaApache.img /opt/chroot/apache2/
Montagem para acesso ao Disco virtual
- mount -o loop,noexec,nodev,nosuid -t ext4 /opt/vm/jaulaApache.img /opt/chroot/apache2/
loop: para o disco virtual se comportar como um disco físico;
noexec: nega a execução de programas no volume;
nodev: nega a compulação de programas no volume;
nosuid: nega a execução como root no volume;
Mapear o Disco virtual
No arquivo /etc/fstab, acrescente o trecho abaixo:
- /opt/vm/jaulaApache.img /opt/chroot/apache2 ext4 loop,noexec,nodev,nosuid 0 0
Confirmar a montagem Disco virtual
#mount [..] /opt/vm/jaulaApache.img on /opt/chroot/apache2 type ext4 (rw,nosuid,nodev,noexec,relatime,data=ordered)
Diretórios necessários
- mkdir -pv /opt/chroot/apache2/{var/run/apache2,opt/chroot/apache2/var/www/html}
- cp --parent -var /usr/share/apache2/{error,icons} /opt/chroot/apache2/opt/chroot/apache2/
Ativar chroot no apache-2.4.10
- Crie o arquivo /etc/apache2/conf-available/chroot.conf, com uma das configurações abaixo:
#Debian_x32 <IfModule mod_chroot.c> LoadFile /lib/libgcc_s.so.1 LoadFile /lib/libnss_dns.so.2 ChrootDir /opt/chroot/apache2 PidFile /var/run/apache2/apache2.pid </IfModule>ou#Debian_x64 <IfModule mod_chroot.c> LoadFile /lib/x86_64-linux-gnu/libgcc_s.so.1 LoadFile /lib/x86_64-linux-gnu/libnss_dns.so.2 ChrootDir /opt/chroot/apache2 PidFile /var/run/apache2/apache2.pid </IfModule>- a2enconf chroot
- service apache2 reload
Troubleshooting
- No such file or directory: AH02159: Can't chdir to /opt/chroot/apache2
mkdir -pv /opt/chroot/apache2/opt/chroot/apache2
- child pid 10990 exit signal Aborted (6) libgcc_s.so.1 must be installed for pthread_cancel to work
Carregue os modulos
<IfModule mod_chroot.c> LoadFile /lib/x86_64-linux-gnu/libgcc_s.so.1 LoadFile /lib/x86_64-linux-gnu/libnss_dns.so.2 ChrootDir /opt/chroot/apache2 PidFile /var/run/apache2/apache2.pid </IfModule>
- child pid 10990 exit signal Aborted (6)libnss_dns.so.2 must be installed for pthread_cancel to work
Carregue os modulos
<IfModule mod_chroot.c> LoadFile /lib/x86_64-linux-gnu/libgcc_s.so.1 LoadFile /lib/x86_64-linux-gnu/libnss_dns.so.2 ChrootDir /opt/chroot/apache2 PidFile /var/run/apache2/apache2.pid </IfModule>
- Child 0000 returned a Fatal error... Apache is exiting!
ln -sv /lib/x86_64-linux-gnu/{libgcc_s.so.1,libnss_dns.so.2} /lib
- Failed to start LSB: Apache2 web server
ln -sv /lib/x86_64-linux-gnu/{libgcc_s.so.1,libnss_dns.so.2} /lib
- AH01630: client denied by server configuration: /var
mkdir -pv /opt/chroot/apache2/var/
- apache2: could not log pid to file /var/run/apache2/apache2.pid
mkdir -pv /opt/chroot/apache2/var/run/apache2
- client denied by server configuration: /var
mkdir -pv /opt/chroot/apache2/opt/chroot/apache2/var/www/html
Referências
http://brito.blog.incolume.com.br/2012/06/debian-chroot-apache2.htmlhttps://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-apache-env.pt-br.html
https://packages.debian.org/squeeze/httpd/libapache2-mod-chroot
https://packages.debian.org/source/squeeze/libapache-mod-chroot
Comentários