ฉันควรทำอย่างไรเพื่อรักษาความปลอดภัย Tomcat 6.x


10

ฉันอยู่ในกระบวนการตั้งค่าการปรับใช้ Tomcat ใหม่และต้องการให้มีความปลอดภัยมากที่สุด

ฉันได้สร้างผู้ใช้ 'jakarta' และให้ jsvc ใช้ Tomcat เป็น daemon มีเคล็ดลับเกี่ยวกับการอนุญาตไดเรกทอรีและ จำกัด การเข้าถึงไฟล์ของ Tomcat หรือไม่?

ฉันรู้ว่าฉันจะต้องลบ webapps เริ่มต้น - เอกสารตัวอย่าง ฯลฯ ... มีแนวทางปฏิบัติที่ดีที่สุดที่ฉันควรใช้ที่นี่หรือไม่ แล้วไฟล์ config 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) ในขณะที่มันทำงานเป็นราก ฉันถูกกัดหลายครั้งโดยคน "ช่วย" เริ่มต้น Tomcat เป็น root นำไปสู่ไฟล์และไดเรกทอรีที่เป็นของ root และไม่สามารถเขียนได้สำหรับผู้ใช้ Tomcat เมื่อรีสตาร์ทอย่างถูกต้อง คุณพลาด "sudo chown tomcat: tomcat temp work" ในรายการของคุณหรือไม่ หรือฉันได้พลาดอะไรบางอย่าง?
Olaf

เนื่องจากถูกสร้างขึ้นโดย Tomcat พวกเขาจะถูกสร้างขึ้นด้วยเจ้าของ / กลุ่ม tomcat
CoverosGene

มีเหตุผลใดที่ไม่ใช้แพ็คเกจ jsvc ที่ได้รับการบรรจุล่วงหน้า? โดยส่วนตัวฉันเพิ่งติดตั้งแพ็คเกจแม้ว่าฉันจะดาวน์โหลด Tomcat จากเซิร์ฟเวอร์ของ Apache
tronda

3

กระทรวงกลาโหมสหรัฐมีดีคู่มือที่ได้รวมคำแนะนำการรักษาความปลอดภัย Tomcat เป็นคู่มือการรักษาความปลอดภัยโดยรวม Web Server (SRG) คุณสามารถดูคู่มือรักษาความปลอดภัยเพิ่มเติมได้ที่นี่:

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


ขอบคุณแม้ว่าพวกเขาจะไม่ได้อยู่ในรูปแบบที่เป็นมิตรมาก
Peter Sankauskas

ลิงก์เสีย พวกเขายังไม่ปรากฏที่จะให้รายการตรวจสอบเฉพาะ Tomcat อีกต่อไป
บ๊อบ

อัปเดตเพื่อแก้ไขลิงก์ ยังมีบางสิ่งที่เฉพาะเจาะจงของ Tomcat ในคู่มือ Application Services
Jim Hunziker

นั่นเป็นหน้าเว็บที่ยอดเยี่ยม แต่มาจากปี 2006 ดังนั้นคำแนะนำบางอย่างอาจไม่ทันสมัยสำหรับ Tomcat รุ่นล่าสุด นี่คือย่อหน้าที่เกี่ยวข้องกับการอนุญาตในไดเรกทอรี: การตั้งค่า B.2 และการเริ่มต้น Tomcat อาจถูกกำหนดค่าให้เรียกใช้เป็นแอปพลิเคชันผู้ใช้รายเดียวหรือเป็นบริการระบบหรือกระบวนการที่ใช้ร่วมกัน บริการหรือกระบวนการ Tomcat ไม่ต้องการผู้ดูแลระบบแพลตฟอร์มโฮสต์หรือสิทธิ์ใช้งานรูทเพื่อดำเนินการ ในการจำกัดความเสี่ยงของการหาประโยชน์ของเซิร์ฟเวอร์ Tomcat บัญชีโฮสต์ที่กำหนดเองที่อุทิศให้กับการเรียกใช้บริการหรือกระบวนการ Tomcat จะถูกสร้างและกำหนดสิทธิพิเศษของระบบโฮสต์ให้น้อยที่สุด
amos

2

Open Web Application Security Project ( OWASP ) เสนอหน้า wiki ในการรักษาความปลอดภัย Tomcatซึ่งคุณอาจพบว่ามีประโยชน์ ในช่วงเวลาของการเขียนดูเหมือนว่าจะเน้น Tomcat 5.x มากขึ้น แต่หวังว่าจะได้รับการปรับปรุงเมื่อเวลาผ่านไป


1

ฉันพิจารณา backporting tomcat6 แพ็คเกจอย่างจริงจังจากการทดสอบ คุณสามารถสมัครสมาชิกแพ็คเกจเพื่อรับการแจ้งเตือนเกี่ยวกับเวอร์ชันใหม่ที่กำลังอัปโหลดไปยังที่เก็บถาวร (ฉันลำเอียงเล็กน้อยขณะที่ฉันทำงานบนบรรจุภัณฑ์เดเบียน)

ฉันไม่ได้ลองใช้ webapps ภายใต้ตัวจัดการความปลอดภัยเนื่องจากไม่มีแอปพลิเคชันมาพร้อมกับนโยบายและเป็นการดำเนินการที่ต้องใช้เวลานานในการสร้างขึ้นมาเอง หากคุณหวาดระแวงคุณสามารถทำได้อย่างแน่นอน ส่วนใหญ่เกี่ยวข้องกับการเรียกใช้ Tomcat รอสิ่งที่จะเลวแล้วเพิ่มข้อยกเว้นนโยบายและเริ่มต้นใหม่อีกครั้ง ล้างทำซ้ำ ฯลฯ

เห็นได้ชัดว่าอย่าวิ่งคราวเป็นราก ผู้ใช้ Tomcat ไม่ควรเขียนอะไรนอกไดเรกทอรีบันทึกหรือไดเรกทอรีงาน คุณควรตรวจสอบให้แน่ใจว่าไดเรกทอรี webapps ของคุณมี webapps ที่คุณต้องการเรียกใช้เท่านั้น

ฉันมักจะเรียกแมวตัวผู้หลัง apache ส่วนหนึ่งเป็นเพราะฉันต้องการคิดว่ามีผู้ใช้ apache มากขึ้นดังนั้นข้อบกพร่องจะพบได้เร็วขึ้น นี่เป็นความคิดที่ค่อนข้างปรารถนาและคุณไม่ควรเชื่อว่านี่เป็นการปรับปรุงด้านความปลอดภัย สิ่งที่ Apache นำมาให้คุณนั้นคือความสามารถในการกำหนดค่า มีโมดูลจำนวนมากที่ไม่ได้ใช้หรือไม่สามารถทำได้อย่างมีประสิทธิภาพ 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 และพยายามทำสิ่งเลวร้ายมากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.