WebSphere Application Server - Express, Version 6.1   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows, Windows Vista

             目次と検索結果のパーソナライズ化

Java 2 セキュリティー・ポリシー・ファイル

Java 2 Platform, Enterprise Edition (J2EE) バージョン 1.3 およびそれ以降の仕様には、コンテナー・プロバイダーとアプリケーション・コード間の責任について、 明確に定義されたプログラミング・モデルが備わっています。 このプログラミング・モデルを実行するには、Java 2 セキュリティー・マネージャーの使用をお勧めします。 一部のオペレーションは、アプリケーション・コードではサポートされていません。 これは、そのようなオペレーションが、コンテナーの振る舞いと操作を妨げるためです。 Java 2 セキュリティー・マネージャーは、 コンテナーとアプリケーション・コードの責任を実行するために製品で使用されます。

この製品は、ポリシー・ファイル管理をサポートしています。 この製品にある多数のポリシー・ファイルは、静的であるか動的であるかのいずれかです。 動的ポリシー は、特定のリソース・タイプに対するアクセス権のテンプレートです。 動的ポリシー・テンプレートには、相対コード・ベースが定義されていません。 コード・ベースは、デプロイメントおよびランタイム・データから動的に算出されます。

静的ポリシー・ファイル

ポリシー・ファイル ロケーション
java.policy

app_server_root/java/jre/lib/security/java.policy。デフォルトの許可は、すべてのクラスに付与されます。 このファイルのポリシーは、WebSphere Application Server によって起動されるすべてのプロセスに適用されます。

server.policy profile_root/properties/server.policy。 デフォルトの許可は、すべての製品サーバーに付与されます。
client.policy profile_root/properties/client.policy。 デフォルトの許可は、ノード上のすべての製品クライアント・コンテナーおよびアプレットに付与されます。
静的ポリシー・ファイルは、構成およびファイル複製サービスでは管理されません。 これらのファイルに加えられた変更はローカルなもので、Network Deployment セル内の他のノードに複製されることはありません。

動的ポリシー・ファイル

ポリシー・ファイル ロケーション
spi.policy

profile_root/config/cells/cell_name
/nodes/node_name/spi.policy

このテンプレートは、サービス・プロバイダー・インターフェース (SPI)、 または製品に組み込まれているサード・パーティー製リソースのためのものです。 SPI の例には、MQ Series の Java Message Service (JMS) および Java Database Connectivity (JDBC) ドライバーがあります。組み込みリソースのコード・ベースは、 構成 (resources.xml ファイル) およびランタイム・データから動的に決定され、 spi.policy ファイルで定義されている許可は、自動的にこれらのリソースおよびリソース・アダプターのクラスパスで指定された JAR ファイルに適用されます。 spi.policy ファイルのデフォルト許可は、java.security.AllPermissions です。

library.policy

profile_root/config/cells/cell_name/nodes
/node_name/library.policy

このテンプレートは、ライブラリー (Java ライブラリー・クラス) 用です。 共用ライブラリーは、複数の製品アプリケーションで使用するように定義できます。 library.policy ファイルのデフォルトの許可は です。

app.policy

profile_root/config/cells/cell_name
/nodes/node_name/app.policy

app.policy ファイルは、 cell_name 内の node_name で実行されるすべてのエンタープライズ・アプリケーションに付与される、デフォルトの許可を定義します。

was.policy

profile_root/config/cells/cell_name
/applications/ear_file_name/deployments/
application_name/META-INF/was.policy

このテンプレートは、アプリケーション固有の許可のためのものです。 was.policy は、エンタープライズ・アーカイブ (EAR) ファイルに組み込まれています。

ra.xml rar_file_name/META-INF/was.policy.RAR

このファイルには、ra.xml ファイルで定義された、許可の仕様を含めることができます。ra.xml ファイルは、RAR ファイルに組み込まれています。

app.policy ファイルおよび was.policy ファイルで指定された認可エントリーには、コード・ベースを定義する必要があります。 コード・ベースを定義せずに認可エントリーを指定すると、ポリシー・ファイルが正しくロードされず、アプリケーションで障害が起こる場合があります。 すべてのアプリケーションに対してアクセス権を認可する場合は、認可エントリーのコ ード・ベースとして file:${application} を使用します。

ポリシー・ファイルの構文

ポリシー・ファイルには、いくつかのポリシー・エントリーが含まれています。 次の例は、各ポリシー・エントリー・フォーマットを表しています。
grant [codebase <Codebase>] {
permission <Permission>;
 permission <Permission>;
permission <Permission>;
};

