Que etapas devo seguir para proteger o Tomcat 6.x?

10

Estou no processo de configurar uma nova implantação do Tomcat e quero que ela seja o mais segura possível.

Eu criei um usuário 'jakarta' e tenho o jsvc executando o Tomcat como um daemon. Alguma dica sobre permissões de diretório e tal para limitar o acesso aos arquivos do Tomcat?

Sei que precisarei remover as aplicações web padrão - documentos, exemplos, etc ... se há alguma prática recomendada que eu deveria estar usando aqui? E quanto a todos os arquivos XML de configuração? Alguma dica ai?

Vale a pena ativar o Gerenciador de segurança para que os aplicativos da Web sejam executados em uma sandbox? Alguém já teve experiência em configurar isso?

Eu vi exemplos de pessoas executando duas instâncias do Tomcat atrás do Apache. Parece que isso pode ser feito usando mod_jk ou com mod_proxy ... quaisquer prós / contras de qualquer um deles? Vale a pena o problema?

Caso seja importante, o sistema operacional é o Debian lenny. Eu não estou usando o apt-get porque o lenny só oferece o tomcat 5.5 e nós precisamos do 6.x.

Obrigado!

    
por Peter Sankauskas 21.07.2009 / 22:41

5 respostas

6

Você pode instalar o Tomcat 6 para rodar em jsvc como usuário tomcat (não como root ). Aqui está o que eu fiz da última vez que eu configurei:

Eu instalei o aplicativo Tomcat em /usr/java/tomcat ( CATALINA_HOME ) e uma instância em /var/lib/tomcat ( CATALINA_BASE ):

cd /usr/java
sudo tar xzvf ~/downloads/apache-tomcat-6.0.18.tar.gz
sudo ln -s apache-tomcat-6.0.18 tomcat
sudo /usr/sbin/useradd -d /var/lib/tomcat -c "Apache Tomcat" -m -s /sbin/nologin tomcat
cd /var/lib/tomcat
sudo mkdir logs work temp
sudo chown tomcat:tomcat logs temp work
(cd /usr/java/tomcat && sudo tar cvf - conf webapps) | sudo tar xvf -
sudo chmod -R g+rw webapps conf
sudo chown -R tomcat:tomcat webapps conf
cd webapps/
sudo rm -rf docs examples manager host-manager
cd ../conf
sudo chmod g+r *

Depois, criei o wrapper jsvc :

cd
tar xzvf downloads/apache-tomcat-6.0.18.tar.gz
tar xzvf apache-tomcat-6.0.18/bin/jsvc.tar.gz
cd jsvc-src
chmod +x configure
./configure --with-java=$JAVA_HOME
make
./jsvc --help
sudo cp jsvc /usr/local/sbin/ 

Por fim, apertei as permissões nos diretórios de instâncias:

cd /var/lib/tomcat
sudo chmod -R 0700 conf
sudo chmod -R 0750 logs
sudo chmod -R 0700 temp
sudo chmod -R 0700 work
sudo chmod -R 0770 webapps/
sudo chown -R tomcat:tomcat conf
sudo chown -R tomcat:tomcat logs

Quando você executar o Tomcat agora, você precisará iniciá-lo usando jsvc , então adicione este script como /etc/init.d/tomcat e crie um link simbólico apropriado:

#!/bin/sh
#
# tomcat       Startup script for the Apache Tomcat Server running under jsvc
#
# chkconfig: 345 85 15
# description: Apache Tomcat
# pidfile: /var/run/jsvc.pid

JAVA_HOME=/usr/java/jdk1.6.0_13
CATALINA_HOME=/usr/java/apache-tomcat-6.0.18
CATALINA_BASE=/var/lib/tomcat
JAVA_OPTS="-Djava.awt.headless=true"
JMX_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

DAEMON_APP=/usr/local/sbin/jsvc
TOMCAT_USER=tomcat

