Tomcatのセキュリティリスクを解決するためには?
Tomcatの開発は現在SVNによってソース管理されています。このソースはTomcatのホームページからメニュー内「Get Involved」の「SVN Repositories」で管理ページに行くことができます。
今回インストールしているのはTomcat6.0.x系列なので、「Repository Structure」から「/tc6.0.x/」を開きます。
開いてみると、「branches」「tags」「trunk」と3つあります。
- 「branches」:通常気にする必要はない
- 「tags」:最新のリリース予定のバージョンまでのソースが管理されている
- 「trunk」:最新の開発版ソースが格納されている
今回は開発版のソースが必要なので、trunkからソースを取得することになります。
セキュリティ改善のための準備(SubversionとAntの環境構築)
それでは、Tomcatのインストールされているサーバでリリース前のソースを取得する準備をしましょう。サーバ上からsubversionコマンドを使えるように、パッケージが入っていない場合はインストールしましょう。yumコマンドでSubversionをインストールします。
yum install subversion
インストールが終わった、ないしは元から入っていれば、次にリポジトリを取得するディレクトリを作成します。ディレクトリの位置は任意に設定して構いませんが、今回は/home以下に作成します。
mkdir /home/repos
ディレクトリを作成したら、そのディレクトリに移動してリポジトリを取得します。
cd /home/repos svn co http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk
ファイルがダウンロードされ、チェックアウトが完了したら次に開発環境の構築に移ります。Tomcatは同じApache Projectに属する「Ant」というJavaのビルドツールを用いてビルドする必要があります。Antのダウンロード用ページを開いてください。
編集部注:Antについて詳しく知りたい読者は、「AntでJavaのビルドを簡単にする」をご参照ください。
適当な任意のディレクトリに移動して、「Current Release of Ant」からtar.gz形式のアーカイブのURLをコピーしてサーバ上にダウンロードします。
wget http://www.meisei-u.ac.jp/mirror/apache/dist/ant/binaries/apache -ant-1.7.0-bin.tar.gz
ファイルをダウンロードしたら解凍します。
tar -xzf apache-ant-1.7.0-bin.tar.gz
解凍してできたディレクトリを追加アプリケーションとして分かりやすく/opt以下に設置しておきます。
mv -f apache-ant-1.7.0 /opt/ ant-1.7.0
ディレクトリの移動が終わったら、Antを動かすための設定を行います。Antを利用するためには、環境変数にAntのインストールディレクトリ(/opt/ant-1.7.0)を定義した「ANT_HOME」が設定されていて、かつANT_HOMEのbinフォルダにパスが通っている必要があります。viエディタで「.bach_profile」を変更して環境変数を設定します。
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs JAVA_HOME=/usr/java/jdk1.5.0_12 ANT_HOME=/opt/ant1.7.0 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$ANT_HOME/bin export PATH JAVA_HOME ANT_HOME unset USERNAME
ファイルを変更したらプロファイルを再読み込みします。
. /root/.bach_profile
これで実行環境の作成は完了です。
アプリケーションを更新しよう
それでは、Tomcat開発版のビルドに取り掛かります。まず、リポジトリをダウンロードしたディレクトリへ移動します。
cd /home/repos/trunk
移動が完了したら、関係コンポーネントのダウンロードおよびビルドを行います。
ant download
コマンドが完了したら次に本体のビルドを行います。
ant
ビルドが完了したら、実際にアプリケーションのバージョンアップへ移ります。
注意!
この作業は別のサーバを用意し、アップデート後の影響を検証できるようにしてから行うことをお勧めします。
まずは、以前のバージョンのファイルのバックアップを取得するために一時的にTomcatを停止します。今回は起動用スクリプトがある環境なので、スクリプトで停止します。
/etc/rc.d/init.d/tomcat stop
次に、バックアップフォルダを作成しておきます。
mkdir /opt/tomcat6/backup/
バックアップフォルダを作成したら、バックアップするファイルを移動させます。大きなメジャーバージョンアップだとコンフィグ(設定)ファイルの構成が変わることもありますが、今回はマイナーバージョンのバージョンアップなのでコンフィグはそのまま利用して動作確認後に動作しなければ調整という形を取ります。
また、今回はwebapps以下のファイルについては管理マネージャを含めて利用しない前提で更新しません(管理マネージャについては連載第2回を参照してください)。
mv -f /opt/tomcat6/bin/ /opt/tomcat6/backup/ mv -f /opt/tomcat6/lib/ /opt/tomcat6/backup/
バックアップが完了したら、必要なファイルをコピーします。
cp -af /home/repos/trunk/output/build/bin/ /opt/tomcat6/ cp -af /home/repos/trunk/output/build/lib/ /opt/tomcat6/
最後に、binフォルダ以下のシェルファイルに実行権限がなくなっているので、実行権限を付与します。
chmod 755 /opt/tomcat6/bin/*.sh
以上が完了したらTomcatを再度起動させます。
/etc/init.d/tomcat restart
再度バージョンを調べるために「/opt/tomcat6/webapps/ROOT/jsp/test.jsp」を確認できるディレクトリに作成します。
<%@ page contentType="text/html" %> <% out.println( application.getServerInfo() ); %>
ファイルを作成したら、Webブラウザでアクセスします。
バージョンが更新されて「6.0-snapshot」になっていて、バージョンアップが完了していることが分かります。作成したjspファイルは再度削除しましょう。すべてのアプリケーションの動作を確認したうえで本番サーバの更新作業を行いましょう。
注意!
snapshotバージョンは正式リリースの安定版ではないので、何らかの不備がある場合があります。最新版でセキュリティリスクが解消されたら、戻しておく方がいいでしょう。
アプリケーションの解消によるセキュリティリスク解決はこれで完了です。
注意!
今回はすべてのセキュリティリスクを解消するために開発版を導入していますが、運用の状況に応じて利用していない機能の対策は遅らせても構わない場合があります。開発・運用チーム間でよく検討してからこのような対策は検討しましょう。
最後に次ページでは、Tomcatにありがちなセキュリティリスクを挙げ、その改善方法を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.