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
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
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
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"}
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 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: "
;)
Referências