Jakie kroki należy podjąć, aby zabezpieczyć Tomcat 6.x?

10

Jestem w trakcie konfigurowania nowego wdrożenia Tomcat i chcę, aby było tak bezpieczne, jak to możliwe.

Stworzyłem użytkownika „jakarta” i mam jsvc z uruchomionym Tomcatem jako demonem. Czy masz jakieś wskazówki dotyczące uprawnień do katalogów, aby ograniczyć dostęp do plików Tomcat?

Wiem, że będę musiał usunąć domyślne aplikacje internetowe - dokumenty, przykłady itp. Czy są jakieś najlepsze praktyki, których powinienem tutaj użyć? Co ze wszystkimi plikami XML konfiguracji? Jakieś wskazówki?

Czy warto włączyć Menedżera bezpieczeństwa, aby aplikacje działały w piaskownicy? Czy ktoś miał doświadczenie w konfigurowaniu tego?

Widziałem przykłady ludzi prowadzących dwa wystąpienia Tomcat za Apache. Wydaje się, że można to zrobić za pomocą mod_jk lub mod_proxy ... jakieś zalety / wady? Czy warto?

W razie potrzeby system operacyjny to Debian Lenny. Nie używam apt-get, ponieważ Lenny oferuje tylko tomcat 5.5 i wymagamy 6.x.

Dzięki!

Peter Sankauskas
źródło

Odpowiedzi:

6

Możesz zainstalować Tomcat 6, aby działał jsvcjako użytkownik tomcat (nie jako root ). Oto, co zrobiłem ostatnim razem:

Zainstalowałem aplikację Tomcat pod /usr/java/tomcat( CATALINA_HOME) i instancję pod /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 *

Następnie zbudowałem jsvcopakowanie:

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/ 

Na koniec zaostrzyłem uprawnienia do katalogów instancji:

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

Kiedy teraz uruchomisz Tomcat, musisz go uruchomić jsvc, więc dodaj ten skrypt jako /etc/init.d/tomcati odpowiednio dowiązaj symbolicznie:

#!/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
źródło
Zwykle dodam chmod i chown do skryptu uruchamiania (init), ponieważ działa on jako root. Kilka razy zostałem ugryziony przez ludzi, którzy „pomagali”, uruchamiając tomcat jako root, co prowadzi do plików i katalogów należących do roota i niemożliwych do zapisania dla użytkownika tomcat po ponownym uruchomieniu. Brakowało Ci na liście „sudo chown tomcat: tomcat temp work”? A może coś przeoczyłem?
Olaf
Ponieważ są tworzone przez Tomcat, zostaną utworzone za pomocą tomcat: właściciel / grupa tomcat.
CoverosGene
Czy jest jakiś powód, dla którego nie należy używać paczkowanego pakietu jsvc? Osobiście instaluję pakiet, nawet jeśli pobieram Tomcat z serwerów Apache.
tronda,
3

Departament Obrony USA ma dobry przewodnik , który połączył wskazówki bezpieczeństwa Tomcat w ogólny Przewodnik bezpieczeństwa serwera WWW (SRG). Więcej instrukcji bezpieczeństwa znajdziesz tutaj:

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

Jim Hunziker
źródło
Dzięki, chociaż nie są w bardzo przyjaznym formacie
Peter Sankauskas
Link jest zepsuty. Wydaje się również, że nie zapewniają one już listy kontrolnej specyficznej dla Tomcat.
Bob
zaktualizowano, aby naprawić link. W przewodniku usług aplikacji jest jeszcze kilka rzeczy specyficznych dla Tomcata.
Jim Hunziker
To świetna strona, jednak pochodzi z 2006 roku, więc niektóre rekomendacje mogą nie być aktualne dla najnowszego tomcat. Oto odpowiedni akapit dotyczący uprawnień do katalogu: B.2 Instalacja i uruchomienie Tomcat może być skonfigurowany do działania jako aplikacja dla jednego użytkownika lub jako wspólna usługa systemowa lub proces. Usługa lub proces Tomcat nie wymaga do działania administratora platformy hosta ani uprawnień administratora. Aby ograniczyć ryzyko wykorzystania serwera Tomcat, zostanie utworzone niestandardowe konto hosta przeznaczone do uruchamiania usługi lub procesu Tomcat i przypisane mu minimalne uprawnienia do systemu hosta.
amos
2

Open Web Application Security Project ( OWASP ) oferuje stronę wiki dotyczącą zabezpieczania Tomcat , co może być dla Ciebie przydatne. W chwili pisania tego tekstu wydaje się bardziej skoncentrowany na Tomcat 5.x, ale mam nadzieję, że będzie aktualizowany w miarę upływu czasu.

Kaitsu
źródło
1

Poważnie zastanowiłem się nad przeniesieniem pakietów tomcat6 z testów. Możesz subskrybować pakiet, aby otrzymywać powiadomienia o nowych wersjach przesyłanych do archiwum. (Jestem nieco stronniczy, ponieważ pracowałem nad pakietem debian).

Nie próbowałem uruchamiać aplikacji internetowych pod menedżerem bezpieczeństwa, ponieważ żadna aplikacja nie jest wyposażona w politykę, a jej utworzenie zajmuje trochę czasu. Jeśli jesteś paranoikiem, na pewno możesz to zrobić. Polega to głównie na uruchomieniu tomcat, czekaniu na coś do suki, a następnie dodaniu wyjątku do zasad i ponownym uruchomieniu tomcat. Spłucz, powtórz itp.

Oczywiście nie uruchamiaj tomcat jako root. Użytkownik tomcat nie powinien mieć możliwości zapisu do niczego poza katalogiem dziennika lub katalogiem roboczym. Należy upewnić się, że katalog aplikacji internetowych zawiera tylko aplikacje internetowe, które chcesz uruchomić.

Zawsze uruchamiam tomcat za apache. Wynika to częściowo z tego, że chciałbym myśleć, że więcej osób korzysta z Apache, więc błędy można znaleźć szybciej. Jest to raczej pobożne życzenie i nie powinieneś polegać na tym, że jest to poprawa bezpieczeństwa. To, co oferuje Apache, to konfigurowalność. Istnieje wiele modułów, których tomcat po prostu nie ma lub nie może działać tak skutecznie. mod_cache, mod_ssl, mod_security wszystko mi przychodzi do głowy. Masz do wyboru mod_jk, mod_proxy (i albo mod_proxy_http lub mod_proxy_ajp). mod_jk (i mod_proxy_ajp) używają binarnego protokołu AJP zamiast mniej wydajnego protokołu http. Polecam użycie mod_jk.

David Pashley
źródło
0

Nie zapomnij zmienić domyślnego hasła roli administratora w tomcat-users.xml Jest to bardzo ważne, w przeciwnym razie złośliwa osoba może wdrażać aplikacje bez ograniczonych uprawnień, takich jak backdoor na serwerze tomcat i próbować robić wiele złych rzeczy.

Ali Mezgani
źródło