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。 デフォルトの許可は、ノード上のすべての製品クライアント・コンテナーおよびアプレットに付与されます。 |
ポリシー・ファイル | ロケーション |
---|---|
spi.policy | profile_root/config/cells/cell_name このテンプレートは、サービス・プロバイダー・インターフェース (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 このテンプレートは、ライブラリー (Java ライブラリー・クラス) 用です。 共用ライブラリーは、複数の製品アプリケーションで使用するように定義できます。 library.policy ファイルのデフォルトの許可は空 です。 |
app.policy | profile_root/config/cells/cell_name app.policy ファイルは、 cell_name 内の node_name で実行されるすべてのエンタープライズ・アプリケーションに付与される、デフォルトの許可を定義します。 |
was.policy | profile_root/config/cells/cell_name このテンプレートは、アプリケーション固有の許可のためのものです。 was.policy は、エンタープライズ・アーカイブ (EAR) ファイルに組み込まれています。 |
ra.xml | rar_file_name/META-INF/was.policy.RAR。
このファイルには、ra.xml ファイルで定義された、許可の仕様を含めることができます。ra.xml ファイルは、RAR ファイルに組み込まれています。 |
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"各許可の詳細については、デベロッパー・キットの仕様を参照してください。
シンボル | 意味 |
---|---|
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"; };
シンボル | 意味 |
---|---|
file:${application} | アクセス権は、アプリケーション内のすべてのリソースに適用されます。 |
file:${jars} | アクセス権は、アプリケーション内のすべてのユーティリティー JAR ファイルに適用されます。 |
file:${ejbComponent} | アクセス権は、アプリケーション内のエンタープライズ Bean リソースに適用されます。 |
file:${webComponent} | アクセス権は、アプリケーション内の Web リソースに適用されます。 |
file:${connectorComponent} | アクセス権は、アプリケーション内およびスタンドアロンのコネクター・リソース内の両方のコネクター・リソースに適用されます。 |
シンボル | 意味 |
---|---|
${app.installed.path} | アプリケーションがインストールされているパス |
${was.module.path} | モジュールがインストールされているパス |
${current.cell.name} | 現在のセル名 |
${current.node.name} | 現在のノード名 |
${current.server.name} | 現在のサーバー名 |
新しい許可をどこに追加するかは、慎重に検討する必要があります。 許可の指定を間違えると、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 の場合は、編集前にポリシー・ファイルをリポジトリーから抽出してください。 ポリシー・ファイルの抽出後は、 ポリシー・ツールを使用してファイルを編集します。 変更したポリシー・ファイルはリポジトリーに入れ、他のノードと同期させる必要があります。
grant { permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential * ¥"*¥" ","read"; };IBM Developer Kit, Java Technology Edition ポリシー・ツールのバージョン 1.4.2 でロードされたポリシー・ファイル内に許可がある場合、以下のメッセージが表示されることがあります。
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"; }
com.ibm.ws.security.policy.*=all=enabled: com.ibm.ws.security.core.SecurityManager=all=enabled