Welche Schritte muss ich unternehmen, um Tomcat 6.x zu sichern?

10

Ich bin gerade dabei, eine neue Tomcat-Bereitstellung einzurichten, und möchte, dass sie so sicher wie möglich ist.

Ich habe einen 'jakarta'-Benutzer erstellt und jsvc hat Tomcat als Daemon ausgeführt. Gibt es Tipps zu Verzeichnisberechtigungen und dergleichen, um den Zugriff auf Tomcat-Dateien einzuschränken?

Ich weiß, dass ich die Standard-Webanwendungen entfernen muss - Dokumente, Beispiele usw. ... gibt es Best Practices, die ich hier verwenden sollte? Was ist mit allen XML-Konfigurationsdateien? Irgendwelche Tipps da?

Lohnt es sich, den Sicherheitsmanager so zu aktivieren, dass Webanwendungen in einer Sandbox ausgeführt werden? Hat jemand Erfahrung damit?

Ich habe Beispiele von Leuten gesehen, die zwei Instanzen von Tomcat hinter Apache ausführen. Es scheint, dass dies mit mod_jk oder mit mod_proxy gemacht werden kann ... irgendwelche Vor- / Nachteile von beidem? Lohnt sich die Mühe?

Falls es darauf ankommt, ist das Betriebssystem Debian Lenny. Ich benutze apt-get nicht, weil lenny nur tomcat 5.5 anbietet und wir 6.x benötigen.

Vielen Dank!

Peter Sankauskas
quelle

Antworten:

6

Sie können Tomcat 6 so installieren, dass es jsvcals Benutzer tomcat (nicht als root ) ausgeführt wird. Folgendes habe ich beim letzten Einrichten getan:

Ich habe die Tomcat-Anwendung unter /usr/java/tomcat( CATALINA_HOME) und eine Instanz unter /var/lib/tomcat( CATALINA_BASE) installiert :

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 *

Dann habe ich den jsvcWrapper gebaut:

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/ 

Schließlich habe ich die Berechtigungen für die Instanzverzeichnisse verschärft:

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

Wenn Sie Tomcat jetzt ausführen, müssen Sie es mit starten. Fügen Sie jsvcdieses Skript als hinzu /etc/init.d/tomcatund verknüpfen Sie es entsprechend:

#!/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 $?
CoverosGene
quelle
Normalerweise füge ich das chmod- und das chown-Zeug zum Startskript (init) hinzu, da es als root ausgeführt wird. Ich wurde mehrmals von Leuten gebissen, die beim Starten von Tomcat als Root "mithelfen", was dazu führte, dass Dateien und Verzeichnisse zu Root gehörten und für den Tomcat-Benutzer nach einem ordnungsgemäßen Neustart nicht mehr beschreibbar waren. Haben Sie "sudo chown tomcat: tomcat temp work" in Ihrer Liste verpasst? Oder habe ich etwas verpasst?
Olaf
Da sie von Tomcat erstellt wurden, werden sie mit tomcat: tomcat owner / group erstellt.
CoverosGene
Gibt es einen Grund, das vorgefertigte jsvc-Paket nicht zu verwenden? Persönlich installiere ich das Paket nur, selbst wenn ich Tomcat von den Servern von Apache herunterlade.
Tronda
3

Das US-Verteidigungsministerium verfügt über einen guten Leitfaden , der die Tomcat-Sicherheitsrichtlinien zu einem allgemeinen Webserver-Sicherheitshandbuch (SRG) zusammengefasst hat. Weitere Sicherheitsleitfäden finden Sie hier:

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

