Debian-8.0.0 (jessie) + apache-2.4.10 + chroot-0.5

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.html
https://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