Langkah apa yang harus saya ambil untuk mengamankan Tomcat 6.x?


10

Saya sedang dalam proses menyiapkan penyebaran Tomcat baru, dan ingin itu seaman mungkin.

Saya telah membuat pengguna 'jakarta' dan menjalankan jsvc menjalankan Tomcat sebagai daemon. Adakah tip tentang izin direktori dan semacamnya untuk membatasi akses ke file Tomcat?

Saya tahu saya harus menghapus webapps default - dokumen, contoh, dll ... apakah ada praktik terbaik yang harus saya gunakan di sini? Bagaimana dengan semua file XML konfigurasi? Ada tips di sana?

Apakah layak mengaktifkan manajer Keamanan agar aplikasi web berjalan di kotak pasir? Adakah yang punya pengalaman mengatur ini?

Saya telah melihat contoh orang yang menjalankan dua instance Tomcat di belakang Apache. Tampaknya ini dapat dilakukan dengan menggunakan mod_jk atau dengan mod_proxy ... ada pro / kontra dari keduanya? Apakah ini sepadan dengan masalahnya?

Dalam hal itu penting, OS adalah Debian Lenny. Saya tidak menggunakan apt-get karena lenny hanya menawarkan tomcat 5.5 dan kami membutuhkan 6.x.

Terima kasih!

Jawaban:


6

Anda dapat menginstal Tomcat 6 untuk dijalankan jsvcsebagai user tomcat (bukan sebagai root ). Inilah yang saya lakukan terakhir kali saya mengaturnya:

Saya memasang aplikasi Tomcat di bawah /usr/java/tomcat( CATALINA_HOME) dan sebuah instance di bawah /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 *

Lalu saya membuat jsvcbungkusnya:

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/ 

Akhirnya, saya memperketat izin pada direktori instance:

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

Ketika Anda menjalankan Tomcat sekarang, Anda harus memulainya menggunakan jsvc, jadi tambahkan skrip ini sebagai /etc/init.d/tomcatdan symlink dengan tepat:

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

Saya biasanya menambahkan chmod dan chown stuff ke skrip startup (init), karena dijalankan sebagai root. Saya telah digigit beberapa kali oleh orang-orang yang "membantu" memulai tomcat sebagai root, yang mengarah ke file dan direktori menjadi milik root dan tidak dapat ditulis untuk pengguna tomcat setelah direstart dengan benar. Apakah Anda melewatkan "sudo chown tomcat: tomcat temp work" di daftar Anda? Atau apakah saya melewatkan sesuatu?
Olaf

Karena mereka dibuat oleh Tomcat, mereka akan dibuat dengan tomcat: tomcat pemilik / grup.
CoverosGene

Ada alasan untuk tidak menggunakan paket jsvc pra-paket? Secara pribadi saya hanya menginstal paket bahkan jika saya mengunduh Tomcat dari server Apache.
tronda

3

Departemen Pertahanan AS memiliki panduan bagus yang telah menggabungkan panduan keamanan Tomcat ke dalam Panduan Keamanan Server Web (SRG) secara keseluruhan. Anda dapat menemukan lebih banyak panduan keamanan di sini:

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


Terima kasih, meskipun mereka tidak dalam format yang sangat ramah
Peter Sankauskas

Tautan rusak. Mereka juga tampaknya tidak lagi menyediakan daftar periksa khusus Tomcat.
Bob

diperbarui untuk memperbaiki tautan. Masih ada beberapa hal spesifik Tomcat di panduan Layanan Aplikasi.
Jim Hunziker

Itu halaman yang bagus, namun, ini dari tahun 2006 sehingga beberapa rekomendasi mungkin tidak terkini untuk kucing jantan terbaru. Inilah paragraf yang relevan tentang izin direktori: B.2 Pengaturan dan Startup Tomcat dapat dikonfigurasi untuk dijalankan sebagai aplikasi pengguna tunggal atau sebagai layanan atau proses sistem bersama. Layanan atau proses Tomcat tidak memerlukan administrator platform host atau hak root untuk beroperasi. Untuk membatasi risiko eksploitasi server Tomcat, akun host khusus yang didedikasikan untuk menjalankan layanan atau proses Tomcat akan dibuat dan diberikan hak sistem host minimal.
Amos


1

Saya serius mempertimbangkan backporting paket tomcat6 dari pengujian. Anda dapat berlangganan paket untuk mendapatkan pemberitahuan tentang versi baru yang diunggah ke arsip. (Saya sedikit bias karena saya telah mengerjakan kemasan debian).

Saya belum mencoba menjalankan webapps di bawah manajer keamanan, karena tidak ada aplikasi yang disertai dengan kebijakan dan terus terang itu memakan waktu untuk membuatnya sendiri. Jika Anda paranoid, Anda tentu bisa melakukannya. Sebagian besar melibatkan menjalankan kucing jantan, menunggu sesuatu untuk menggerutu dan kemudian menambahkan pengecualian pada kebijakan dan memulai kembali kucing jantan. Bilas, ulangi, dll.

Jelas, jangan jalankan kucing jantan sebagai root. Pengguna tomcat seharusnya tidak dapat menulis apa pun di luar direktori log atau direktori kerja. Anda harus memastikan bahwa direktori webapps Anda hanya berisi webapps yang ingin Anda jalankan.

Saya selalu menjalankan tomcat di belakang apache. Ini sebagian karena saya ingin berpikir bahwa lebih banyak orang menggunakan apache, jadi bug akan ditemukan lebih cepat. Ini cukup banyak angan-angan dan Anda tidak harus mengandalkan ini menjadi peningkatan keamanan. Apa yang dibawa Apache kepada Anda adalah konfigurasi. Ada banyak modul yang tidak dimiliki tomcat, atau tidak bisa dilakukan dengan efisien. mod_cache, mod_ssl, mod_security semua muncul dalam pikiran. Anda memiliki pilihan mod_jk, mod_proxy (dan mod_proxy_http atau mod_proxy_ajp). mod_jk (dan mod_proxy_ajp) menggunakan protokol biner AJP daripada protokol http yang kurang efisien. Saya akan merekomendasikan menggunakan mod_jk.


0

Jangan lupa untuk mengubah kata sandi default peran admin di tomcat-users.xml Ini sangat penting, jika tidak, orang jahat dapat menyebarkan aplikasi tanpa izin terbatas seperti backdoor ke server tomcat dan mencoba melakukan banyak hal buruk.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.