WebLogic Security プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
WebLogic Server は、URL (Web)、エンタープライズ JavaBean (EJB)、およびコネクタのコンポーネントを保護する J2EE セキュリティをサポートしています。さらに、WebLogic Server では、デプロイメント記述子を使って追加のセキュリティ ポリシーを指定するコネクタ モデルが、URL および EJB のコンポーネントに拡張されています。
注意 : J2EE コネクタ アーキテクチャ仕様と同じように、J2EE では異なるアプリケーション タイプ (J2EE 1.4 仕様を参照) の Java 2 セキュリティのデフォルト パーミッションに対する要件が規定されています。これらの仕様は、http://java.sun.com/j2ee/download.html#platformspec で参照できます。
コネクタ仕様では、すでに次の例のように <security-permission>
タグを使って追加セキュリティ ポリシーを指定するデプロイメント記述子に対応しています (コード リスト 8-1 を参照)。
コード リスト 8-1 security-permission タグのサンプル
<security-permission>
<description> Optional explanation goes here </description>
<security-permission-spec>
<!--http://java.sun.com/j2se/1.4.2/docs/guide/security/PolicyFiles.html#FileSyntax
の構文にしたがって、単一の grant 文をここに記述する。このとき、「codebase」および「signedBy」句は使用しない。次に例を示す-->
grant {
permission java.net.SocketPermission "*", "resolve";
};
</security-permission-spec>
</security-permission>
rar.xml
ファイルでの <security-permission>
タグのサポートに加えて、WebLogic Server では weblogic.xml
ファイルと weblogic-ejb-jar.xml
ファイルに <security-permission>
タグを追加しています。これらは、コネクタ モデルを他の 2 つのアプリケーション タイプ (Web アプリケーションと EJB) に拡張し、すべてのコンポーネント タイプでセキュリティ ポリシーへのインタフェースを統一すると共に、将来の J2EE 仕様の変更に備えるためのものです。
Java セキュリティ マネージャと WebLogic Server を一緒に使用すると、Java 仮想マシン (JVM) 内で実行されているリソースのセキュリティを強化できます。Java セキュリティ マネージャは、任意のセキュリティ手順です。以下の節では、WebLogic Server で Java セキュリティ マネージャを使用する方法について説明します。
Java セキュリティ マネージャの詳細については、http://java.sun.com/j2se/1.5.0/docs/guide/security/index.html の Java セキュリティに関する Web ページを参照してください。
Java 2 (JDK 1.2 以降) 環境で WebLogic Server を実行する場合、WebLogic Server は Java 2 の Java セキュリティ マネージャを使用して、信頼性のないコードが Java セキュリティ ポリシー ファイルによって制限されているアクションを実行しないようにできます。
Java 仮想マシン (JVM) には、Java セキュリティ ポリシー ファイルでコードに制約を設定するセキュリティ メカニズムが組み込まれています。Java セキュリティ マネージャは、Java セキュリティ ポリシー ファイルを使用して一連のパーミッションをクラスに強制的に付与します。これらのパーミッションを使用すると、JVM のインスタンスで実行される指定されたクラスに特定の実行時処理を許可するかどうかを設定できます。多くの場合、脅威モデルでは悪意あるコードが JVM で実行されることを想定していないため、Java セキュリティ マネージャは必要ありません。しかし、信頼されていないサードパーティが WebLogic Server を使用し、信頼されていないクラスが実行される場合、Java セキュリティ マネージャが役立ちます。
WebLogic Server で Java セキュリティ マネージャを使用するには、WebLogic Server の起動時に -Djava.security.policy
引数と -Djava.security.manager
引数を指定します。-Djava.security.policy
引数は、Java 2 セキュリティ ポリシーを格納するファイル名を、相対パス名または絶対パス名で指定します。
WebLogic Server には、編集および使用可能なサンプル Java セキュリティ ポリシー ファイルが用意されています。そのファイルは、WL_HOME\server\lib\weblogic.policy
にあります。
セキュリティ ポリシー ファイルを指定しないで Java セキュリティ マネージャを有効にする場合、Java セキュリティ マネージャでは、$JAVA_HOME
\jre\lib\security
ディレクトリの java.policy
ファイルに定義されるデフォルトのセキュリティ ポリシーを使用します。
Java セキュリティ マネージャのセキュリティ ポリシーは、以下のいずれかの方法で定義します。
WebLogic Server デプロイメントで Java セキュリティ マネージャのセキュリティ ポリシー ファイルを使用するには、WebLogic Server の起動時に Java セキュリティ マネージャに weblogic.policy
ファイルの場所を指定する必要があります。これを行うには、サーバの起動に使用する Java コマンドラインで次の引数を設定します。
java.security.manager
‐ JVM に Java セキュリティ ポリシー ファイルを使用するよう指示します。java.security.policy
‐ JVM に使用する Java セキュリティ ポリシー ファイルの場所を指示します。この引数は、Java セキュリティ ポリシーの完全修飾名 (この場合は weblogic.policy
) です。
java...-Djava.security.manager \
-Djava.security.policy==c:\weblogic\weblogic.policy
注意 : java.security.policy
引数を指定するときには、Java セキュリティ マネージャによって weblogic.policy
ファイルだけが使用されるよう、=
の代わりに ==
を使用します。==
を使用すると、weblogic.policy
ファイルはデフォルトのセキュリティ ポリシーをオーバーライドします。単一の等号記号 (=
) を使用した場合、weblogic.policy
ファイルが既存のセキュリティ ポリシーに付加されます。
CLASSPATH
に追加のディレクトリがある場合、または追加のディレクトリにアプリケーションをデプロイしている場合は、それらのディレクトリに対する特定のパーミッションを weblogic.policy
ファイルに追加します。
weblogic.policy
ファイルを使用する際には、次のような注意事項を考慮することをお勧めします。
警告 : Java セキュリティ マネージャは、管理サーバと管理対象サーバの起動時に部分的に無効にされます。起動シーケンス中は、現在の Java セキュリティ マネージャが無効化され、checkRead()
メソッドが無効化された Java セキュリティ マネージャに置き換えられます。このメソッドを無効化した場合、起動シーケンスのパフォーマンスは飛躍的に向上しますが、セキュリティは最低レベルに下がります。WebLogic Server のスタートアップ クラスは、この部分的に無効にされた Java セキュリティ マネージャと一緒に実行されます。このため、スタートアップ クラスを十分にチェックして、セキュリティ (ファイルの読み取りなど) を検討する必要があります。
Java セキュリティ マネージャの詳細については、java.lang.SecurityManager
クラスの Javadoc を参照してください。
サーブレット、EJB、および J2EE コネクタ リソース アダプタのデフォルト セキュリティ ポリシーを、Java セキュリティ ポリシー ファイルで設定します。サーブレット、EJB、およびリソース アダプタのデフォルト セキュリティ ポリシーは、以下のコードベースで Java セキュリティ ポリシーに定義します。
"file:/weblogic/application/defaults/Web"
"file:/weblogic/application/defaults/EJB"
"file:/weblogic/application/defaults/Connector"
注意 : これらのセキュリティ ポリシーは、WebLogic Server の特定のインスタンスにデプロイされるすべてのサーブレット、EJB、およびリソース アダプタに適用されます。
特定のサーブレット、EJB、またはリソース アダプタのセキュリティ ポリシーを設定するには、セキュリティ ポリシーをそれらのデプロイメント記述子に追加します。デプロイメント記述子は、以下のファイルに定義されます。
注意 : リソース アダプタのセキュリティ ポリシーは J2EE 仕様に準拠し、サーブレットおよび EJB のセキュリティ ポリシーは WebLogic Server の J2EE 仕様拡張に準拠します。
コード リスト 8-2 は、セキュリティ ポリシーをデプロイメント記述子に追加するための構文です。
<security-permission>
<description>
Allow getting the J2EEJ2SETest4 property
</description>
<security-permission-spec>
grant {
permission java.util.PropertyPermission "welcome.J2EEJ2SETest4","read";
};
</security-permission-spec>
</security-permission>
注意 : 現時点では、<security-permission-spec>
タグは weblogic-application.xml
ファイルに追加できません。このタグを使用できるのは、weblogic-ejb-jar.xml
、rar.xml
、または weblogic.xml
ファイルの中だけです。また、<security-permission-spec>
属性では変数はサポートされていません。
レコーディング セキュリティ マネージャ ユーティリティを使用すると、WebLogic Server の起動時または動作中に発生するパーミッションの問題を検出できます。このユーティリティで出力されるパーミッションを Java セキュリティ ポリシー ファイルに追加して、発見されたパーミッションの問題を解決できます。レコーディング セキュリティ マネージャは BEA dev2dev Online で入手できます。
Java Authorization Contract for Containers (JACC) は J2EE 1.4 の一部です。JACC は、EJB およびサーブレットに対する Java 2 パーミッションベースのセキュリティ モデルです。JACC は、JSR-115 によって定義されます。
JACC は、WebLogic Server ドメイン内の EJB およびサーブレット コンテナに代替認可メカニズムを提供します。表 8-1 に示すように、JACC がコンフィグレーションされていると、WebLogic Security フレームワークのアクセス決定、裁決、およびロール マッピング機能は、EJB およびサーブレットの認可判定には使用されません。
WebLogic Server は、JSR-115 に完全に準拠しているものの、WebLogic 認可プロバイダほどには最適化されていない JACC プロバイダを実装します。Java JACC クラスは、アクセス決定を下す際に使用します。JSR-115 はロール マッピングに対処する方法を定義しないので、ロールとプリンシパルの間のマッピングには WebLogic JACC クラスが使用されます。JACC プロバイダの開発の詳細については、http://java.sun.com/j2ee/javaacc を参照してください。
注意 : WebLogic Server で使用される JACC クラスには、決定を下すためのポリシー オブジェクトの実装は含まれません。代わりに、JACC クラスは、java.security.Policy
オブジェクトに依存します。
表 8-1 には、JACC を有効にした場合に、どのプロバイダがロール マッピングに使用されるかを示します。
注意 : JACC は、ドメイン内のすべてのサーバで有効にするか、またはすべてのサーバで無効にしてください。これは、WebLogic Security フレームワークがレルム/ドメイン固有であるのに対し、JACC はサーバ固有であるためです。WebLogic JACC を使用するか、独自の JACC プロバイダを作成 (こちらを推奨) して JACC を有効にした場合は、EJB と Servlet の認可ポリシーをドメイン内で同期させる必要があります。たとえば、アプリケーションは、サーバを起動するたびに再デプロイされます。JACC がコンフィグレーションされたサーバを、コマンドラインに JACC オプションを指定せずに起動すると、EJB や Servlet のロール マッピングおよび認可判定にデフォルトの WebLogic 認可プロバイダが使用されます。
WebLogic JACC プロバイダは、JSR-115 に完全に準拠していますが、動的ロール マッピングをサポートしておらず、EJB およびサーブレット以外のリソースの認可判定は行いません。セキュリティ機能のパフォーマンスと柔軟性を向上させるため、SSPI ベースのプロバイダを使用することをお勧めします。
表 8-2 では、WebLogic JACC プロバイダと WebLogic 認可プロバイダの機能を比較します。
|
WebLogic JACC プロバイダをコマンドラインから有効にするには、以下のシステム プロパティと値のペアを指定する必要があります。
java.security.manager
値 :
不要java.security.policy
値 :
有効な weblogic.policy
ファイル (相対パス名または絶対パス名で指定)javax.security.jacc.PolicyConfigurationFactory
値 : weblogic.security.jacc.PolicyConfigurationFactoryImpl
javax.security.jacc.PolicyConfigurationFactory
値 : weblogic.security.jacc.PolicyConfigurationFactoryImpl
javax.security.jacc.policy.provider
値 : weblogic.security.jacc.simpleprovider.SimpleJACCPolicy
weblogic.security.jacc.RoleMapperFactory.provider
値 : weblogic.security.jacc.simpleprovider.RoleMapperFactoryImpl
たとえば、適切にコンフィグレーションされた weblogic.policy
ファイルがあれば、次のコマンドラインで WebLogic JACC プロバイダが有効になります。
# ./startWebLogic.sh -Djava.security.manager\
-Djava.security.policy=<pathname>/weblogic.policy \
-Djavax.security.jacc.policy.provider=\
weblogic.security.jacc.simpleprovider.SimpleJACCPolicy \
-Djavax.security.jacc.PolicyConfigurationFactory.provider=\
weblogic.security.jacc.simpleprovider.PolicyConfigurationFactoryImpl \
-Dweblogic.security.jacc.RoleMapperFactory.provider=\
weblogic.security.jacc.simpleprovider.RoleMapperFactoryImpl
注意 : デフォルトのセキュリティ ポリシーをオーバーライドするには、-Djava.security.policy==<pathname>/weblogic.security
を使用します。単一の等号記号 (=
) を使用した場合、weblogic.policy
ファイルが既存のセキュリティ ポリシーに付加されます。
![]() ![]() |
![]() |
![]() |