<CodeBase>: 	A URL.
			For example,  "file:${java.home}/lib/tools.jar"
						When [codebase <Codebase>] is not specified, listed 
               permissions are applied to everything.
						If URL ends with a JAR file name,  only the classes in the JAR file belong to the codebase.
If URL ends with "/", only the class files in the specified directory belong to the codebase.
If URL ends with "*", all JAR and class files in the specified directory belong to the codebase.
If URL ends with "-", all JAR and class files in the specified 
               directory and its subdirectories belong to the codebase.
<Permissions>: Consists from
							Permission Type  	: class name of the permission
     					Target Name      	: name specifying the target
     					Actions          	: actions allowed on target
			For example,
      			java.io.FilePermission "/tmp/xxx", "read,write"
各許可の詳細については、デベロッパー・キットの仕様を参照してください。

動的ポリシーの構文

エンタープライズ・アプリケーションの動的ポリシー・ファイルで、特定タイプのリソース用の許可を定義することができます。 このアクションは、製品の予約シンボル を使用して実現されます。 予約シンボルの有効範囲は、それが定義される場所によって異なります。 app.policy ファイルで許可を定義する場合、このシンボルは、 node_name で実行されるすべてのエンタープライズ・アプリケーションのすべてのリソースに適用されます。 META-INF/was.policy ファイルで許可を定義する場合、シンボルは、特定のエンタープライズ・アプリケーションにのみ適用されます。 以下の表に、コード・ベースで有効なシンボルがリストされています。
シンボル 意味
file:${application} アクセス権は、アプリケーション内のすべてのリソースに適用されます。
file:${jars} アクセス権は、アプリケーション内のすべてのユーティリティー Java アーカイブ (JAR) ファイルに適用されます。
file:${ejbComponent} アクセス権は、アプリケーション内の Enterprise JavaBeans (EJB) リソースに適用されます。
file:${webComponent} アクセス権は、アプリケーション内の Web リソースに適用されます。
file:${connectorComponent} アクセス権は、アプリケーション内のコネクター・リソースに適用されます。
コード・ベース・シンボルによって指定されるこれらのエントリーを除けば、各設定のモジュール名を指定することができます。以下に例を示します。
grant codeBase "file:DefaultWebApplication.war" {
   permission java.security.SecurityPermission "printIdentity";
 };

grant codeBase "file:IncCMP11.jar" {
permission java.io.FilePermission
"${user.install.root}${/}bin${/}DefaultDB${/}-", 
"read,write,delete";
};
上のコード例の 6 行目と 7 行目は、1 つの連続した行です。 相対コード・ベースは、META-INF/was.policy ファイルでのみ使用できます。 アクセス権リストと特定のタイプのリソースを関連付けるために、 製品で予約済みのいくつかのシンボルが定義されています。
シンボル 意味
file:${application} アクセス権は、アプリケーション内のすべてのリソースに適用されます。
file:${jars} アクセス権は、アプリケーション内のすべてのユーティリティー JAR ファイルに適用されます。
file:${ejbComponent} アクセス権は、アプリケーション内のエンタープライズ Bean リソースに適用されます。
file:${webComponent} アクセス権は、アプリケーション内の Web リソースに適用されます。
file:${connectorComponent} アクセス権は、アプリケーション内およびスタンドアロンのコネクター・リソース内の両方のコネクター・リソースに適用されます。
java.io.FilePermission アクセス権のパスと名前を指定するために、5 つの組み込みシンボルが提供されています。これらのシンボルによって、アクセス権を柔軟に指定することができます。 ファイルの絶対パスは、アプリケーションのインストール後に修正されます。
シンボル 意味
${app.installed.path} アプリケーションがインストールされているパス
${was.module.path} モジュールがインストールされているパス
${current.cell.name} 現在のセル名
${current.node.name} 現在のノード名
${current.server.name} 現在のサーバー名
重要: ${application} エントリーでは ${was.module.path} を使用しないでください。

新しい許可をどこに追加するかは、慎重に検討する必要があります。 許可の指定を間違えると、AccessControlException 例外が起こります。動的ポリシーは実行時にコード・ベースを解決するため、 問題が生じているポリシー・ファイルを特定するのは困難です。 許可は、必要なリソースだけに追加してください。 例えば、可能ならば、${application} ではなく ${ejbcomponent}etc を使用し、 app.policy ファイルではなく was.policy ファイルを更新します。

静的ポリシー・フィルター操作

静的ポリシーのフィルター操作のサポートは、ある程度限定されています。 app.policy ファイルおよび was.policy ファイルに、thefilterMask キーワードで filter.policy ファイルに定義された許可がある場合、ランタイムはアプリケーションから許可を除去し、ログに監査メッセージが記録されます。 ただし、app.policy および was.policy ファイルで定義された許可が複合許可 (例えば java.security.AllPermission) である場合、許可は除去されませんが、警告メッセージがログ・ファイルに書き込まれます。ポリシーのフィルター操作は Developer Kit の許可のみをサポートします。許可のパッケージ名は java または javax で始まります。

