ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Security プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55520-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

8 Java セキュリティを使用しての WebLogic リソースの保護

この節では、以下のトピックを取り上げます。

Java EE セキュリティを使用しての WebLogic リソースの保護

WebLogic Server は、URL (Web)、エンタープライズ JavaBean (EJB)、およびコネクタのコンポーネントを保護する Java EE セキュリティをサポートしています。さらに、WebLogic Server では、デプロイメント記述子を使って追加のセキュリティ ポリシーを指定するコネクタ モデルが、URL および EJB のコンポーネントに拡張されています。


注意 :

Java EE コネクタ アーキテクチャ仕様と同じように、Java EE では異なるアプリケーション タイプ (Java EE 5.0 仕様を参照) の Java 2 セキュリティのデフォルト パーミッションに対する要件が規定されています。

コネクタ仕様では、すでに次の例のように <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) に拡張し、すべてのコンポーネント タイプでセキュリティ ポリシーへのインタフェースを統一すると共に、将来の Java EE 仕様の変更に備えるためのものです。

Java セキュリティ マネージャを使用しての WebLogic リソースの保護

Java セキュリティ マネージャと WebLogic Server を一緒に使用すると、Java 仮想マシン (JVM) 内で実行されているリソースのセキュリティを強化できます。Java セキュリティ マネージャは、任意のセキュリティ手順です。以下の節では、WebLogic Server で Java セキュリティ マネージャを使用する方法について説明します。

Java セキュリティ マネージャの詳細については、http://java.sun.com/javase/6/docs/technotes/guides/security/index.html の Java セキュリティに関する Web ページを参照してください。

Java セキュリティ マネージャの設定

