Які кроки потрібно зробити, щоб захистити Tomcat 6.x?


10

Я зараз налаштовую нове розгортання Tomcat і хочу, щоб він був максимально безпечним.

Я створив користувача "jakarta" і маю jsvc запускати Tomcat як демон. Будь-які поради щодо дозволів каталогів та таких, щоб обмежити доступ до файлів Tomcat?

Я знаю, що мені потрібно буде видалити веб-сайти за замовчуванням - документи, приклади тощо ... Чи є найкращі практики, які я повинен тут використовувати? Що з усіма конфігураційними XML-файлами? Якісь поради там?

Чи варто включити менеджер безпеки так, щоб веб-сторінки працювали в пісочниці? Хтось мав досвід налаштування цього?

Я бачив приклади людей, які керували двома екземплярами Tomcat за Apache. Здається, це можна зробити за допомогою mod_jk або з mod_proxy ... будь-які плюси чи мінуси будь-якого? Чи варто турбуватися?

У випадку, якщо це має значення, ОС - Debian lenny. Я не використовую apt-get, оскільки lenny пропонує лише tomcat 5.5, а нам потрібен 6.x.

Дякую!

Відповіді:


6

Ви можете встановити Tomcat 6 для запуску під jsvcкористувачем tomcat (а не як root ). Ось що я робив останній раз, коли я його налаштував:

Я встановив додаток Tomcat під /usr/java/tomcat( CATALINA_HOME) і екземпляр під /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 *

Потім я побудував 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/ 

Нарешті, я посилив дозволи на каталоги екземплярів:

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

Коли ви запустите Tomcat зараз, вам потрібно буде запустити його з використанням jsvc, тому додайте цей скрипт як /etc/init.d/tomcatі символізуйте його відповідним чином:

#!/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 $?

Зазвичай я додаю chmod та chown речі до сценарію запуску (init), оскільки він працює як root. Мене кілька разів вкусили люди, які "допомагають" запускати tomcat як root, приводячи до того, що файли та каталоги належать до root та не підлягають запису для користувача tomcat після того, як він перезапустився належним чином. Ви пропустили у своєму списку "sudo chown tomcat: tomcat temp work"? Або я щось пропустив?
Олаф

Оскільки вони створені Tomcat, вони будуть створені разом з tomcat: власник / група tomcat.
CoverosGene

Будь-яка причина не використовувати попередньо упакований пакет jsvc? Особисто я просто встановлюю пакет, навіть якщо завантажую Tomcat з серверів Apache.
тронда

3

Міністерство оборони США має хороший посібник , який поєднав керівництво Tomcat щодо безпеки в загальний посібник із безпеки веб-сервера (SRG). Ви можете знайти більше посібників із безпеки тут:

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


Дякую, хоча вони не в дуже дружньому форматі
Пітер Санькаускас

Посилання розірвано. Вони також більше не надають специфічний для Tomcat контрольний список.
Боб

оновлено, щоб виправити посилання. У посібнику Служб прикладних програм є ще певні матеріали, що стосуються Tomcat.
Джим Хунзікер

Це чудова сторінка, однак, це з 2006 року, тому деякі рекомендації можуть не бути актуальними для останнього Tomcat. Ось відповідний параграф щодо дозволів каталогів: B.2 Налаштування та запуск Tomcat можуть бути налаштовані для роботи як однокористувацької програми, так і як спільної системної служби або процесу. Службі або процесу Tomcat не потрібні адміністратор хост-платформи або права доступу root для роботи. Для обмеження ризику експлуатації сервера Tomcat буде створений спеціальний обліковий запис хоста, призначений для запуску служби або процесу Tomcat та призначений мінімальний привілей системи хоста.
амос

2

Проект захисту відкритих веб-додатків ( OWASP ) пропонує вікі-сторінку про захист Tomcat , яка може виявитися корисною. На момент написання повідомлення, здається, більше зосереджена на Tomcat 5.x, але, сподіваємось, оновиться з часом.


1

Я б серйозно задумався про підтримку пакунків tomcat6 від тестування. Ви можете підписатися на пакет, щоб отримувати сповіщення про нові версії, які завантажуються в архів. (Я трохи упереджений, коли працював над упаковкою debian).

Я не намагався запускати веб-сайти під менеджером безпеки, оскільки жоден додаток не постачається з політикою, і, відверто кажучи, потрібно багато часу, щоб створити його самостійно. Якщо ви параноїк, ви, звичайно, можете це зробити. Він здебільшого передбачає запуск tomcat, очікування чогось вилучення, а потім додавання виключення з політики та повторний запуск tomcat знову. Промийте, повторіть тощо.

Очевидно, не запускайте tomcat як root. Користувач tomcat не повинен мати змогу записувати що-небудь за межами каталогу журналів або робочого каталогу. Ви повинні переконатися, що ваш каталог webapps містить лише ті веб-сторінки, які ви хочете запустити.

Я завжди запускаю томат за апашею. Почасти це тому, що я хотів би подумати, що більше людей використовують апаш, тому помилки знайдуться швидше. Це дуже бажане мислення, і ви не повинні покладатися на те, що це поліпшення безпеки. Що Apache приносить вам налаштування. Існує безліч модулів, яких у tomcat просто немає або не вдається зробити так ефективно. mod_cache, mod_ssl, mod_security всю весну на розум. У вас є вибір mod_jk, mod_proxy (і mod_proxy_http, або mod_proxy_ajp). mod_jk (і mod_proxy_ajp) використовують двійковий протокол AJP, а не менш ефективний протокол http. Я рекомендую використовувати mod_jk.


0

Не забудьте змінити пароль за замовчуванням ролі адміністратора в tomcat-users.xml Це дуже важливо, інакше зловмисник може розгортати програми без обмеженого дозволу, як backdoor на tomcat сервері і намагатися зробити багато поганих справ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.