ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティのプログラミング
12cリリース1(12.1.1)
B65926-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この項では、Javaセキュリティを使用したWebLogicリソースの保護について説明します。

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

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

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


注意:

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


コネクタ仕様では、すでに次の例のように<security-permission>タグを使って追加セキュリティ・ポリシーを指定するデプロイメント記述子に対応しています(例8-1を参照)。

例8-1 security-permissionタグのサンプル

<security-permission>
<description> Optional explanation goes here </description>
<security-permission-spec>
<!--
A single grant statement following the syntax of
http://java.sun.com/j2se/1.4.2/docs/guide/security/PolicyFiles.html#FileSyntax
without the "codebase" and "signedBy" clauses goes here. For example:
-->
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://download.oracle.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を正常に起動して管理コンソールからアプリケーションをデプロイするには、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://download.oracle.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://download.oracle.com/javase/6/docs/technotes/guides/security/overview/jsoverview.htmlの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セキュリティ・フレームワークのアクセス決定、裁決、およびロール・マッピング機能は、EJBおよびサーブレットの認可判定には使用されません。

WebLogic Serverは、JSR-115に完全に準拠しているものの、WebLogic認可プロバイダほどには最適化されていないJACCプロバイダを実装します。Java JACCクラスは、アクセス決定を下す際に使用します。JSR-115はロール・マッピングに対処する方法を定義しないので、ロールとプリンシパルの間のマッピングにはWebLogic JACCクラスが使用されます。JACCプロバイダの開発については、http://www.oracle.com/technetwork/java/javaee/javaacc-138697.htmlを参照してください。


注意:

WebLogic Serverで使用されるJACCクラスには、決定を下すためのポリシー・オブジェクトの実装は含まれません。かわりに、JACCクラスは、java.security.Policyオブジェクト(http://download.oracle.com/javase/6/docs/api/java/security/Policy.html)に依存します。


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

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

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

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

JACCは有効です

JACCプロバイダ

WebLogicセキュリティ・フレームワーク・プロバイダ

いいえ

JACCは有効ではありません

WebLogicセキュリティ・フレームワーク・プロバイダ

WebLogicセキュリティ・フレームワーク・プロバイダ

設定によっては、はい



注意:

JACCは、ドメイン内のすべてのサーバーで有効にするか、またはすべてのサーバーで無効にしてください。これは、WebLogicセキュリティ・フレームワークがレルム/ドメイン固有であるのに対し、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許可でアクセスを制御します

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

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

ロール・マッピングおよびロール/プリンシパル・マッピングは、デプロイメント記述子および管理コンソールで変更可能です


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