Какие шаги я должен предпринять для защиты 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 $?
CoverosGene
источник
Я обычно добавляю 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 года, поэтому некоторые рекомендации могут не соответствовать последней версии кота. Вот соответствующий параграф о правах доступа к каталогу: B.2 Настройка и запуск Tomcat может быть настроен для запуска в качестве однопользовательского приложения или в качестве общей системной службы или процесса. Для работы службы или процесса Tomcat не требуются администратор платформы хоста или права root. Чтобы ограничить риск эксплойтов на сервере Tomcat, будет создана настраиваемая учетная запись хоста, предназначенная для запуска службы или процесса Tomcat, и ей будут назначены минимальные привилегии хост-системы.
amos
2

Проект Open Web Application Security Project ( OWASP ) предлагает вики-страницу по защите Tomcat , которая может оказаться полезной. На момент написания статьи он был более ориентирован на Tomcat 5.x, но, надеюсь, со временем он будет обновлен.

Kaitsu
источник
1

Я бы серьезно подумал о переносе пакетов tomcat6 из тестирования. Вы можете подписаться на пакет, чтобы получать уведомления о новых версиях, загружаемых в архив. (Я немного предвзят, поскольку работал над упаковкой Debian).

Я не пробовал запускать веб-приложения под менеджером безопасности, так как ни одно приложение не поставляется с политикой, и, честно говоря, создание ее самостоятельно занимает много времени. Если вы параноик, вы можете это сделать. В основном это включает запуск tomcat, ожидание чего-либо, а затем добавление исключения в политику и повторный запуск tomcat. Промыть, повторить и т. Д.

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

Я всегда запускаю Tomcat за Apache. Это отчасти потому, что я хотел бы думать, что все больше людей используют Apache, поэтому ошибки будут обнаружены быстрее. Это довольно желаемое за действительное, и вы не должны полагаться на то, что это улучшение безопасности. То, что приносит 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. Это очень важно, иначе злоумышленник может развертывать приложения без ограничения доступа, такие как бэкдор, на сервер Tomcat и пытаться делать много плохих вещей.

Али Мезгани
источник