Jim Hunziker
quelle
Danke, obwohl sie nicht in einem sehr freundlichen Format sind
Peter Sankauskas
Die Verbindung ist unterbrochen. Sie scheinen auch keine Tomcat-spezifische Checkliste mehr bereitzustellen.
Bob
aktualisiert, um den Link zu beheben. Das Application Services-Handbuch enthält noch einige Tomcat-spezifische Informationen.
Jim Hunziker
Das ist eine großartige Seite, sie stammt jedoch aus dem Jahr 2006, sodass einige Empfehlungen für den neuesten Kater möglicherweise nicht auf dem neuesten Stand sind. Hier ist der relevante Abschnitt zu Verzeichnisberechtigungen: B.2 Einrichten und Starten Tomcat kann so konfiguriert werden, dass es entweder als Einzelbenutzeranwendung oder als gemeinsam genutzter Systemdienst oder -prozess ausgeführt wird. Für einen Tomcat-Dienst oder -Prozess sind keine Administrator- oder Root-Berechtigungen für die Hostplattform erforderlich. Um das Risiko von Exploits des Tomcat-Servers zu begrenzen, wird ein benutzerdefiniertes Hostkonto für die Ausführung des Tomcat-Dienstes oder -Prozesses erstellt und mit minimalen Hostsystemberechtigungen versehen.
Amos
2

Das Open Web Application Security Project ( OWASP ) bietet eine Wiki-Seite zum Sichern von Tomcat , die Sie möglicherweise nützlich finden. Zum Zeitpunkt des Schreibens scheint es sich mehr auf Tomcat 5.x zu konzentrieren, wird aber hoffentlich im Laufe der Zeit aktualisiert.

Kaitsu
quelle
1

Ich würde ernsthaft in Betracht ziehen, die tomcat6-Pakete vom Testen zurück zu portieren. Sie können das Paket abonnieren, um Benachrichtigungen über neue Versionen zu erhalten, die in das Archiv hochgeladen werden. (Ich bin leicht voreingenommen, da ich an der Debian-Verpackung gearbeitet habe).

Ich habe nicht versucht, Webanwendungen unter einem Sicherheitsmanager auszuführen, da keine Anwendung mit einer Richtlinie geliefert wird und es ehrlich gesagt eine zeitaufwändige Operation ist, eine selbst zu erstellen. Wenn Sie paranoid sind, können Sie dies sicherlich tun. Meist geht es darum, Tomcat auszuführen, darauf zu warten, dass etwas passiert, und dann eine Ausnahme zur Richtlinie hinzuzufügen und Tomcat erneut zu starten. Spülen, wiederholen usw.

Führen Sie Tomcat natürlich nicht als Root aus. Der Tomcat-Benutzer sollte nicht in der Lage sein, in etwas außerhalb des Protokollverzeichnisses oder des Arbeitsverzeichnisses zu schreiben. Sie sollten sicherstellen, dass Ihr Webanwendungsverzeichnis nur die Webanwendungen enthält, die Sie ausführen möchten.

Ich laufe immer Tomcat hinter Apache. Dies liegt zum Teil daran, dass ich gerne glauben würde, dass mehr Menschen Apache verwenden, sodass Fehler schneller gefunden werden. Dies ist ein ziemlich Wunschdenken, und Sie sollten sich nicht darauf verlassen, dass dies eine Sicherheitsverbesserung darstellt. Was Apache Ihnen bringt, ist Konfigurierbarkeit. Es gibt viele Module, die Tomcat einfach nicht oder nicht so effizient hat. mod_cache, mod_ssl, mod_security fallen mir alle ein. Sie haben die Wahl zwischen mod_jk, mod_proxy (und entweder mod_proxy_http oder mod_proxy_ajp). mod_jk (und mod_proxy_ajp) verwenden das binäre AJP-Protokoll anstelle des weniger effizienten http-Protokolls. Ich würde die Verwendung von mod_jk empfehlen.

David Pashley
quelle
0

Vergessen Sie nicht, das Standardkennwort der Administratorrolle in der Datei tomcat-users.xml zu ändern. Dies ist sehr wichtig. Andernfalls kann eine böswillige Person Anwendungen ohne eingeschränkte Berechtigung wie die Hintertür zum Tomcat-Server bereitstellen und versuchen, viele schlechte Dinge zu tun.

Ali Mezgani
quelle