Tôi nên làm những bước nào để bảo mật Tomcat 6.x?


10

Tôi đang trong quá trình thiết lập một triển khai Tomcat mới và muốn nó an toàn nhất có thể.

Tôi đã tạo một người dùng 'jakarta' và có jsvc chạy Tomcat như một daemon. Có mẹo nào về quyền truy cập thư mục và như vậy để hạn chế quyền truy cập vào tệp của Tomcat không?

Tôi biết tôi sẽ cần xóa các ứng dụng web mặc định - tài liệu, ví dụ, v.v ... có cách nào tốt nhất tôi nên sử dụng ở đây không? Tất cả các tệp cấu hình XML thì sao? Có lời khuyên nào không?

Có đáng để cho phép Trình quản lý bảo mật để ứng dụng web chạy trong hộp cát không? Có ai có kinh nghiệm thiết lập điều này?

Tôi đã thấy các ví dụ về những người chạy hai phiên bản Tomcat đằng sau Apache. Có vẻ như điều này có thể được thực hiện bằng cách sử dụng mod_jk hoặc với mod_proxy ... bất kỳ ưu / nhược điểm nào của một trong hai? Có đáng để gặp rắc rối?

Trong trường hợp có vấn đề, HĐH là Debian lenny. Tôi không sử dụng apt-get vì lenny chỉ cung cấp tomcat 5.5 và chúng tôi yêu cầu 6.x.

Cảm ơn!

Câu trả lời:


6

Bạn có thể cài đặt Tomcat 6 để chạy dưới jsvcdạng người dùng tomcat (không phải là root ). Đây là những gì tôi đã làm lần trước khi tôi thiết lập nó:

Tôi đã cài đặt ứng dụng Tomcat dưới /usr/java/tomcat( CATALINA_HOME) và một thể hiện dưới /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 *

Sau đó, tôi xây dựng jsvctrình bao bọc:

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/ 

Cuối cùng, tôi thắt chặt các quyền trên các thư mục cá thể:

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

Khi bạn chạy Tomcat bây giờ, bạn sẽ cần khởi động nó bằng cách sử dụng jsvc, vì vậy hãy thêm tập lệnh này /etc/init.d/tomcatvà liên kết nó một cách thích hợp:

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

Tôi thường thêm các công cụ chmod và chown vào tập lệnh khởi động (init), vì nó chạy như root. Tôi đã bị cắn nhiều lần bởi những người "giúp đỡ" bắt đầu tomcat với quyền root, dẫn đến các tập tin và thư mục thuộc về root và không thể ghi cho người dùng tomcat sau khi khởi động lại đúng cách. Bạn có bỏ lỡ "sudo chown tomcat: tomcat temp work" trong danh sách của bạn không? Hay tôi đã bỏ lỡ điều gì?
Olaf

Vì chúng được tạo bởi Tomcat, chúng sẽ được tạo bằng tomcat: chủ sở hữu / nhóm tomcat.
CoverosGene

Bất kỳ lý do cho việc không sử dụng gói jsvc đóng gói sẵn? Cá nhân tôi chỉ cài đặt gói ngay cả khi tôi tải xuống Tomcat từ máy chủ của Apache.
tronda

3

Bộ Quốc phòng Hoa Kỳ có một hướng dẫn tốt đã kết hợp hướng dẫn bảo mật Tomcat vào Hướng dẫn bảo mật máy chủ Web (SRG) tổng thể. Bạn có thể tìm thêm hướng dẫn bảo mật tại đây:

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


Cảm ơn, mặc dù chúng không ở trong một định dạng rất thân thiện
Peter Sankauskas

Liên kết bị hỏng. Họ cũng không xuất hiện để cung cấp danh sách kiểm tra dành riêng cho Tomcat nữa.
Bob

cập nhật để sửa liên kết. Vẫn còn một số nội dung dành riêng cho Tomcat trong hướng dẫn Dịch vụ Ứng dụng.
Jim Hunziker

Đó là một trang tuyệt vời, tuy nhiên, đó là từ năm 2006 nên một số khuyến nghị có thể không được cập nhật cho tomcat mới nhất. Đây là đoạn có liên quan về quyền truy cập thư mục: B.2 Setup và Startup Tomcat có thể được cấu hình để chạy dưới dạng ứng dụng một người dùng hoặc dưới dạng dịch vụ hoặc quy trình hệ thống dùng chung. Một dịch vụ hoặc quy trình Tomcat không cần quản trị viên nền tảng máy chủ hoặc đặc quyền gốc để hoạt động. Để hạn chế rủi ro khai thác máy chủ Tomcat, tài khoản máy chủ tùy chỉnh dành riêng để chạy dịch vụ hoặc quy trình Tomcat sẽ được tạo và gán các đặc quyền hệ thống máy chủ tối thiểu.
amos

2

Dự án bảo mật ứng dụng web mở ( OWASP ) cung cấp một trang wiki về bảo mật Tomcat , mà bạn có thể thấy hữu ích. Tại thời điểm viết, nó dường như tập trung hơn vào Tomcat 5.x, nhưng hy vọng sẽ được cập nhật khi thời gian trôi qua.


1

Tôi nghiêm túc xem xét việc nhập các gói tomcat6 từ thử nghiệm. Bạn có thể đăng ký gói để nhận thông báo về các phiên bản mới đang được tải lên kho lưu trữ. (Tôi hơi thiên vị vì tôi đã làm việc trên bao bì debian).

Tôi chưa thử chạy ứng dụng web dưới một trình quản lý bảo mật, vì không có ứng dụng nào đi kèm với chính sách và thực sự là một hoạt động tốn thời gian để tự tạo một ứng dụng. Nếu bạn bị hoang tưởng, bạn chắc chắn có thể làm như vậy. Nó chủ yếu liên quan đến việc chạy tomcat, chờ đợi một cái gì đó để chó cái và sau đó thêm một ngoại lệ cho chính sách và khởi động lại tomcat. Rửa sạch, lặp lại, vv

Rõ ràng, không chạy tomcat như root. Người dùng tomcat không nên ghi vào bất cứ thứ gì bên ngoài thư mục nhật ký hoặc thư mục công việc. Bạn nên đảm bảo rằng thư mục ứng dụng web của bạn chỉ chứa các ứng dụng web bạn muốn chạy.

Tôi luôn luôn chạy tomcat đằng sau apache. Điều này một phần vì tôi muốn nghĩ rằng nhiều người sử dụng apache hơn, vì vậy các lỗi sẽ được tìm thấy nhanh hơn. Đây là suy nghĩ khá nhiều mong muốn và bạn không nên dựa vào đây là một cải tiến bảo mật. Những gì Apache mang lại cho bạn là khả năng cấu hình. Có rất nhiều mô-đun mà tomcat không có, hoặc không thể làm một cách hiệu quả. mod_cache, mod_ssl, mod_security tất cả mùa xuân đến tâm trí. Bạn có thể chọn mod_jk, mod_proxy (và mod_proxy_http hoặc mod_proxy_ajp). mod_jk (và mod_proxy_ajp) sử dụng giao thức AJP nhị phân thay vì giao thức http kém hiệu quả hơn. Tôi khuyên bạn nên sử dụng mod_jk.


0

Đừng quên thay đổi mật khẩu mặc định của vai trò quản trị viên trong tomcat-users.xml Điều đó rất quan trọng, người độc hại khác có thể triển khai các ứng dụng mà không có sự cho phép hạn chế như cửa sau vào máy chủ tomcat và cố gắng làm nhiều điều xấu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.