Я занимаюсь настройкой нового развертывания Tomcat и хочу, чтобы оно было максимально безопасным.
Я создал пользователя jakarta и jsvc запускает Tomcat в качестве демона. Какие-нибудь советы по разрешениям каталогов и тому подобное, чтобы ограничить доступ к файлам Tomcat?
Я знаю, что мне нужно будет удалить стандартные веб-приложения - документы, примеры и т. Д. ... есть ли какие-нибудь передовые методы, которые я должен здесь использовать? А как насчет всех XML-файлов конфигурации? Есть какие-нибудь советы?
Стоит ли включать диспетчер безопасности, чтобы веб-приложения работали в песочнице? У кого-нибудь был опыт настройки такого?
Я видел примеры людей, запускающих два экземпляра Tomcat за Apache. Кажется, это можно сделать с помощью mod_jk или с помощью mod_proxy ... какие-либо плюсы / минусы того и другого? Стоит ли хлопот?
В случае необходимости, ОС - Debian lenny. Я не использую apt-get, потому что lenny предлагает только tomcat 5.5, а нам требуется 6.x.
Спасибо!
Вы можете установить Tomcat 6 для работы под jsvc
как пользователь Кот (не как корень). Вот что я сделал в прошлый раз, когда настраивал его:
Я установил приложение 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 $?
У Министерства обороны США есть хороший руководство который объединил руководство по безопасности Tomcat в общее руководство по безопасности веб-сервера (SRG). Вы можете найти больше руководств по безопасности здесь:
Проект безопасности открытых веб-приложений (OWASP) предлагает страница вики по обеспечению безопасности Tomcat, который может оказаться полезным. На момент написания он, кажется, больше ориентирован на Tomcat 5.x, но, надеюсь, будет обновлен со временем.
Я бы серьезно рассмотрел возможность резервного копирования пакетов 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.
Не забудьте изменить пароль по умолчанию для роли администратора в файле tomcat-users.xml. Это очень важно, иначе злоумышленник может развертывать приложения без ограниченного разрешения, такие как бэкдор, на сервере tomcat и пытаться делать много плохих вещей.