World Map
Java Service Wrapperは、御社Javaアプリケーション製品の安定した信頼性を高める最短最善の方法です。
  • Free Trial
  • Buy Now
セキュリティモデル

インデックス

Java セキュリティモデル と Java Service Wrapper を理解する

Java Service Wrapperは、パーミッション(アクセス権限)のシリーズを実装しており、 標準 Javaセキュリティモデルを採用しているWrapper APIへのアクセスを 完全にコントロールするために利用されます。

Javaアプリケーション内部から他のサービスをコントロールする

Wrapperでは、 適切なコントロールコードを送信することで、システム上のいかなるサービス上で、 開始、停止、問い合わせ(interrogate)、その他の運用の管理をすることが可能です。 これはとてもパワフルに強力でありますが、 不正に利用されると、サーバー上に深刻なセキュリティ問題を開けることにもなります。 この理由のため、デフォルトで、 [WrapperManager.sendServiceControlCode(...)] メソッドへのアクセスは無効になっています。 これを利用をするためには、JVMにセキュリティマネージャーをインストールして、 特定のパーミッション(アクセス権限)が与えられていることが必要です。

セキュリティマネージャーを設定する行為は、 セキュリティエラーでアプリケーション開始の失敗など、 多くの問題を引き起こすことになりますのでご注意ください。 アプリケーションに適切なパーミッション(アクセス権限)を許可するために、 様々な設定に入る必要があります。 セキュリティマネージャーに関する詳しい情報は、オラクルチュートリアルをご覧ください: http://docs.oracle.com/javase/tutorial/essential/environment/security.html

セキュリティマネージャーをセットアップする:

ご利用のJVMにセキュリティマネージャーをセットアップする一番簡単な方法は、 ご利用の [wrapper.conf] ファイルに次のプロパティを追加することです:

コンフィギュレーション設定例:
wrapper.java.additional.1=-Djava.security.manager
wrapper.java.additional.2=-Djava.security.policy=../conf/java.policy

java.security.manager:

最初のシステムプロパティ [ java.security.manager (J2SE 5.0) (JavaSE6) ] は、JVMが作成されるときにセキュリティマネージャーを作成するよう、Javaに指示します。

java.security.policy:

2つ目のシステムプロパティ [ java.security.policy (J2SE 5.0) (JavaSE6) ] は、アプリケーション内部で許可されるべきパーミッション(アクセス権限)を示すファイルの配置を指示します。

ポリシーファイルは、シンプルなテキストファイルです。

ポリシーファイル設定例:
// Give Wrapper classes full permissions
grant codeBase "file:../lib/wrapper.jar" {
            permission java.security.AllPermission;
};

// Grant various permissions to a specific service.
grant codeBase "file:../lib/-" {
            permission org.tanukisoftware.wrapper.security.WrapperServicePermission
"myservice", "interrogate,start,stop";
};

最初のブロックは、クラス[wrapper.jar]に完全なパーミッション(アクセス権限)を与えます。 これは、 Wrapperがアプリケーション全体を制御できるように、 つまりアプリケーションがすることは何でも全てWrapperから制御できるようになります。

2つ目のブロックは、特定のサービスにパーミッション(アクセス権限)を与えます。 ご利用の「lib」ディレクトリーの「jar」ファイルにある、 いかなる他のクラスが、 Wrapper経由で"myservice" サービスの開始、停止、問い合わせ(interrogate)を コールにさせることができることを意味しています。 もし、これがない場合には、コールは結果として 「SecurityExceptions」(セキュリティ例外)が投げられることになります。

WrapperManager.fireUserEvent API

Wrapperバージョン3.5.8で、 WrapperManager APIを通してユーザー定義イベントをコールする機能が追加されました。 これはディベロッパー(開発者)にとって、ユーザーイベントの利用を簡易にするには強力な機能でありますが、 もしプログラムが全てのユーザーイベントを自らコールするのを許可されるとするならば、 そこにはセキュリティの懸念もあることでしょう。

その懸念の解消を提供するには、 APIで、セキュリティマネージャーのポリシーファイルで定義できる WrapperUserEventPermissionクラスを利用します。

ポリシーファイルの例:
grant codeBase "file:../lib/some.jar" {
            permission org.tanukisoftware.wrapper.security.WrapperUserEventPermission "fireUserEvent", "-10, 50, 100-200, 555-";
}

上記の例は、次のユーザーイベントをコールする許可がある ライブラリ「../lib/some.jar」を装備しています:

  • -10」: もし、ある範囲の「開始番号」が省略されている場合、最初の値が例えば「1」で始まるシーケンスとして解釈します。

  • 50」: 単一の番号は個別に定義することができます

  • 100-200」: 範囲指定で「100〜200」間の全ての番号(100と200を含む)

  • 555-」: 範囲指定で「555〜」から、上限は有効なイベントナンバーまで。(555以上〜例:32767)

注意

一貫性を保つために、番号は並び替えされていなければなりません。 つまり、次のような並びは無効です: 「5, -4」、「1, 8-10, 7」、「9-, 7」など。 設定ミスでアクセス違反エラーが発生します。