Encapsulamento de Apache com chroot
E o chroot é um módulo para o apache, que possibilita a execução do apache em um ambiente encapsulado e seguro.
Parte 2: Configurando apache e Referências
Configurando apache + mod_chroot
Crie os diretórios "conf.d" e "vhosts", no diretório do Apache, que dependendo da instalação é "/etc/httpd" ou "/etc/apache2".# mkdir -pv [APACHE_DIR]/{conf.d,vhosts};
Crie os arquivos de configuração para o mod_chroot:
Para ambos (Debian-like e RedHat-like) em "/etc/apache2/conf.d/" ou "/etc/httpd/conf.d/"
# ./conf.d/vhosts.conf
#
# Load config files from the config directory to virtual hosts.
#
Include vhosts/*.conf
#
# Load config files from the config directory to virtual hosts.
#
Include vhosts/*.conf
Para RedHat-like em "/etc/httpd/conf.d/":
#./conf.d/httpdjail.conf
LoadModule chroot_module modules/mod_chroot.so
LockFile /var/run/httpd.lock
CoreDumpDirectory /var/run
ScoreBoardFile /var/run/httpd.scoreboard
PidFile /var/run/httpd.pid
ChrootDir /httpdjail
LoadModule chroot_module modules/mod_chroot.so
LockFile /var/run/httpd.lock
CoreDumpDirectory /var/run
ScoreBoardFile /var/run/httpd.scoreboard
PidFile /var/run/httpd.pid
ChrootDir /httpdjail
Para Debian-like em "/etc/apache2/conf.d/":
#./conf.d/httpdjail.conf
LoadModule chroot_module modules/mod_chroot.so
LockFile /var/run/apache2.lock
CoreDumpDirectory /var/run
ScoreBoardFile /var/run/apache2.scoreboard
PidFile /var/run/apache2.pid
ChrootDir /httpdjail
LoadModule chroot_module modules/mod_chroot.so
LockFile /var/run/apache2.lock
CoreDumpDirectory /var/run
ScoreBoardFile /var/run/apache2.scoreboard
PidFile /var/run/apache2.pid
ChrootDir /httpdjail
A partir deste ponto o Apache já funcionará dentro do envolucro protegido. Entretanto completamente isolado do sistema operacional hospedeiro. Para ter algumas funcionalidades habilitadas faz-se necessário copiar os arquivos necessário para a jaula de encapsulamento.
Segue alguns dos arquivos necessários:
idiomas:
# cp -vap --parents /usr/lib/locale/{en,es,pt}* /httpdjail;
# cp -vap --parents /usr/share/locale/{en,es,pt}* /httpdjail;
# cp -vap --parents /etc/{mime.types,passwd} /httpdjail;
Arquivos compartilhados:
# cp -vap --parents /usr/share/apache2/ /httpdjail/
Configuração final
# ln -vs /httpdjail/var/run/httpd.pid /var/run/httpd.pid;# cp -vap --parents /etc/apache2 /httpdjail;
# mv /etc/apache2 /etc/apache2.orig
# ln -vs /httpdjail/etc/apache2 /etc/apache2;
# ln -vs /usr/lib/apache2/modules/ /httpdjail/etc/apache2
# cd /httpdjail && ln -s . httpdjail;
Esta é somente para RedHat-like, no arquivo "/etc/init.d/httpd", faça uma cópia de segurança:
# cp -ap /etc/init.d/httpd /etc/init.d/httpd.original
No inicio do arquivo "/etc/init.d/httpd" insira:
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
ROOT=/httpdjail
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
. /etc/sysconfig/httpd
fi
ROOT=/httpdjail
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
E acrescente o link para o pid, na function stop:
stop() {
[ ! -e /var/run/httpd.pid ] && /bin/ln -s $ROOT/var/run/httpd.pid /var/run/httpd.pid
echo -n $"Stopping $prog: "
[ ! -e /var/run/httpd.pid ] && /bin/ln -s $ROOT/var/run/httpd.pid /var/run/httpd.pid
echo -n $"Stopping $prog: "
E também, na function reload:
reload() {
[ ! -e /var/run/httpd.pid ] && /bin/ln -s $ROOT/var/run/httpd.pid /var/run/httpd.pid
echo -n $"Reloading $prog: "
[ ! -e /var/run/httpd.pid ] && /bin/ln -s $ROOT/var/run/httpd.pid /var/run/httpd.pid
echo -n $"Reloading $prog: "
;)
Referências
- http://core.segfault.pl/~hobbit/mod_chroot
- http://httpd.apache.org
- http://www.debian.org
- https://wiki.ubuntu.com/ModChroot
- http://www.howtoforge.com/chrooting-apache2-mod-chroot-debian-etch
- http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-apache-env.en.html
- http://core.segfault.pl/~hobbit/mod_chroot/
- http://www.cyberciti.biz/tips/chroot-apache-under-rhel-fedora-centos-linux.html
Isso sim que é um artigo bacana. Eu não cheguei a testar mas parabéns pela iniciativa.