[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ próximo ]
chroot
para Apache
O utilitário chroot
é muitas vezes usado para enjaular um daemon
dentro de uma estrutura restrita. Voce pode usá-lo para isolar um serviço do
outro, desta forma um problema de segurança em um pacote de software específico
não interfere em todo o servidor. A utilização do script makejail
torna a configuração e atualização da árvore enjaulada muito mais fácil.
FIXME: Apache também pode ser enjaulado usando http://www.modsecurity.org
que
está disponível em libapache-mod-security
(para Apache 1.x) e
libapache2-mod-security
(para Apache 2.x).
This document is copyright 2002 Alexandre Ratti. It has been dual-licensed and
released under the GPL version 2 (GNU Public License) the GNU-FDL 1.2 (GNU Free
Documentation Licence) and is included in this manual with his explicit
permission. (from the original
document
)
Este procedimento foi testado no Debian GNU/Linux 3.0 (Woody) com
makejail
0.0.4-1 (em Debian/testing).
Efetue o login como root
e crie um novo diretório para jaula:
$ mkdir -p /var/chroot/apache
Crie um novo usuário e novo grupo. O servidor Apache enjaulado irá executar
com este usuário/grupo, que não é utilizado para mais nada no sistema. Neste
exemplo, ambos usuário e grupo são chamados de chrapach
.
$ adduser --home /var/chroot/apache --shell /bin/false \ --no-create-home --system --group chrapach
FIXME: é preciso um novo usuário? (Apache já executa como usuário apache)
Instale o Apache normalmente no Debian: apt-get install apache
Configure o Apache (por exemplo defina seus subdomínios e etc.). No arquivo de
configuração /etc/apache/httpd.conf
, altere as opções
Group e User para chrapach. Reinicie o Apache e
tenha certeza que o servidor está funcionando corretamente. Agora, pare o
daemon do Apache.
Instale o makejail
(disponível agora no Debian/testing). Você
também deve instalar wget
e lynx
, pois eles serão
usados pelo makejail
para testar o servidor enjaulado:
apt-get install makejail wget lynx
Copie o arquivo de configuração de exemplo para o Apache para o diretório
/etc/makejail
:
# cp /usr/share/doc/makejail/examples/apache.py /etc/makejail/
Edite o arquivo /etc/makejail/apache.py
. Você precisa alterar as
opções chroot, users e groups. Para executar esta
versão do makejail
, você também pode adicionar a opção
packages
. Veja a documentação do
makejail
. Veja o exemplo mostrado abaixo:
chroot="/var/chroot/apache" testCommandsInsideJail=["/usr/sbin/apachectl start"] processNames=["apache"] testCommandsOutsideJail=["wget -r --spider http://localhost/", "lynx --source https://localhost/"] preserve=["/var/www", "/var/log/apache", "/dev/log"] users=["chrapach"] groups=["chrapach"] packages=["apache", "apache-common"] userFiles=["/etc/password", "/etc/shadow"] groupFiles=["/etc/group", "/etc/gshadow"] forceCopy=["/etc/hosts", "/etc/mime.types"]
FIXME: algumas opções parecem não funcionar corretamente. Por
exemplo, /etc/shadow
e /etc/gshadow
não são copiados,
visto que /etc/password
e /etc/group
são copiados em
vez de serem filtrados.
Crie a árvore da jaula: makejail /etc/makejail/apache.py
Se /etc/password
e /etc/group
forem copiados
completamente, digite:
$ grep chrapach /etc/passwd > /var/chroot/apache/etc/passwd $ grep chrapach /etc/group > /var/chroot/apache/etc/group
para substituí-los com as cópias filtradas.
Copie as páginas e os logs do site Web dentro da jaula. Estes arquivos não são
copiados automaticamente (veja a opção preserve no arquivo de
configuração do makejail
).
# cp -Rp /var/www /var/chroot/apache/var # cp -Rp /var/log/apache/*.log /var/chroot/apache/var/log/apache
Edite o script de inicialização para que o daemon de logging do sistema também
ouça do socket /var/chroot/apache/dev/log
. No arquivo
/etc/init.d/sysklogd
, substitua: SYSLOGD=""
com SYSLOGD=" -a /var/chroot/apache/dev/log" e reinicie
o daemon (/etc/init.d/sysklogd restart).
Edite o script de inicialização do Apache (/etc/init.d/apache
).
Você pode precisar fazer algumas alterações no script de inicialização padrão
para que ele funcione apropriadamente com a árvore enjaulada. Como:
configure uma nova variável CHRDIR no início do arquivo;
edite as seções start, stop, reload, etc.;
adicione uma linha para montar e desmontar o sistema de arquivo
/proc
que está dentro da jaula.
#! /bin/bash # # apache Start the apache HTTP server. # CHRDIR=/var/chroot/apache NAME=apache PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/apache SUEXEC=/usr/lib/apache/suexec PIDFILE=/var/run/$NAME.pid CONF=/etc/apache/httpd.conf APACHECTL=/usr/sbin/apachectl trap "" 1 export LANG=C export PATH test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0 # ensure we don't leak environment vars into apachectl APACHECTL="env -i LANG=${LANG} PATH=${PATH} chroot $CHRDIR $APACHECTL" if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF then exit 0 fi case "$1" in start) echo -n "Starting web server: $NAME" mount -t proc proc /var/chroot/apache/proc start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON \ --chroot $CHRDIR ;; stop) echo -n "Stopping web server: $NAME" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo umount /var/chroot/apache/proc ;; reload) echo -n "Reloading $NAME configuration" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" \ --signal USR1 --startas $DAEMON --chroot $CHRDIR ;; reload-modules) echo -n "Reloading $NAME modules" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo \ --retry 30 start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON --chroot $CHRDIR ;; restart) $0 reload-modules exit $? ;; force-reload) $0 reload-modules exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac if [ $? == 0 ]; then echo . exit 0 else echo failed exit 1 fi
FIXME: should the first Apache process be run as another user than root (i.e. add --chuid chrapach:chrapach)? Cons: chrapach will need write access to the logs, which is awkward.
Substitua no /etc/logrotate.d/apache
o
/var/log/apache/*.log com
/var/chroot/apache/var/log/apache/*.log
Inicialize o Apache (/etc/init.d/apache start
) e verifique o que
está sendo reportado no log da jaula
(/var/chroot/apache/var/log/apache/error.log
). Se a sua
configuração for mais complexa (exemplo: se também utiliza PHP e MySQL), alguns
arquivos provavelmente estarão faltando. Se estes arquivos não são copiados
automaticamente pelo makejail
, você pode listá-los com a opção
forceCopy (para copiar os arquivos diretamente) ou packages
(para copiar pacotes completos e suas dependências) no arquivo de configuração
/etc/makejail/apache.py
.
Digite ps aux | grep apache para ter certeza que o Apache está rodando. Você deve ver algo do tipo:
root 180 0.0 1.1 2936 1436 ? S 04:03 0:00 /usr/sbin/apache chrapach 189 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 190 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 191 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 192 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 193 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache
Certifique-se que os processos do Apache estão sendo executados na jaula chroot
procurando no sistema de arquivo /proc
: ls -la
/proc/process_number/root/. onde process_number é um
dos PID listados acima (por exemplo: segunda coluna; PID 189). As entradas
para a árvore restrita devem ser listadas:
drwxr-sr-x 10 root staff 240 Dec 2 16:06 . drwxrwsr-x 4 root staff 72 Dec 2 08:07 .. drwxr-xr-x 2 root root 144 Dec 2 16:05 bin drwxr-xr-x 2 root root 120 Dec 3 04:03 dev drwxr-xr-x 5 root root 408 Dec 3 04:03 etc drwxr-xr-x 2 root root 800 Dec 2 16:06 lib dr-xr-xr-x 43 root root 0 Dec 3 05:03 proc drwxr-xr-x 2 root root 48 Dec 2 16:06 sbin drwxr-xr-x 6 root root 144 Dec 2 16:04 usr drwxr-xr-x 7 root root 168 Dec 2 16:06 var
Para automatizar este teste, você pode digitar:ls -la /proc/`cat /var/chroot/apache/var/run/apache.pid`/root/.
FIXME: Add other tests that can be run to make sure the jail is closed?
A razão pela qual eu gosto disso é que a configuração da jaula não é tão complicada e o servidor pode ser atualizado em somente duas linhas:
apt-get update && apt-get install apache makejail /etc/makejail/apache.py
Se você está procurando por mais informações você pode considerar as referências que foram utilizadas para fazer este tutorial:
makejail homepage
,
this program was written by Alain Tesio)
Chrooting
daemons and system processes HOWTO
by Jonathan, Network Dweebs,
21/10/2002
[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ próximo ]
Securing Debian Manual
v3.1,mailto:jfs@debian.org