このトピックは、Java 2 セキュリティー・ポリシーのマイグレーションに関するガイダンスとして使用してください。
前の WebSphere Application Server リリース
WebSphere Application Server では、Java 2 セキュリティー・マネージャーをサーバー・ランタイムに使用して、エンタープライズ・アプリケーションが System.exit および System.setSecurityManager メソッドを呼び出さないように設定されています。 これら 2 つの Java アプリケーション・プログラミング・インターフェース (API) は、エンタープライズ・アプリケーションによって呼び出された場合、望ましくない結果をもたらします。 例えば、System.exit API は 、Java 仮想マシン (アプリケーション・サーバー・プロセス) が早期に終了する原因となります。 これは、アプリケーション・サーバーにとっては、望ましくない操作です。
Java 2 セキュリティーを正しくサポートするには、すべてのサーバーのランタイムは、privileged とマークされ (適切な位置に doPrivileged() API 呼び出しが挿入されます)、デフォルトの許可セットまたはポリシーを識別する必要があります。 アプリケーション・コードは特権を保持せず、ポリシー・ファイルで定義された許可に従います。doPrivileged の インスツルメンテーションは重要であり、Java 2 セキュリティーをサポートするために必要です。 これがない場合、アプリケーション・コードは、 サーバー・ランタイムに必要な許可を与えられていなければなりません。この状態は、 許可検査を実行するために Java 2 セキュリティーによって使用される設計とアルゴリズムによるものです。 Java 2 セキュリティー検査の許可アルゴリズムを参照してください。
Java 2 セキュリティー・ポリシーの種類に関係なく、アプリケーション・コードは、これらの許可へのアクセスを拒否されます。 ただし、サーバーのランタイムには、これらの許可が付与されています。これ以外のすべての 許可検査は、実行されません。
ただ、すべての製品サーバー・ランタイムが特権ありとして適切にマークされているわけではありません。アプリケーション・コードには、先にリストした 2 つのほかに、すべての許可を与える必要があります。 これを行わないと、エンタープライズ・アプリケーションが実行できない場合があります。エンタープライズ・ アプリケーションに対するこの Java 2 セキュリティー・ポリシーは、非常に柔軟です。
変更内容
Java 2 セキュリティーは、WebSphere Application Server では完全にサポートされており、すべての許可が実行されます。
エンタープライズ・アプリケーションに対するデフォルトの Java 2 セキュリティー・ポリシーは、
Java 2 Platform, Enterprise Edition (J2EE) バージョン 1.4 仕様で定義されている推奨許可セットです。エンタープライズ・アプリケーションに許可されているデフォルトの Java 2 セキュリティー・ポリシーについては、profile_root/config/cells/cell_name/nodes/node_name/app.policy ファイルを参照してください。このポリシーは、前のリリースと比較すると、
はるかに厳格です。
Java 2 セキュリティーは、WebSphere Application Server では完全にサポートされており、すべての許可が実行されます。
エンタープライズ・アプリケーションに対するデフォルトの Java 2 セキュリティー・ポリシーは、
Java 2 Platform, Enterprise Edition (J2EE) バージョン 1.4 仕様で定義されている推奨許可セットです。エンタープライズ・アプリケーションに認可されているデフォルトの Java 2 セキュリティー・ポリシーについては、profile_root/config/cells/cell_name/nodes/node_name/app.policy ファイルを参照してください。このポリシーは、前のリリースと比較すると、
はるかに厳格です。
すべてのポリシーは、宣言により施行されます。製品のセキュリティー・マネージャーは、
ポリシー・ファイルで宣言されるすべてのポリシーに従います。この規則には 1 つの例外があり、
エンタープライズ・アプリケーションは、profile_root/config/cells/cell_name/filter.policy ファイルで宣言された許可へのアクセスを拒否されます。
すべてのポリシーは、宣言により施行されます。製品のセキュリティー・マネージャーは、
ポリシー・ファイルで宣言されるすべてのポリシーに従います。この規則には 1 つの例外があり、
エンタープライズ・アプリケーションは、profile_root/config/cells/cell_name/filter.policy ファイルで宣言された許可へのアクセスを拒否されます。
アプリケーション・コードで、セキュリティー・マネージャーを設定するために setSecurityManager アクセス権を使用しないでください。アプリケーションが setSecurityManager アクセス権を使用すると、 WebSphere Application Server 内の内部セキュリティー・マネージャーと競合します。RMI のためにアプリケーションで セキュリティー・マネージャーを設定する必要がある場合、WebSphere Application Server 管理コンソール内の「管理、アプリケーション、およびインフラストラクチャーの保護」ページで「Java 2 セキュリティーを使用してアプリケーションのアクセスをローカル・リソースに制限する」オプションを使用可能にする必要もあります。その後、WebSphere Application Server はセキュリティー・マネージャーを登録します。アプリケーション・コードでは、 このセキュリティー・マネージャーが System.getSecurityManager() アプリ ケーション・プログラミング・インターフェース (API) を使用して登録され ていることを確認することができます。
システム・プロパティーのマイグレーション
Java 2 セキュリティー・ポリシーのマイグレーション
Java ポリシー・ファイルを WebSphere Application Server バージョン 6.0.x 以降に 自動的にマイグレーションする簡単な方法はありません。これは、同じポリシー・ファイル内に、システム許可とアプリケーション許可が混在しているためです。 エンタープライズ・アプリケーションの Java 2 セキュリティー・ ポリシーを手動で was.policy または app.policy ファイルにコピーします。ただし 、Java 2 セキュリティー・ポリシーを was.policy ファイルにマイグレーションすることを推奨します。 これは、絶対コード・ベースの代わりにシンボルまたは相対コード・ベースが使用されるためです。 このプロセスには多くの利点があります。app.policy ファイル内の許可は、app.policy ファイルの所属するノード上で実行するすべてのエンタープライズ・アプリケーションに適用されますが、was.policy で定義された許可は、特定のエンタープライズ・アプリケーションのみに付与します。
ポリシー管理に関する詳細は、Java 2 セキュリティー・ポリシー・ファイル のトピックを参照してください。
次の例は、前のリリースからの Java 2 セキュリティー・ポリシーのマイグレーションを示します。ここには、 app1.ear エンタープライズ・アプリケーションの Java 2 セキュリティー・ポリシー・ファイル、およびシステム 許可 (Java 仮想マシン (JVM) および製品サーバー・ランタイムに与えられている許可) が含まれています。
Java 2 セキュリティー・ポリシー・ファイルのデフォルトのロケーションは、
profile_root/properties/java.policy です。
デフォルトの許可は、
分かりやすいよう省略されています。
Java 2 セキュリティー・ポリシー・ファイルのデフォルトのロケーションは、
profile_root/properties/java.policy
です。
デフォルトの許可は、
分かりやすいよう省略されています。
// For product Samples grant codeBase "file:${app_server_root}/installedApps/app1.ear/-" { permission java.security.SecurityPermission "printIdentity"; permission java.io.FilePermission "${app_server_root}${/}temp${/}somefile.txt", "read"; };
図をわかりやすくするため、この例では、すべての許可がアプリケーション・レベル許可としてマイグレーションされています。ただし、コンポーネント・レベル (Web、エンタープライズ Bean、コネクター、 またはユーティリティー JAR コンポーネント・レベル) で、より細分性のあるレベルの許可を与えることができます。 または、特定のコンポーネントに許可を与えることができます。