ランタイム・ポリシーのフィルター操作サポートは、 より強力なフィルター操作を提供するために用意されているものです。 app.policy ファイルおよび was.policy ファイルに、runtimeFilterMask キーワードで filter.policy ファイルに定義された許可がある場合、 アプリケーションにどのような許可が付与されていても、ランタイムはアプリケーションからその許可を除去します。 例えば、モジュールの 1 つに付与されている java.security.AllPermission 許可が was.policy ファイルにある場合でも、runtimeFilterMask などの指定された許可は、実行時に付与された許可から除去されます。

「管理、アプリケーション、およびインフラストラクチャーの保護 」パネルの「アプリケーションがカスタム許可を認可されたときに警告する」オプションが使用可能で、app.policy ファイルおよび was.policy ファイルにカスタム許可 (非 Developer Kit 許可。この場合の許可パッケージ名は java または javax で始まります) がある場合は、警告メッセージがログに記録されます。この場合、許可は除去されません。 app.policy ファイルおよび was.policy ファイルに AllPermission 許可がリストされている場合は、 警告メッセージがログに記録されます。

ポリシー・ファイルの編集

Developer Kit によって提供されるポリシー・ツール (app_server_root/java/jre/bin/policytool) を使用して、 それまでのポリシー・ファイルを編集することをお勧めします。Network Deployment の場合は、編集前にポリシー・ファイルをリポジトリーから抽出してください。 ポリシー・ファイルの抽出後は、 ポリシー・ツールを使用してファイルを編集します。 変更したポリシー・ファイルはリポジトリーに入れ、他のノードと同期させる必要があります。

ポリシー・ファイルに構文エラーがあると、 エンタープライズ・アプリケーションまたはサーバー・プロセスが始動に失敗する場合があります。 これらのポリシー・ファイルを編集する際は、注意が必要です。 例えば、ポリシーにおいて、ポリシー許可ターゲット名の末尾にスペースが含まれる場合、 IBM Developer Kit, Java Technology Edition バージョン 5 で許可を適切に構文解析することができません。次の例では、* ¥"*¥" " の最後の引用符の前にあるスペースに注意してください。
grant {
    permission javax.security.auth.PrivateCredentialPermission 
         "javax.resource.spi.security.PasswordCredential * ¥"*¥" ","read";
};
IBM Developer Kit, Java Technology Edition ポリシー・ツールのバージョン 5 でロードされたポリシー・ファイル内に許可がある場合、以下のメッセージが表示されることがあります。
Errors have occurred while opening the policy configuration.
View the warning log for more information.
あるいは、 以下のメッセージが警告ログに表示される場合があります。
Warning: Invalid argument(s) for constructor:
javax.security.auth.PrivateCredentialPermission.
この問題を解決するには、 許可を編集し、末尾のスペースを除去します。末尾のスペースを除去すると、 許可が適切にロードされます。次のコード・サンプルは、 訂正された許可を示しています。
grant {
    permission javax.security.auth.PrivateCredentialPermission 
          "javax.resource.spi.security.PasswordCredential * ¥"*¥","read";
}

トラブルシューティング

動的ポリシーをデバッグするには、 3 つの方法のいずれかを選択し、AccessControlException 例外の明細報告書を生成します。
  • トレース (RAS トレースにより構成)。次のトレース指定によってトレースを使用可能にします。
    重要: 下記のコマンドは、連続した 1 行となります。
    com.ibm.ws.security.policy.*=all=enabled:
    com.ibm.ws.security.core.SecurityManager=all=enabled
  • トレース (プロパティーにより構成)。 Java の java.security.debug プロパティーを指定します。 java.security.debug プロパティーの有効な値は次のとおりです。
    • Access。必要な許可、コード、スタック、およびコード・ベースの場所など、 すべてのデバッグ情報を出力します。
    • Stack。デバッグ情報 (必要な許可、コード、スタックなど) を印刷します。
    • Failure。必要な許可やコードなどのデバッグ情報を出力します。
  • ffdcffdc を使用可能にするには、Level=4 および LAE=true を変更して、ffdcRun.properties ファイルを変更します。 ログ・ファイルで、Access Violation キーワードを探してください。



関連概念
Java 2 セキュリティー
関連タスク
システム・リソースおよび API の保護 (Java 2 セキュリティー)
PolicyTool を使用したポリシー・ファイルの編集
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 6:25:35 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rsec_rpolicydir.html