Java 2 セキュリティーでは、 ポリシー・ベースの、精密なアクセス制御メカニズムが提供されます。 このメカニズムにより、 プロテクトされた特定のシステム・リソースにアクセスが許可される前にアクセス権の検査が行われるため、 全体のシステム保全性が高まります。 Java 2 セキュリティーは、 ファイル入出力、ソケット、およびプロパティーなどのシステム・リソースへのアクセスを保護します。 Java 2 Platform, Enterprise Edition (J2EE) セキュリティー・ガードは、サーブレット、JavaServer Pages (JSP) ファイルおよび Enterprise JavaBeans (EJB) メソッドのような Web リソースにアクセスします。
Java 2 セキュリティーは比較的新しいセキュリティーであるため、 多くの既存アプリケーション、または新規アプリケーションでも 、Java 2 セキュリティーが実行できる非常に精密なアクセス制御プログラミング・モデルを 使用する準備が整っていない場合があります。管理者は、 アプリケーションが Java 2 セキュリティーに対応していない場合 、Java 2 セキュリティーを使用可能にすることによって起こりうる結果を理解しておく必要があります。 Java 2 セキュリティーにより、 アプリケーション開発者および管理者が考慮すべきいくつかの新規要件が発生します。
Java 2 セキュリティーは、 サポートされていますが、デフォルトでは使用不可になっています。Java 2 セキュリティーおよび管理セキュリティーは、 互いに独立して構成できます。 管理セキュリティーを使用不可にしても、Java 2 セキュリティーは自動的には使用不可になりません。 Java 2 セキュリティーは明示的に使用不可にする必要があります。
ユーザー・アプリケーション、またはサード・パーティー・ライブラリーが用意されていない場合は 、Java 2 セキュリティーを使用可能にすると問題が発生します。 これらの問題は、システム・ログまたはトレース・ファイルで、Java 2 セキュリティー AccessControlExceptions として確認できます。 ご使用のアプリケーションが Java 2 セキュリティーに対応しているかどうか不確かな場合は、 まず Java 2 セキュリティーを使用不可にしてアプリケーションをインストールし、 適切に動作するかどうかを確認してください。
製品には必要な Java 2 セキュリティー doPrivileged API が配備されていない可能性があるため、これらのポリシー・ファイルが形成するポリシーに さらに制限を加えることはできません。 デフォルト・ポリシーが制限的なポリシーとなります。 追加の権限を付与することはできますが、デフォルトに さらに制限を加えることはできません。これは、WebSphere Application Server で AccessControlExceptions 例外が生成されるためです。 この製品では、 上記で示したポリシー・ファイルで定義されたデフォルト・ポリシーよりもさらに制限的なポリシーはサポートしていません。
Java プロセス用のセキュリティー・ポリシーを定義するには、 いくつかのポリシー・ファイルを使用します。 これらのポリシー・ファイルは、静的 (コード・ベースはポリシー・ファイル内で定義される) であり 、IBM Developer Kit, Java Technology Edition によって 提供されるデフォルト・ポリシー形式です。 エンタープライズ・アプリケーションのリソースおよびユーティリティー・ライブラリーについては 、WebSphere Application Server は動的ポリシーをサポートしています。 コード・ベースはデプロイメント情報を基にして動的に計算され、 許可は実行時にテンプレートのポリシー・ファイルに基づいて認可されます。 詳しくは、Java 2 セキュリティー・ポリシー・ファイル を参照してください。
ポリシー・ファイルに構文エラーがあると、アプリケーション・サーバー・プロセスが失敗するので、これらのポリシー・ファイルの編集には注意が必要です。
アプリケーションが Java 2 セキュリティーに対応していない場合、 アプリケーションの一部として was.policy ファイルがアプリケーション・プロバイダーに用意されていない場合、 またはアプリケーション・プロバイダーが、期待されている許可を伝達しない場合、 実行時にアプリケーションが Java 2 セキュリティー・アクセス制御例外を引き起こす可能性が高くなります。 アプリケーションが Java 2 セキュリティーに対応しているかが不明である場合があります。 アクセス制御例外が発生するアプリケーションのトラブルシューティングに役立つ、いくつ かのランタイム・デバッグ援助機能があります。 詳細については、『Java 2 セキュリティー・デバッグ援助機能』を参照してください。 このようなアプリケーションの処理についての詳細および戦略については、Java 2 セキュリティーに対応していないアプリケーションの取り扱い を参照してください。
管理セキュリティー設定で Java セキュリティーが使用可能である場合、 インストールされたセキュリティー・マネージャーは、現在、 システムでないスレッドに対して、modifyThread 許可、 および modifyThreadGroup 許可を検査しないことに注意してください。 Web および Enterprise JavaBeans (EJB) アプリケーションのコードでスレッドを作成または変更できるようにすると、 そのコンテナーの他のコンポーネントに悪影響を与える可能性があり、エンタープライズ Bean のライフ・サイクルとトランザクションを管理するコンテナーの機能が影響を受けることがあります。
アプリケーション開発者は、 追加のアクセス権を付与する必要があるかどうかを知るために、 デフォルトの WebSphere ポリシーで与えられるアクセス権、および開発するアプリケーションが 呼び出す SDK API のアクセス権要件について理解する必要があります。 リソース・セクションにある「Permissions in the Java 2 SDK」解説には、 各 API に必要なアクセス権が記載されています。
アプリケーション・プロバイダーにより、アプリケーションは 前述のデフォルト・ポリシーで与えられたアクセス権を保持していると想定されます。 アプリケーションが、WebSphere ポリシーの範囲外のリソースにアクセスする場合、 追加の Java 2 セキュリティー・アクセス権をそのアプリケーションに付与する必要があります。
他の動的な WebSphere ポリシー・ファイルの 1 つ、または従来の java.policy 静的ポリシー・ファイルの 1 つで追加 のアクセス権をアプリケーションに付与することができますが、 was.policy ファイル (EAR ファイルに組み込まれています) は、追加されたアクセス権がそれを必要とするアプリケーションのみに適用されることを保証します。 アクセス権の有効範囲をそのアクセス権を必要とするアプリケーション・コード以外にも定義すると、 本来ならアクセス権を持っていないコードが、特定のリソースにアクセスできるようになります。
アプリケーション・コンポーネントを開発する場合、実際には複数の .ear ファイルに含まれる可能性があるライブラリーのように、ライブラリー開発者は、そのアプリケーション・アセンブラーで必要とされる必須の Java 2 アクセス権を文書化する必要があります。 ライブラリー・タイプ・コンポーネント用の was.policy ファイルは、存在しません。 開発者は、アプリケーション・プログラミング・インターフェース (API) 文書またはその他の外部文書を介して必須のアクセス権を伝達する必要があります。
コンポーネント・ライブラリーを複数のエンタープライズ・アプリケーションで共用する場合は 、app.policy ファイルで、ノード上のすべてのエンタープライズ・アプリケーションに 必要なアクセス権を与えることができます。
アクセス権がコンポーネント・ライブラリーにより内部でしか使用されず、 そのアクセス権によって保護されるリソースへのアクセス許可がアプリケーションには付与されない場合、そのコードに特権があることを示す必要があります。 詳しくは、AccessControlException を参照してください。 ただし、doPrivileged 呼び出しの挿入が不適切な場合に、セキュリティー・ホールが開く恐れがあります。 doPrivileged 呼び出しの影響を理解し、適切に判断してください。
Java 2 セキュリティー・ポリシー・ファイル の 動的ポリシー・ファイルについてのセクション に、was.policy ファイル内のアクセス権限を 実行時に付与する方法が説明されています。
Java 2 セキュリティーと使用するアプリケーションの開発は新しい技術であり、これまでアプリケーション開発者には必要とされなかったセキュリティーについての認識が要求されます。 Java 2 セキュリティー・モデルおよびアプリケーション開発の含意については、 範囲外のためこのセクションでは説明しません。 作業を始める際には、以下の URL を参考にしてください。http://java.sun.com/j2se/1.5.0/docs/guide/security/index.html
ただし、Java 仮想マシンの com.ibm.websphere.java2secman.norethrow プロパティーの 値が true に設定されている場合、 セキュリティー・マネージャーは AccessControl 例外を作成しません。 この情報はログに記録されます。
サーバーに com.ibm.websphere.java2secman.norethrow プロパティーを設定するには、WebSphere Application Server 管理コンソールを表示して、「サーバー」>「アプリケーション・サーバー」>「server_name」とクリックします。 「サーバー・インフラストラクチャー」の下で、「Java およびプロセス管理」>「プロセス定義」をクリックします。「追加プロパティー」の下で、「Java 仮想マシン」>「カスタム・プロパティー」>「新規」とクリックします。「名前」フィールドに、com.ibm.websphere.java2secman.norethrow と 入力します。 「値」フィールドに、true と入力します。
ノード・エージェントに com.ibm.websphere.java2secman.norethrow プロパティーを設定するには、WebSphere Application Server 管理コンソールを表示して、「システム管理」>「ノード・エージェント」>「node_agent_name」とクリックします。 「サーバー・インフラストラクチャー」の下で、「Java およびプロセス管理」>「プロセス定義」をクリックします。「追加プロパティー」の下で、「Java 仮想マシン」>「カスタム・プロパティー」>「新規」とクリックします。「名前」フィールドに、com.ibm.websphere.java2secman.norethrow と 入力します。 「値」フィールドに、true と入力します。
デプロイメント・マネージャーに com.ibm.websphere.java2secman.norethrow プロパティーを 設定するには、WebSphere Application Server 管理 コンソールを表示して、「システム管理」>「デプロイメント・マネージャー」とクリックします。 「サーバー・インフラストラクチャー」の下で、「Java およびプロセス管理」>「プロセス定義」をクリックします。「追加プロパティー」の下で「プロセス定義」>「Java 仮想マシン」>「カスタム・プロパティー」>「新規」とクリックします。 「名前」フィールドに、com.ibm.websphere.java2secman.norethrow と 入力します。 「値」フィールドに、true と入力します。
このプロパティーは、セキュリティー・マネージャーに AccessControl 例外を作成しないように指示するので、サンドボックスまたはデバッグ環境を対象としています。 Java 2 セキュリティーは実行されません。 Java 2 セキュリティー環境が緩和され、それにより Java 2 セキュリティーが目指す保全性が 低くなるような実稼働環境では、このプロパティーを使用しないでください。
このプロパティーは、 アプリケーションを徹底的にテストすることが可能で、システム・ログまたはトレース・ファイルに AccessControl 例外が 記述されているかどうかを検査することのできるサンドボックスまたはテスト環境で非常に役に立ちます。 このプロパティーは AccessControl 例外を作成しないので、呼び出しスタックを伝搬せず、障害の原因にもなりません。 このプロパティーを指定しない場合、AccessControl 例外を見付けて、1 つずつそれを修正する必要があります。
このようなアプリケーションを取り扱う最も簡単な方法は 、WebSphere Application Server で Java 2 セキュリティーを使用不可にすることです。 この方法の欠点は、このソリューションがシステム全体に適用され、 システムの保全性が最高に発揮される場合と比べて弱められてしまうことです。 セキュリティー・ポリシーまたはリスクの許容範囲によっては、Java 2 セキュリティーを使用不可にすると受け入れらできない場合があります。
grant codeBase "file:${application}" { permission java.security.AllPermission; };
server.policy ファイル
は、app_server_root/properties/ ディ
レクトリーにあります。
server.policy ファイルは、profile_root/properties ディレクトリーにあります。
このポリシーは、WebSphere Application Server クラスの ポリシーを定義します。現時点で、 同じインストール・システム上のすべてのサーバー・プロセスは、 同じ server.policy ファイルを共用しています。 ただし、各サーバー・プロセスが別々の server.policy ファイルを持つように、 このファイルを構成することができます。 ポリシー・ファイルを java.security.policy Java システム・プロパティーの 値として定義します。Java システム・プロパティーの定義方法についての詳細は、 アプリケーション・サーバー・ファイルの管理の『プロセス定義』のセクションを参照してください。
server.policy ファ イルは、リポジトリーおよびファイル複製サービスによって管理される構成ファイルではありません。このファイルへの変更はローカルで行われ、他のマシンへ複製されることはありません。 server.policy ファイルを使用して、 サーバー・リソース用に Java 2 セキュリティー・ポリシーを定義します。 app.policy ファイル (ノードごと)、または was.policy ファイル (エンタープライズ・アプリケーションごと) を使用して、エンタープライズ・アプリケーション・リソースに Java 2 セキュリティー・ポリシーを定義します。
このファイルは、 すべてのクラスに与えられるデフォルトのアクセス権を表します。 このファイルのポリシーは、 WebSphere Application Server の Java 仮想マシンによって起動されるすべてのプロセスに適用されます。
java.policy ファイルは、app_server_root/java/jre/lib/security ディレクトリーにあります。
java.policy ファイルは、/QIBM/ProdData/Java400/jdk15/lib/security/ ディレクトリーにあります。
このポリシー・ファイルは、オペレーティング・システム全体で使用されます。java.policy ファイルは編集しないでください。
症状:
エラー・ メッセージ CWSCJ0314E: 現行の Java 2 セキュリティー・ポリシーが、Java 2 セキュリティー許可違反の可能性があることを報告しました。 Refer to Problem Determination Guide for further information.{0}Permission¥:{1}Code¥:{2}{3}Stack Trace¥:{4}Code Base Location¥:{5} Current Java 2 security policy reported a potential violation of Java 2 Security Permission. Refer to Problem Determination Guide for further information.{0}Permission¥:{1}Code¥:{2}{3}Stack Trace¥:{4}Code Base Location¥:{5}
問題:
Java セキュリティー・マネージャー の checkPermission メソッドが、 デバッグ情報とともに対象アクセス権についてセキュリティー例外を報告しました。 報告される情報は、 システム構成に関しては異なる可能性があります。このレポートは、 信頼性・可用性・保守性 (RAS) トレースを デバッグ・モードへ構成するか、Java プロパティーを指定することによって使用可能になります。
デバッグ・モードで RAS トレースを構成する方法については 、トレースの使用可能化を参照してください。
推奨される対応:
報告された例外は、セキュア・システムにとって重大な場合があります。 セキュリティー・トレースをオンにして、 セキュリティー・ポリシーを違反した可能性のあるコードを判別してください。 違反コードが判別されたら、 該当するすべての Java 2 セキュリティー・ポリシー・ファイルおよびアプリケーション・コードを調べることによって、 試行した操作が Java 2 セキュリティーに関して許可されているかどうかを検査する必要があります。
permission java.io.FilePermission "${user.home}${/}.mailcap", "read";
permission java.io.FilePermission "${user.home}${/}.mime.types", "read";
permission java.io.FilePermission "${java.home}${/}lib${/}mailcap", "read";
permission java.io.FilePermission "${java.home}${/}lib${/}mime.types", "read";
メッセージ: | CWSCJ0313E: Java 2 セキュリティー・マネージャーのデバッグ・メッセージ・フラグが初期化されています ¥: TrDebug: {0}、アクセス: {1}、スタック: {2}、障害: {3} |
問題: | セキュリティー・マネージャーに対して有効なデバッグ・メッセージ・フラグの値を構成しました。 |
メッセージ: | CWSCJ0307E: コード・ベースのロケーションを判別しようとしているときに、予期しない例外をキャッチしました。例外: {0} |
問題: | コード・ベース場所の判別中に、予期しない例外がキャッチされました。 |