Tomcat 6.xを保護するには、どのような手順を踏む必要がありますか?


10

私は新しいTomcatデプロイメントをセットアップしている最中なので、できるだけ安全にしたいと考えています。

「jakarta」ユーザーを作成し、jsvcでTomcatをデーモンとして実行しています。Tomcatのファイルへのアクセスを制限するためのディレクトリ許可などのヒントはありますか?

デフォルトのWebアプリケーション(ドキュメント、例など)を削除する必要があることはわかっています。ここで使用すべきベストプラクティスはありますか?すべての構成XMLファイルについてはどうですか?何かヒントはありますか?

Webアプリケーションがサンドボックスで実行されるように、セキュリティマネージャーを有効にする価値はありますか?誰かがこれを設定した経験がありますか?

Apacheの背後でTomcatの2つのインスタンスを実行している人々の例を見てきました。これはmod_jkを使用して、またはmod_proxyを使用して実行できるようです...どちらかの長所/短所?トラブルの価値はありますか?

重要な場合は、OSはDebian lennyです。lennyはtomcat 5.5しか提供しておらず、6.xが必要なので、私はapt-getを使用していません。

ありがとう!

回答:


6

Tomcat 6をインストールして、(rootではなく)jsvcユーザーtomcatとして実行できます。前回設定したときは、次のようになっています。

私は、下のTomcatアプリケーションをインストール/usr/java/tomcatCATALINA_HOME)と下のインスタンス/var/lib/tomcatCATALINA_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を実行するときは、を使用して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)スクリプトに追加します。rootとしてTomcatを「手助け」し、ファイルとディレクトリがrootに属し、適切に再起動するとTomcatユーザーが書き込みできないようにする人々に何度か噛まれました。リストの「sudo chown tomcat:tomcat temp work」を逃しましたか?または私は何かを見逃しましたか?
オラフ、

これらはTomcatによって作成されるため、tomcat:tomcat owner / groupを使用して作成されます。
CoverosGene 2009

パッケージ済みのjsvcパッケージを使用しない理由は何ですか?個人的には、ApacheのサーバーからTomcatをダウンロードしても、パッケージをインストールするだけです。
トロンダ

3

米国国防総省には、Tomcatのセキュリティガイダンスを総合的なWebサーバーセキュリティガイド(SRG)にまとめた優れたガイドがあります。あなたはここでより多くのセキュリティガイドを見つけることができます:

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


ありがとう、とてもフレンドリーな形式ではありません
Peter Sankauskas 09

リンクが壊れています。また、Tomcat固有のチェックリストも提供されていないようです。
ボブ

リンクを修正するために更新されました。『アプリケーションサービスガイド』には、Tomcat固有のものがまだいくつかあります。
ジムハンツィカー2013年

これはすばらしいページですが、2006年のものであるため、最新のTomcatについては一部の推奨事項が最新ではない場合があります。ディレクトリの権限に関する関連する段落を以下に示します。B.2セットアップと起動Tomcatは、シングルユーザーアプリケーションとして、または共有システムサービスまたはプロセスとして実行するように構成できます。Tomcatサービスまたはプロセスは、動作するためにホストプラットフォーム管理者またはroot権限を必要としません。Tomcatサーバーの悪用のリスクを制限するために、Tomcatサービスまたはプロセスの実行専用のカスタムホストアカウントが作成され、最小限のホストシステム権限が割り当てられます。
amos


1

テストからtomcat6パッケージをバックポートすることを真剣に検討します。パッケージをサブスクライブして、アーカイブにアップロードされている新しいバージョンの通知を受け取ることができます。(私はdebianパッケージに取り組んでいるので、少し偏っています)。

セキュリティマネージャーの下でwebappsを実行しようとしたことはありません。アプリケーションがポリシーに付属しておらず、率直に言って、自分で作成するのに時間がかかる操作だからです。あなたが偏執的であるならば、あなたは確かにそうすることができます。ほとんどの場合、tomcatを実行し、何かが動作するのを待ってから、ポリシーに例外を追加し、tomcatを再起動します。すすぎ、繰り返しなど

もちろん、rootとしてtomcatを実行しないでください。tomcatユーザーは、ログディレクトリまたは作業ディレクトリの外部に書き込むことはできません。webappsディレクトリには、実行するwebappsのみが含まれていることを確認してください。

私はいつもApacheの背後でTomcatを実行しています。これは、Apacheをより多くの人が使用し、バグをより早く見つけられるようにしたいという理由もあります。これはかなり希望的な考えであり、これがセキュリティの改善であることに依存すべきではありません。Apacheがもたらすのは構成可能性です。tomcatにはない、または効率的に実行できないモジュールがたくさんあります。mod_cache、mod_ssl、mod_securityが思い浮かびます。mod_jk、mod_proxy(およびmod_proxy_httpまたはmod_proxy_ajp)を選択できます。mod_jk(およびmod_proxy_ajp)は、効率の悪いhttpプロトコルではなく、バイナリAJPプロトコルを使用します。mod_jkの使用をお勧めします。


0

tomcat-users.xmlで管理者ロールのデフォルトパスワードを変更することを忘れないでください。これは非常に重要です。そうしないと、悪意のある人物がTomcatサーバーへのバックドアなどの制限された権限なしにアプリケーションをデプロイし、多くの悪いことを試みる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.