¿Qué pasos debo seguir para asegurar Tomcat 6.x?


10

Estoy en el proceso de configurar una nueva implementación de Tomcat, y quiero que sea lo más segura posible.

He creado un usuario 'jakarta' y tengo jsvc ejecutando Tomcat como demonio. ¿Algún consejo sobre los permisos de directorio y para limitar el acceso a los archivos de Tomcat?

Sé que tendré que eliminar las aplicaciones web predeterminadas: documentos, ejemplos, etc. ¿Hay alguna práctica recomendada que deba usar aquí? ¿Qué pasa con todos los archivos XML de configuración? ¿Algún consejo allí?

¿Vale la pena habilitar el administrador de seguridad para que las aplicaciones web se ejecuten en un entorno limitado? ¿Alguien ha tenido experiencia configurando esto?

He visto ejemplos de personas que ejecutan dos instancias de Tomcat detrás de Apache. Parece que esto se puede hacer usando mod_jk o con mod_proxy ... ¿alguna de las ventajas y desventajas de cualquiera? ¿Vale la pena la molestia?

En caso de que sea importante, el sistema operativo es Debian Lenny. No estoy usando apt-get porque lenny solo ofrece tomcat 5.5 y requerimos 6.x.

¡Gracias!

Respuestas:


6

Puede instalar Tomcat 6 para que se ejecute jsvccomo usuario tomcat (no como root ). Esto es lo que hice la última vez que lo configuré:

Instalé la aplicación Tomcat en /usr/java/tomcat( CATALINA_HOME) y una instancia en /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 *

Luego construí el jsvccontenedor:

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/ 

Finalmente, apreté los permisos en los directorios de instancias:

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

Cuando ejecute Tomcat ahora, deberá comenzar a usarlo jsvc, así que agregue este script como /etc/init.d/tomcaty haga un enlace simbólico adecuadamente:

#!/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 lo general, agrego los elementos chmod y chown al script de inicio (init), ya que se ejecuta como root. Varias veces me han mordido personas que "ayudan" a iniciar Tomcat como root, lo que lleva a que los archivos y directorios pertenezcan a la raíz y no se puedan escribir para el usuario de Tomcat una vez que se reinicia correctamente. ¿Te perdiste "sudo chown tomcat: tomcat temp work" en tu lista? ¿O me he perdido algo?
Olaf

Dado que son creados por Tomcat, se crearán con tomcat: tomcat owner / group.
CoverosGene

¿Alguna razón para no usar el paquete jsvc preenvasado? Personalmente, solo instalo el paquete incluso si descargo Tomcat de los servidores de Apache.
tronda

3

El Departamento de Defensa de los EE. UU. Tiene una buena guía que ha combinado la guía de seguridad de Tomcat en una Guía general de seguridad del servidor web (SRG). Puede encontrar más guías de seguridad aquí:

http://iase.disa.mil/stigs/srgs/Pages/index.aspx


Gracias, aunque no están en un formato muy amigable
Peter Sankauskas

El enlace está roto. Tampoco parecen proporcionar más una lista de verificación específica de Tomcat.
Bob

actualizado para arreglar el enlace. Todavía hay algunas cosas específicas de Tomcat en la guía de Servicios de aplicaciones.
Jim Hunziker

Esa es una gran página, sin embargo, es de 2006, por lo que algunas recomendaciones pueden no estar actualizadas para el último tomcat. Aquí está el párrafo relevante sobre permisos de directorio: B.2 Configuración e inicio Tomcat puede configurarse para ejecutarse como una aplicación de usuario único o como un servicio o proceso de sistema compartido. Un servicio o proceso de Tomcat no necesita administrador de la plataforma host o privilegios de root para funcionar. Para limitar el riesgo de explotaciones del servidor Tomcat, se creará una cuenta de host personalizada dedicada a ejecutar el servicio o proceso Tomcat y se le asignarán privilegios mínimos del sistema host.
amos

2

El Proyecto de seguridad de aplicaciones web abiertas ( OWASP ) ofrece una página wiki sobre cómo proteger Tomcat , que puede resultarle útil. Al momento de escribir, parece más enfocado en Tomcat 5.x, pero esperamos que se actualice a medida que pase el tiempo.


1

Consideraría seriamente hacer una copia de seguridad de los paquetes tomcat6 de las pruebas. Puede suscribirse al paquete para recibir notificaciones de nuevas versiones que se cargan en el archivo. (Soy un poco parcial ya que he trabajado en el paquete de Debian).

No he intentado ejecutar webapps con un administrador de seguridad, ya que ninguna aplicación viene con una política y, francamente, es una operación que lleva mucho tiempo crear una. Si eres paranoico, ciertamente puedes hacerlo. Principalmente implica ejecutar tomcat, esperar que algo se queje y luego agregar una excepción a la política y reiniciar tomcat nuevamente. Enjuague, repita, etc.

Obviamente, no ejecutes tomcat como root. El usuario de tomcat no debería poder escribir en nada fuera del directorio de registro o del directorio de trabajo. Debe asegurarse de que su directorio webapps solo contenga las webapps que desea ejecutar.

Siempre ejecuto tomcat detrás de apache. Esto se debe en parte a que me gustaría pensar que más personas usan apache, por lo que los errores se encontrarían más rápido. Esto es una ilusión y no debe confiar en que esto sea una mejora de seguridad. Lo que Apache te trae es la configurabilidad. Hay muchos módulos que tomcat simplemente no tiene o no puede hacer de manera tan eficiente. mod_cache, mod_ssl, mod_security todo viene a la mente. Tiene la opción de mod_jk, mod_proxy (y mod_proxy_http o mod_proxy_ajp). mod_jk (y mod_proxy_ajp) usa el protocolo binario AJP en lugar del protocolo http menos eficiente. Recomiendo usar mod_jk.


0

No olvide cambiar la contraseña predeterminada de la función de administrador en tomcat-users.xml. Es muy importante, de lo contrario, una persona malintencionada puede implementar aplicaciones sin permiso restringido, como la puerta trasera del servidor Tomcat, e intentar hacer muchas cosas malas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.