Linux
我應該採取哪些步驟來保護 Tomcat 6.x?
我正在設置新的 Tomcat 部署,並希望它盡可能安全。
我創建了一個“jakarta”使用者並讓 jsvc 作為守護程序執行 Tomcat。關於目錄權限等限制對Tomcat文件的訪問的任何提示?
我知道我需要刪除預設的 webapps - 文件、範例等……我應該在這裡使用任何最佳實踐嗎?那麼所有的配置 XML 文件呢?那裡有什麼提示嗎?
是否值得啟用安全管理器以便 web 應用程序在沙箱中執行?有沒有人有設置這個的經驗?
我見過有人在 Apache 後面執行兩個 Tomcat 實例的例子。看來這可以使用 mod_jk 或 mod_proxy 來完成……兩者都有什麼優點/缺點?值得麻煩嗎?
如果重要的話,作業系統是 Debian lenny。我沒有使用 apt-get 因為 lenny 只提供 tomcat 5.5 而我們需要 6.x。
謝謝!
您可以安裝 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 $?