Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティのプログラミング 11g リリース1(10.3.4) B61619-02 |
|
前 |
次 |
この節では、以下のトピックを取り上げます。
WebLogic Serverは、URL (Web)、Enterprise JavaBeans (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> <!-- 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 Serverを一緒に使用すると、Java仮想マシン(JVM)内で実行されているリソースのセキュリティを強化できます。Javaセキュリティ・マネージャは、任意のセキュリティ手順です。以下の節では、WebLogic ServerでJavaセキュリティ・マネージャを使用する方法について説明します。
Javaセキュリティ・マネージャの詳細は、http://java.sun.com/javase/6/docs/technotes/guides/security/index.html
のJavaセキュリティに関するWebページを参照してください。
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 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を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_HOMEのstartWebLogic.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 (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/サーブレットのロールとポリシーを管理コンソールで表示および変更できるかどうか |
---|---|---|---|
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プロバイダは、JSR-115に完全に準拠していますが、動的ロール・マッピングをサポートしておらず、EJBおよびサーブレット以外のリソースの認可判定は行いません。セキュリティ機能のパフォーマンスと柔軟性を向上させるため、SSPIベースのプロバイダを使用することをお薦めします。
表8-2では、WebLogic JACCプロバイダとWebLogic認可プロバイダの機能を比較します。
表8-2 WebLogic JACCプロバイダとWebLogic認可プロバイダの比較
WebLogic JACCプロバイダ | WebLogic認可プロバイダ |
---|---|
JACC仕様(JSR-115)を実装します |
付加価値の高いセキュリティ・フレームワーク |
EJBおよびサーブレットのみデプロイメント/認可判定を行います |
デプロイメント/認可判定を行います |
|
複数の認可/ロール・プロバイダで使用可能です |
デプロイメント時の静的ロール・マッピング |
動的ロール・マッピング |
Java EE許可でアクセスを制御します |
資格エンジンでアクセスを制御します |
ロール・マッピングおよびロール/プリンシパル・マッピングは、デプロイメント記述子でのみ変更可能です |
ロール・マッピングおよびロール/プリンシパル・マッピングは、デプロイメント記述子および管理コンソールで変更可能です |
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を使用します。単一の等号記号(=) を使用すると、ポリシー・ファイルは既存のセキュリティ・ポリシーに付加されます。 |