本連載「Tomcatはどこまで“安全”にできるのか?」では、いままでTomcat 6の新機能と、できるだけセキュアなWebアプリケーションサーバをTomcatで構築するためのヒントをいろいろと紹介してきました。
今回は、Tomcatセキュリティ連載の最後として、「セキュリティマネージャ」を利用したTomcatでのセキュリティの確保について解説していきたいと思います。
「セキュリティマネージャ」(java.lang.SecurityManagerクラスが使われる)とは、信頼されていないコードを実行することでローカルファイルシステム上にあるファイルへとアクセスしたり、Javaアプレットのダウンロード元のホスト以外と通信して情報を送受信したりといったことができないように、Javaアプレットがサンドボックス(※)内で実行できるようにする機構です。
※外部に影響を出さないように設計された保護領域のこと、サンドボックスで実行されるJavaアプレットはサンドボックス外のファイルやプロセスからは隔離され、外部への操作は禁止される
セキュリティマネージャがWebブラウザでの信頼されていないアプレットの実行を防ぐのと同じように、Tomcatではセキュリティマネージャを利用することにより、「トロイの木馬」タイプのサーブレット、JSP、JSP内のBean、タグライブラリからほかのサーブレットやファイル・データを保護できます。また、不注意によって発生した間違いからもデータを保護できます。
このようなセキュリティ保護はTomcatのクラスローダがセキュリティポリシーを読み込むことで実装され、以下のようないくつかのケースで有用なメリットを提供します。
今回はこのようなセキュリティ保護機能、セキュリティマネージャをTomcatで利用してみましょう。
それでは、具体的にセキュリティマネージャを利用して実際にどのようなことができるのかを試してみましょう。
まずは、実際にセキュリティ上“問題”のあるコードを作成してみましょう。例えば、以下のような内容のJSP(「webapps/ROOT/jsp/」に「badjsp.jsp」という名前で配置)が何かの手違いで偶然存在したとします。
<% System.exit(0); %>
このJSPは「Tomcatの停止」を意味するスクリプトです。こんなスクリプトがあったら、このファイルにアクセスされるたびにTomcatが停止するでしょう。
通常こんなファイルは作成されることはないでしょうし、本当にそんなことができるのかと疑問に思われるかもしれませので、実際に動作させて試してみます。起動スクリプトを利用して現時点でTomcatが正常に起動していることを確認してみます。「/etc/init.d/tomcat status」を実行します。
[root@www jsp]# /etc/init.d/tomcat status jsvc (pid 15424 15423) を実行中...
Tomcatをデーモン化しているjsvcが実行されているメッセージが表示され、正常に稼働していることが確認できました。
編集部注:Tomcatのデーモン化とjsvcについて詳しく知りたい読者は、連載第1回の「Tomcatを自動的に起動するには?」をご参照ください。
起動していることも確認できたので、実際にこのJSPをWebブラウザから開いてみましょう。
Tomcatは稼働中のはずで、確かにJSPは存在しているのに、なぜか「ページが表示できない」というメッセージが現れました。一体なぜでしょうか? そうです。本当にTomcatが停止されたからです。
再度起動スクリプトからTomcatが停止してしまったのかどうか、確認してみます。「/etc/init.d/tomcat status」を再度実行してみると、以下のようなデーモンが停止しているメッセージが表示されました。
[root@www jsp]# /etc/init.d/tomcat status jsvc は停止しています
あんな簡単なJSPで本当にTomcatが停止させられてしまいました。悪意のない間違いだったとしても、こんなスクリプトを設置されたら一大事ですね。
こんな問題にどのようにして対処すればいいのでしょうか? このような実装は危険である旨を皆に伝えて利用を禁止しますか? すべてのコードに含まれる危険そうなスクリプトをすべて調べ上げますか?
いつかミスを生み出す可能性のある方法を取るよりも、セキュリティマネージャを利用して、このようなことが起こらないようにセキュアなコーディングのルールを定義して、サーバの運用を行いましょう。
まずは、Tomcatの起動オプションを変更して、セキュリティマネージャが“有効”になるようにします。Tomcatの起動用スクリプトを編集しましょう。viで「/etc/init.d/tomcat」を開いてください。
[root@www ~]# vi /etc/init.d/tomcat
起動用スクリプトを開いたら、Tomcatのオプション指定を「セキュリティマネージャを利用する」ように変更します。Tomcatのオプション(本連載で作成した起動用スクリプトでいうと、「CATALINA_OPTS=」)のところに「-Djava.security.manager」と「-Djava security.policy=$CATALINA_HOME/conf/catalina.policy」の2つを追加します。以下は変更例です。
CATALINA_OPTS="-Djava.security.manager -Djava.security.policy=$CATALINA_HOME/conf/catalina.policy"
変更が完了したらファイルを保存して、起動用スクリプトからTomcatを再起動します。「/etc/init.d/tomcat restart」を実行してください。
[root@www ~]# /etc/init.d/tomcat restart
これでセキュリティマネージャの利用設定は完了です。現時点では、初期状態のセキュリティマネージャですが、セキュリティマネージャを利用しない場合に比べてかなりセキュアな状態にあるといえます。
次ページでは、実際にセキュリティマネージャの効果を確認して、Tomcatのセキュリティポリシーについて解説します。
Copyright © ITmedia, Inc. All Rights Reserved.