Tomcat 6.x güvenliğini sağlamak için ne yapmalıyım?


10

Yeni bir Tomcat dağıtımı kurma sürecindeyim ve mümkün olduğunca güvenli olmasını istiyorum.

Bir 'jakarta' kullanıcısı oluşturdum ve Tomcat'i daemon olarak çalıştıran jsvc'im var. Tomcat'in dosyalarına erişimi sınırlamak için dizin izinleri ve bunun gibi ipuçları var mı?

Varsayılan webapps'leri kaldırmam gerekeceğini biliyorum - dokümanlar, örnekler, vb ... Burada kullanmam gereken en iyi uygulamalar var mı? Tüm yapılandırma XML dosyaları ne olacak? Orada ipucu var mı?

Web yöneticilerinin bir sanal alanda çalışması için Güvenlik yöneticisini etkinleştirmeye değer mi? Bunu ayarlama konusunda tecrübesi olan var mı?

Apache'nin arkasında iki Tomcat örneği çalıştıran insanların örneklerini gördüm. Bu mod_jk veya mod_proxy ile yapılabilir ... herhangi bir artılarını / eksilerini ya? Zahmete değer mi?

Önemli olması halinde, işletim sistemi Debian lenny'dir. Apt-get kullanmıyorum çünkü lenny sadece tomcat 5.5'i sunuyor ve 6.x'e ihtiyacımız var.

Teşekkürler!

Yanıtlar:


6

Tomcat 6'yı tomcatjsvc kullanıcısı ( root olarak değil ) altında çalışacak şekilde kurabilirsiniz . En son ne zaman kurduğumu yaptım:

Tomcat uygulamasını /usr/java/tomcat( CATALINA_HOME) altına ve /var/lib/tomcat( CATALINA_BASE) altına bir örnek yükledim :

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 *

Sonra jsvcsargıyı inşa ettim :

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/ 

Son olarak, örnek dizinlerindeki izinleri sıkılaştırdım:

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'i şimdi çalıştırdığınızda, kullanmaya başlamanız gerekir jsvc, bu nedenle bu komut dosyasını şu şekilde ekleyin /etc/init.d/tomcatve uygun şekilde işaretleyin:

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

Ben genellikle chmod ve chown şeyler başlangıç ​​(init) komut dosyasına kök olarak çalıştığı gibi eklerim. Tomcat'i root olarak başlatan "yardım eden" insanlar tarafından birkaç kez ısırıldım, dosya ve dizinlerin köküne ait olmasına ve tomcat kullanıcısı için düzgün bir şekilde yeniden başlatıldıktan sonra yazılamayacağına neden oldum. Listenizde "sudo chown tomcat: tomcat temp work" i kaçırdınız mı? Yoksa bir şey mi kaçırdım?
Olaf

Tomcat tarafından oluşturulduklarından, tomcat: tomcat sahibi / grubu ile oluşturulacaklar.
CoverosGene

Önceden paketlenmiş jsvc paketini kullanmamanız için herhangi bir neden var mı? Şahsen Tomcat'i Apache'nin sunucularından indirsem bile paketi yüklüyorum.
tronda

3

ABD Savunma Bakanlığı, Tomcat güvenlik kılavuzunu genel bir Web Sunucusu Güvenlik Kılavuzu (SRG) ile birleştiren iyi bir kılavuza sahiptir. Daha fazla güvenlik kılavuzu burada bulabilirsiniz:

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


Teşekkürler, çok samimi bir formatta
olmasalar da

Bağlantı koptu. Ayrıca artık Tomcat'e özgü bir kontrol listesi sunmuyorlar.
Bob

bağlantı düzeltmek için güncellendi. Uygulama Hizmetleri kılavuzunda hala Tomcat'e özgü bazı şeyler var.
Jim Hunziker

Bu harika bir sayfa, ancak 2006'dan beri, en son tomcat için bazı öneriler güncel olmayabilir. Dizin izinleriyle ilgili paragraf aşağıdadır: B.2 Kurulum ve Başlangıç ​​Tomcat, tek kullanıcılı bir uygulama veya paylaşılan bir sistem hizmeti veya işlemi olarak çalışacak şekilde yapılandırılabilir. Tomcat hizmetinin veya işleminin çalışması için ana makine platformu yöneticisine veya kök ayrıcalıklarına sahip olması gerekmez. Tomcat sunucusunun istismar riskini sınırlamak için, Tomcat hizmetini veya işlemini çalıştırmaya adanmış özel bir ana bilgisayar hesabı oluşturulacak ve minimum ana bilgisayar sistemi ayrıcalıkları atanacaktır.
amos


1

Tomcat6 paketlerini test etmekten ciddiye almayı düşünürüm. Arşive yüklenen yeni sürümlerle ilgili bildirim almak için pakete abone olabilirsiniz. (Debian ambalajında ​​çalıştığım için biraz önyargılıyım).

Webapps'i bir güvenlik yöneticisi altında çalıştırmayı denemedim, çünkü hiçbir uygulama bir politika ile birlikte gelmiyor ve açıkçası kendiniz oluşturmak için zaman alıcı bir işlem. Paranoyaksanız, kesinlikle yapabilirsiniz. Çoğunlukla tomcat'ı çalıştırmayı, orospu için bir şey beklemeyi ve ardından politikaya bir istisna eklemeyi ve tomcat'i yeniden başlatmayı içerir. Durulama, tekrarlama vb.

Açıkçası, tomcat'ı kök olarak çalıştırmayın. Tomcat kullanıcısı günlük dizini veya iş dizini dışındaki hiçbir şeye yazamaz. Webapps dizininizin yalnızca çalıştırmak istediğiniz webapps'i içerdiğinden emin olmalısınız.

Tomcat'i her zaman apache'nin arkasında çalıştırırım. Bu kısmen daha fazla insanın apache kullandığını düşünmek istediğimden, hataların daha hızlı bulunacağından dolayı. Bu oldukça arzulu bir düşüncedir ve bunun bir güvenlik iyileştirmesi olmasına güvenmemelisiniz. Apache'nin size sağladığı şey yapılandırılabilirliktir. Tomcat'in sahip olmadığı veya verimli bir şekilde yapamayacağı birçok modül var. mod_cache, mod_ssl, mod_security tüm akla geliyor. Mod_jk, mod_proxy (ve mod_proxy_http veya mod_proxy_ajp) seçenekleriniz vardır. mod_jk (ve mod_proxy_ajp), daha az verimli http protokolü yerine ikili AJP protokolünü kullanır. Mod_jk kullanmanızı tavsiye ederim.


0

Tomcat-users.xml dosyasında yönetici rolünün varsayılan parolasını değiştirmeyi unutmayın Çok önemli, aksi takdirde kötü niyetli kişiler tomcat sunucusuna arka kapı gibi kısıtlı izin olmadan uygulamaları dağıtabilir ve birçok kötü şey yapmaya çalışabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.