|
JAVA Developer 2003年10月号より転載
Tomcatなどサーブレットコンテナでのプラットフォームセキュリティというのは、どのように理解すればよいでしょうか。
システムのアーキテクチャによって千差万別だとは思いますが、基本を理解すれば難解な点はありません。
●単純な例
まず、大雑把なイメージをつかんでいただくために図3を例にして説明しましょう。TomcatをインストールしたCATALINA_HOME(※1)、J2SDKをインストールしたJAVA_HOME(※2)、独自アプリケーションのmyappからなります。
※1 以下、TomcatをインストールしたディレクトリをCATALINA_HOMEと表記します。
※2 以下、J2SDKをインストールしたディレクトリをJAVA_HOMEと表記します。
図3 Webアプリケーションの構成例
図3の例で説明すると、たとえばmy appディレクトリに自作アプリケーションをデプロイしますので、myapp/WEB-INF/classes/ディレクトリ以下のクラスファイルになにかを許可するセキュリティポリシーを設定します。
また、そのクラスはmyapp/WEB-INF/lib/ディレクトリのライブラリも利用するでしょうから、ライブラリに許可するセキュリティの設定も必要です。このとき、これらをまとめてmyapp/WEB-INF/ディレクトリ以下のクラスファイルおよびJARファイルへの設定としてまとめることも可能です。
このように、Webアプリケーションの実行ファイルを配置するディレクトリと、そのコードが許される振る舞いをポリシーに定義する、というのがコンテナ上で動作するプログラムのセキュリティになります。
それでは、具体的な利用方法の説明に移りましょう。
このセキュリティ機能を利用するには、まずセキュリティマネージャをインストールする必要があります。インストールとはいっても、別途ファイルをインストールするわけではなく、「セキュリティマネージャという機能を利用する」という程度に理解して差し支えありません。
●セキュリティマネージャの利用
Java仮想マシンの起動時に「-Djava.security.manager」を指定するだけでかまいません。
> java -Djava.security.manager MyApp
|
また、このオペレーションはプログラム的にコーディング可能です。プログラムの先頭で、次のようなコードを実行するようにしておけば、それだけでもセキュリティマネージャがインストールされます。
System.setSecurityManager(
new SecurityManager())
|
ここでSecurityManagerクラスの役割は、パーミッションの有無を実際にチェックするためのもので、checkXXXというチェックメソッドを多数提供しています。
しかし、用途に応じてセキュリティをカスタマイズする場合(前述のように概念的セキュリティを自作する場合)は、これらのチェックメソッドでは不十分なケースがあります。
そのため、このクラスを拡張して独自のセキュリティマネージャを作り、システムにインストールすることも可能です。
その例がjava.rmi.RMISecurityManagerで、RMIを利用する場合はこのクラスをsetSecurityManagerメソッドでインストールします。
前述のコマンドラインで独自のセキュリティマネージャをインストールする場合は、
> java -Djava.security.manager=java.
rmi.RMISecurityManager MyApp
|
のようにして起動します。
Tomcatの場合、起動スクリプトに「-security」オプションをつけるとセキュリティマネージャがインストールされます。
SecurityManagerクラスは、より正確にはjava.lang.SecurityManagerクラスです。java.securityパッケージではなくjava.langパッケージに含まれている点に注意してください。
関連リンク
JAVA Developer
定期購読のご案内
バックナンバー販売協力店
|
JAVA Developer 10月号
大特集
再入門 J2SE
特集2 Oracle9i Application Server
[特別企画]
・例外処理のメカニズム
・データベース移行術(2) 「Oracle→DB2編」
・Tomcatで試すJava2セキュリティ
|
|