# Everything below should be okay
PID_FILE=/var/run/jsvc.pid
LOCK_FILE=/var/lock/tomcat

PATH=/sbin:/bin:/usr/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions

[ -x $JAVA_HOME/bin/java ] || exit 0
[ -x $DAEMON_APP ] || exit 0
[ -d $CATALINA_HOME/bin ] || exit 0
[ -d $CATALINA_BASE ] || exit 0

RETVAL=0
prog="jsvc"

CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

start() {
  # Start Tomcat
  log_daemon_msg "Starting Apache Tomcat"
  $DAEMON_APP \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_BASE/logs/catalina.out \
    -errfile $CATALINA_BASE/logs/catalina.out \
    $JAVA_OPTS $JMX_OPTS \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$CATALINA_BASE/temp \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap start 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    touch $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

stop() {
  # Stop tomcat
  log_daemon_msg "Stopping Apache Tomcat"
  $DAEMON_APP \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    rm -rf $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

restart() {
  stop
  sleep 5
  start
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $prog
    ;;
  condrestart)
    [ -f $LOCK_FILE ] && restart || :
    ;;
  *)
    log_action_msg "Usage: $0 {start|stop|restart|status|condrestart}"
    exit 1
esac

exit $?
    
por 26.07.2009 / 18:45
3

O Departamento de Defesa dos EUA tem um bom guia que combinou as diretrizes de segurança do Tomcat em uma Web geral Guia de segurança do servidor (SRG). Você pode encontrar mais guias de segurança aqui:

link

    
por 18.08.2009 / 15:17
2

O Projeto de Segurança de Aplicações Web Abertas ( OWASP ) oferece um página wiki sobre a segurança do Tomcat , que você pode achar útil. No momento em que escrevo, parece mais focado no Tomcat 5.x, mas esperamos que seja atualizado com o passar do tempo.

    
por 29.12.2010 / 08:43
1

Eu consideraria seriamente backporting os pacotes tomcat6 do teste. Você pode se inscrever no pacote para receber notificações de novas versões sendo carregadas no arquivo. (Eu sou um pouco parcial porque trabalhei no empacotamento debian).

Eu não tentei executar aplicativos da Web em um gerenciador de segurança, pois nenhum aplicativo é fornecido com uma política e, francamente, é uma operação demorada criar você mesmo. Se você é paranóico, certamente pode fazê-lo. Isso envolve principalmente a execução do tomcat, a espera de algo para puta e, em seguida, adicionar uma exceção à política e reiniciar o tomcat novamente. Enxágüe, repita, etc.

Obviamente, não execute o tomcat como root. O usuário do tomcat não deve poder gravar em nada fora do diretório de log ou do diretório de trabalho. Você deve certificar-se de que o seu diretório webapps contém apenas as webapps que você deseja executar.

Eu sempre executo o tomcat atrás do apache. Isto é em parte porque eu gostaria de pensar que mais pessoas usam o apache, então os bugs seriam encontrados mais rapidamente. Isso é muito bonito e você não deve confiar que isso seja uma melhoria de segurança. O que o Apache oferece é configurabilidade. Existem muitos módulos que o Tomcat simplesmente não tem, ou não pode fazer da maneira mais eficiente. mod_cache, mod_ssl, mod_security todos vêm à mente. Você tem a opção de mod_jk, mod_proxy (e mod_proxy_http ou mod_proxy_ajp). mod_jk (e mod_proxy_ajp) usam o protocolo binário AJP em vez do protocolo HTTP menos eficiente. Eu recomendo usar mod_jk.

    
por 21.07.2009 / 23:07
0

Não se esqueça de alterar a senha padrão da função administrativa no tomcat-users.xml É muito importante, senão pessoas maliciosas podem implantar aplicativos sem permissão restrita como backdoor no servidor tomcat e tentar fazer muitas coisas ruins.

    
por 02.08.2009 / 20:19