Java 2 (SDK 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 にあります。


注意 :

このサンプル ポリシー ファイルは完全なものではなく、修正を加えてからでないと WebLogic Server を起動できません。特に、WLS やすべてのアプリケーションが適切に機能するには、コンフィグレーションに基づいて各種のパーミッションを追加する必要があります。

たとえば、WLS を正常に起動して Administration Console からアプリケーションをデプロイするには、weblogic.policy に以下のように追加する必要があります。

permission java.util.PropertyPermission '*', 'read'; 
permission java.lang.RuntimePermission '*'; 
permission java.io.FilePermission ' <<ALL FILES>>', 'read,write'; 
permission javax.management.MBeanPermission '*', '*';

セキュリティ ポリシー ファイルを指定しないで Java セキュリティ マネージャを有効にする場合、Java セキュリティ マネージャでは、$JAVA_HOME\jre\lib\security ディレクトリの java.policy ファイルに定義されるデフォルトのセキュリティ ポリシーを使用します。

Java セキュリティ マネージャのセキュリティ ポリシーは、以下のいずれかの方法で定義します。

全体的に使用する weblogic.policy ファイルの修正

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 ファイルはデフォルトのセキュリティ ポリシーをオーバーライドします。単一の等号記号 (=) を使用すると、ポリシー ファイルは既存のセキュリティ ポリシーに付加されます。

CLASSPATH に追加のディレクトリがある場合、または追加のディレクトリにアプリケーションをデプロイしている場合は、それらのディレクトリに対する特定のパーミッションを weblogic.policy ファイルに追加します。

weblogic.policy ファイルを使用する際には、次のような注意事項を考慮することをお勧めします。

  • weblogic.policy ファイルのバックアップを作成し、安全な場所に保管する。

  • オペレーティング システムを通じて、WebLogic Server デプロイメントの管理者は読み書き特権を持ち、それ以外のユーザはアクセス権を持たないように、weblogic.policy ファイルにパーミッションを設定する。


    警告 :

    Java セキュリティ マネージャは、管理サーバと管理対象サーバの起動時に部分的に無効にされます。起動シーケンス中は、現在の Java セキュリティ マネージャが無効化され、checkRead() メソッドが無効化された Java セキュリティ マネージャに置き換えられます。このメソッドを無効化した場合、起動シーケンスのパフォーマンスは飛躍的に向上しますが、セキュリティは最低レベルに下がります。WebLogic Server のスタートアップ クラスは、この部分的に無効にされた Java セキュリティ マネージャと一緒に実行されます。このため、スタートアップ クラスを十分にチェックして、セキュリティ (ファイルの読み取りなど) を検討する必要があります。

Java セキュリティ マネージャの詳細については、java.lang.SecurityManager クラス (http://java.sun.com/javase/6/docs/api/java/lang/SecurityManager.html) の Javadoc を参照してください。

アプリケーション型のセキュリティ ポリシーの設定

サーブレット、EJB、および Java EE コネクタ リソース アダプタのデフォルト セキュリティ ポリシーを、Java セキュリティ ポリシー ファイルで設定します。サーブレット、EJB、およびリソース アダプタのデフォルト セキュリティ ポリシーは、以下のコードベースで Java セキュリティ ポリシーに定義します。

  • サーブレット - "file:/weblogic/application/defaults/Web"

  • EJB - "file:/weblogic/application/defaults/EJB"

  • リソース アダプタ - "file:/weblogic/application/defaults/Connector"


    注意 :

    これらのセキュリティ ポリシーは、WebLogic Server の特定のインスタンスにデプロイされるすべてのサーブレット、EJB、およびリソース アダプタに適用されます。

アプリケーション固有のセキュリティ ポリシーの設定

特定のサーブレット、EJB、またはリソース アダプタのセキュリティ ポリシーを設定するには、セキュリティ ポリシーをそれらのデプロイメント記述子に追加します。デプロイメント記述子は、以下のファイルに定義されます。

  • サーブレット - weblogic.xml

  • EJB - weblogic-ejb-jar.xml

  • リソース アダプタ - rar.xml


    注意 :

    リソース アダプタのセキュリティ ポリシーは Java EE 仕様に準拠し、サーブレットおよび EJB のセキュリティ ポリシーは WebLogic Server の Java EE 仕様拡張に準拠します。

コード リスト 8-2 は、セキュリティ ポリシーをデプロイメント記述子に追加するための構文です。

コード リスト 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> 属性では変数はサポートされていません。

セキュリティ マネージャの印刷の使用

セキュリティ マネージャの印刷は、Java セキュリティ マネージャの拡張です。セキュリティ マネージャを印刷することにより、Java セキュリティ マネージャで実行している Java アプリケーションに対して必要となるパーミッションのすべてを識別するために使用できます。一度に 1 つずつ必要なパーミッションを識別する Java セキュリティ マネージャと異なり、セキュリティ マネージャの印刷によって、介入せずに必要なパーミッションのすべてを識別することができます。

Java セキュリティ マネージャの詳細については、http://java.sun.com/j2se/1.5.0/docs/guide/security/index.htm の Java セキュリティに関する Web ページを参照してください。


注意 :

プロダクション環境でセキュリティ マネージャの印刷を使用しないでください。不足しているパーミッションを識別するための開発のみを目的としています。

信頼性のないコードの処理は防止されません。


セキュリティ マネージャの印刷の起動引数

WebLogic Server で Java セキュリティ マネージャを使用するには、WebLogic Server の起動時に次の 2 つの引数を指定します。

  • -Djava.security.manager=weblogic.security.psm.PrintingSecurityManager

    Djava.security.manager 引数は、どの Java セキュリティ マネージャを起動するかを WebLogic Server に指示します。この場合、セキュリティ マネージャの印刷を使用します。

  • -Djava.security.policy

    -Djava.security.policy 引数は、Java 2 セキュリティ ポリシーを格納するファイル名を、相対パス名または絶対パス名で指定します。WebLogic Server には、編集および使用可能なサンプル Java セキュリティ ポリシー ファイルが用意されています。このファイルは、WL_HOME\server\lib\weblogic.policy にあります。

    デフォルトでは、startWebLogic.cmd(sh) に -Djava.security.policy=$WL_HOME/server/lib/weblogic.policy プロパティが含まれているので、別のJava セキュリティ ポリシー ファイルを使用しない限り、指定する必要はありません。


注意 :

このサンプル ポリシー ファイルは完全なものではなく、修正を加えてからでないと WebLogic Server を起動できません。特に、WLS やすべてのアプリケーションが適切に機能するには、コンフィグレーションに基づいて各種のパーミッションを追加する必要があります。

詳細については、以下の各節を参照してください。


セキュリティ マネージャの印刷を使用する WebLogic Server の起動

セキュリティ マネージャの印刷を使用する WebLogic Server を UNIX シェルから起動するには、DOMAIN_HOME における startWebLogic.sh スクリプトに次の引数を渡します。この例は、startWeblogic.sh からのデフォルト weblogic.policy の Java ポリシー ファイルを使用します。

startWeblogic.sh
-Xbootclasspath/p:$MWHOME/modules/com.bea.core.weblogic.security.psm_1.0.0.0.jar
-Djava.security.manager=weblogic.security.psm.PrintingSecurityManager

UNIX シェルなし Windows システムのためにまず、JAVA_OPTIONS に起動オプションを設定し、DOMAIN_HOMEstartWebLogic.cmd スクリプトを使用して、WebLogic Server を起動します。この例は、startWeblogic.cmd からのデフォルトの weblogic.policy の Java ポリシー ファイルを使用します。

$ set JAVA_OPTIONS=-Xbootclasspath/p:$MWHOME/modules/com.bea.core.weblogic.security.psm_1.0.0.0.jar
-Djava.security.manager=weblogic.security.psm.PrintingSecurityManager

$ DOMAIN_HOME\startWeblogic.cmd

出力ファイルの書き込み

セキュリティ マネージャの印刷は、コードソースおよびそれに関するパーミッションをリストする出力を生成します。 また、ポリシー ファイルにコピー アンド ペーストするためのアクセスを付与するポリシーも発生します。

デフォルトで、System.out に出力します。次の 2 つの引数で出力ファイルをコンフィグレーションすることができます。

  • -Doracle.weblogic.security.manager.printing.file=psm_perms.txt

  • -Doracle.weblogic.security.manager.printing.generated.grants.file=psm_grants.txt

最初のシステム引数の値は、セキュリティ マネージャを印刷することにより、不足しているパーミッションのメッセージのすべてを書き込むファイルです。2 番目の引数の値は、セキュリティ マネージャを印刷することにより、不足しているポリシー付与を書き込むファイルです。

たとえば、UNIX シェルなし Windows システムのために、引数を JAVA_OPTIONS に追加します。

$ set JAVA_OPTIONS=-Xbootclasspath/p:$MW_HOME/modules/com.bea.core.weblogic.security.psm_1.0.0.0.jar
-Djava.security.manager=weblogic.security.psm.PrintingSecurityManager
-Doracle.weblogic.security.manager.printing.file=psm_perms.txt

$ startWeblogic.cmd

出力ファイルの絶対パスを指定しない場合、DOMAIN_HOME に作成されます。

Java Authorization Contract for Containers の使用

Java Authorization Contract for Containers (JACC) は Java EE の一部です。JACC は、EJB およびサーブレットに対する Java 2 パーミッションベースのセキュリティ モデルです。JACC は、JSR-115 (http://www.jcp.org/en/jsr/detail?id=115) によって定義されます。

JACC は、WebLogic Server ドメイン内の EJB およびサーブレット コンテナに代替認可メカニズムを提供します。表 8-2 に示すように、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 クラスは、(http://java.sun.com/javase/6/docs/api/java/security/Policy.html) オブジェクトに依存します。

この節では、以下のトピックを取り上げます。

表 8-2 には、JACC を有効にした場合に、どのプロバイダがロール マッピングに使用されるかを示します。

表 8-1 JACC を有効にした場合

ステータス EJB/サーブレットの認可とロール マッピングに使用されるプロバイダ その他のすべての認可とロール マッピングに使用されるプロバイダ EJB/サーブレットのロールとポリシーを Administration Console で表示および変更できるかどうか

JACC が有効

JACC プロバイダ

WebLogic Security フレームワーク プロバイダ

不可

JACC が無効

WebLogic Security フレームワーク プロバイダ

WebLogic Security フレームワーク プロバイダ

可能 (設定による)



注意 :

JACC は、ドメイン内のすべてのサーバで有効にするか、またはすべてのサーバで無効にしてください。これは、WebLogic Security フレームワークがレルム/ドメイン固有であるのに対し、JACC はサーバ固有であるためです。WebLogic JACC を使用するか、独自の JACC プロバイダを作成 (こちらを推奨) して JACC を有効にした場合は、EJB と Servlet の認可ポリシーをドメイン内で同期させる必要があります。たとえば、アプリケーションは、サーバを起動するたびに再デプロイされます。JACC がコンフィグレーションされたサーバを、コマンドラインに JACC オプションを指定せずに起動すると、EJB や Servlet のロール マッピングおよび認可判定にデフォルトの WebLogic 認可プロバイダが使用されます。

WebLogic JACC プロバイダと WebLogic 認可プロバイダの比較

WebLogic JACC プロバイダは、JSR-115 に完全に準拠していますが、動的ロール マッピングをサポートしておらず、EJB およびサーブレット以外のリソースの認可判定は行いません。セキュリティ機能のパフォーマンスと柔軟性を向上させるため、SSPI ベースのプロバイダを使用することをお勧めします。

表 8-2 では、WebLogic JACC プロバイダと WebLogic 認可プロバイダの機能を比較します。

表 8-2 WebLogic JACC プロバイダと WebLogic 認可プロバイダの比較

WebLogic JACC プロバイダ WebLogic 認可プロバイダ

JACC 仕様 (JSR-115) を実装

付加価値の高いセキュリティ フレームワーク

EJB およびサーブレットのデプロイメント/認可判定を行う

デプロイメント/認可判定を行う

java.security.Policy オブジェクトを使用して判定を実施

複数の認可/ロール プロバイダで使用可能

デプロイメント時の静的ロール マッピング

動的ロール マッピング

Java EE パーミッションでアクセスを制御

資格エンジンでアクセスを制御

ロール マッピングおよびロール/プリンシパル マッピングは、デプロイメント記述子でのみ変更可能

ロール マッピングおよびロール/プリンシパル マッピングは、デプロイメント記述子および Administration Console で変更可能


WebLogic JACC プロバイダの有効化

WebLogic JACC プロバイダをコマンドラインから有効にするには、以下のシステム プロパティと値のペアを指定する必要があります。

  • プロパティ : java.security.manager

  • 値 : 不要

  • プロパティ : java.security.policy

  • 値 : 有効な weblogic.policy ファイル (相対パス名または絶対パス名で指定)

  • プロパティ : javax.security.jacc.PolicyConfigurationFactory.provider

  • 値 : weblogic.security.jacc.simpleprovider.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 を使用します。単一の等号記号 (=) を使用すると、ポリシー ファイルは既存のセキュリティ ポリシーに付加される。