Java 2 セキュリティー
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 セキュリティーでは、アプリケーション開発者および管理者に いくつかの新しい要件が課せられます。
![[IBM i]](../images/iseries.gif)

デプロイヤーおよび管理者のための 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 セキュリティー・ポリシー・ファイルを参照してください。
ポリシー・ファイルに構文エラーがあると、アプリケーション・サーバー・プロセスが失敗するので、これらのポリシー・ファイルの編集には注意が必要です。
![[IBM i]](../images/iseries.gif)
アプリケーションが Java 2 セキュリティーに対応していない場合、 アプリケーションの一部として was.policy ファイルがアプリケーション・プロバイダーに用意されていない場合、 またはアプリケーション・プロバイダーが、期待されている許可を伝達しない場合、 実行時にアプリケーションが Java 2 セキュリティー・アクセス制御例外を引き起こす可能性が高くなります。 アプリケーションが Java 2 セキュリティーに対応しているかが不明な場合があります。 アクセス制御例外が発生するアプリケーションのトラブルシューティングに役立つ、いくつ かのランタイム・デバッグ援助機能があります。 詳細については、『Java 2 セキュリティー・デバッグ援助機能』を参照してください。 このようなアプリケーションの処理についての詳細および戦略については、Java 2 セキュリティーに対応していないアプリケーションの取り扱いを参照してください。
管理セキュリティー設定で Java セキュリティーが使用可能である場合、インストールされたセキュリティー・マネージャーは、現在 システム以外のスレッドに対して、modifyThread 許可および modifyThreadGroup 許可を検査しないことに注意してください。 Web および Enterprise JavaBeans (EJB) アプリケーションのコードでスレッドを作成または変更できるようにすると、 そのコンテナーの他のコンポーネントに悪影響を与える可能性があり、エンタープライズ Bean のライフサイクルおよびトランザクションを管理するコンテナーの機能が影響を受けることがあります。
アプリケーション開発者のための Java 2 セキュリティー
アプリケーション開発者は、 追加のアクセス権を付与する必要があるかどうかを知るために、デフォルトの WebSphere ポリシーで与えられるアクセス権、および開発するアプリケーションが呼び出す SDK API のアクセス権要件について理解する必要があります。 リソース・セクションにある「Permissions in the Java 2 SDK」解説には、 各 API に必要なアクセス権が記載されています。
アプリケーション・プロバイダーにより、アプリケーションは 前述のデフォルト・ポリシーで与えられたアクセス権を保持していると想定されます。 アプリケーションが、デフォルトの WebSphere ポリシーの範囲外のリソースにアクセスする場合、 追加の Java 2 セキュリティー・アクセス権をそのアプリケーションに付与する必要があります。
その他の動的な WebSphere ポリシー・ファイルのいずれか、または従来の豊富な java.policy 静的ポリシー・ファイルのいずれかを使用すれば 追加のアクセス権をアプリケーションに付与することができますが、 was.policy ファイル (EAR ファイルに組み込まれています) は、追加されたアクセス権がそれを必要とするアプリケーションのみに確実に適用されるようにします。 アクセス権の有効範囲をそのアクセス権を必要とするアプリケーション・コード以外にも定義すると、 本来ならアクセス権を持っていないコードが、特定のリソースにアクセスできるようになります。
実際には複数の .ear ファイルに含まれる可能性があるライブラリーなどの、アプリケーション・コンポーネントを開発する場合、ライブラリー開発者は、そのアプリケーション・アセンブラーで必要とされる必須の Java 2 アクセス権を文書化する必要があります。 ライブラリー・タイプ・コンポーネント用の was.policy ファイルは、存在しません。 開発者は、アプリケーション・プログラミング・インターフェース (API) 文書またはその他の外部文書を介して必須のアクセス権を伝達する必要があります。
アクセス権がコンポーネント・ライブラリーにより内部でしか使用されず、 そのアクセス権によって保護されるリソースへのアクセス許可がアプリケーションには付与されない場合、そのコードに特権があることを示す必要があります。 詳しくは、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
デバッグ援助機能
WebSphere Application Server の SYSOUT ファイル、および com.ibm.websphere.java2secman.norethrow プロパティーの 2 つは、デバッグの主要な援助機能となります。WebSphere システム・ログまたはトレース・ファイル
システム・ログまたはトレース・ファイルに 記録される AccessControl 例外には、この例外の原因であるアクセス権違反、例外呼び出しスタック、 および各スタック・フレームに与えられたアクセス権についての情報が含まれます。 通常、この情報だけで、不足しているアクセス権およびアクセス権を必要としているコードを判別できます。com.ibm.websphere.java2secman.norethrow プロパティー
WebSphere Application Server で Java 2 セキュリティーを有効にする場合にアクセス権違反が発生すると、セキュリティー・マネージャー・コンポーネントが java.security.AccessControl 例外を作成します。 この例外は、例外処理が行われていない場合には、ランタイム障害の原因になることがよくあります。 この例外も SYSOUT ファイルに記録されます。ただし、Java 仮想マシンの com.ibm.websphere.java2secman.norethrow プロパティーの値が true に設定されている場合、セキュリティー・マネージャーは AccessControl 例外を作成しません。 この情報はログに記録されます。
このプロパティーは、セキュリティー・マネージャーに AccessControl 例外を生成しないように指示するので、サンドボックスまたはデバッグ環境を対象としています。 Java 2 セキュリティーは実行されません。Java 2 セキュリティー環境が緩和され、それにより Java 2 セキュリティーが目指す保全性のレベルが低くなるような実稼働環境では、このプロパティーを使用しないでください。
このプロパティーは、 アプリケーションを徹底的にテストすることが可能で、システム・ログまたはトレース・ファイルに AccessControl 例外が 記述されているかどうかを検査することのできるサンドボックスまたはテスト環境で非常に役に立ちます。 このプロパティーは AccessControl 例外を作成しないので、呼び出しスタックを伝搬せず、障害の原因にもなりません。 このプロパティーを指定しない場合、AccessControl 例外を見つけて、1 つずつそれを修正する必要があります。
Java 2 セキュリティーに対応していないアプリケーションの取り扱い
Java 2 セキュリティーによって提供される拡張されたシステム保全性が重要な場合は、アプリケーション・プロバイダーに連絡して、アプリケーションが Java 2 セキュリティーをサポートするように設定するか、あるいは少なくとも、付与される必要のあるデフォルトの WebSphere Application Server ポリシー以外に必要な追加アクセス権を伝達するように設定してください。このようなアプリケーションを最も簡単に取り扱う方法は、WebSphere Application Server で Java 2 セキュリティーを使用できないようにすることです。この方法の欠点は、このソリューションがシステム全体に適用されるため、 システムの保全性が本来あるべき状態ほど高くならないことです。 セキュリティー・ポリシーまたはリスクの許容範囲によっては、Java 2 セキュリティーを無効にすることは受け入れられない場合があります。
grant codeBase "file:${application}" {
permission java.security.AllPermission;
};
server.policy ファイル
server.policy ファイル
は、app_server_root/properties/ ディ
レクトリーにあります。
server.policy ファイルは、profile_root/properties ディレクトリーにあります。
このポリシーは、WebSphere Application Server クラスのポリシーを定義します。 現時点で、 同じインストール・システム上のすべてのサーバー・プロセスは、 同じ server.policy ファイルを共有しています。 ただし、各サーバー・プロセスが別々の server.policy ファイルを持つように、 このファイルを構成することができます。 ポリシー・ファイルを java.security.policy Java システム・プロパティーの値として定義します。Java システム・プロパティーの定義方法についての詳細は、アプリケーション・サーバー・ファイルの管理の『プロセス定義』のセクションを参照してください。
java.policy ファイル
このファイルは、 すべてのクラスに与えられるデフォルトのアクセス権を表します。このファイルのポリシーは、 WebSphere Application Server の Java 仮想マシンによって起動されるすべてのプロセスに適用されます。
java.policy ファイルは、app_server_root/java/lib/security ディレクトリーにあります。
java.policy ファイルは、${java.home}/lib/security/ ディレクトリーにあります。${java.home} は、使用している Software Development Kit (SDK) へのパスです。このポリシー・ファイルは、オペレーティング・システム全体で使用されます。java.policy ファイルは編集しないでください。
トラブルシューティング
- エラー・メッセージ CWSCJ0314E
症状:
エラー・メッセージ CWSCJ0314E: 現行の Java 2 セキュリティー・ポリシーが、 Java 2 セキュリティー権限違反の可能性があることを報告しました。 詳しくは、問題判別ガイドを参照してください。{0}許可:{1}コード:{2}{3}スタック・トレース:{4}コード・ベースのロケーション:{5} Current® Java 2 セキュリティー・ポリシーは、Java 2 セキュリティー権限違反の可能性があることを報告しました。詳細については、問題判別ガイドを参照してください。{0} 許可¥:{1} コード¥:{2}{3} スタック・トレース¥:{4} コード・ベースのロケーション¥:{5}
問題:
Java セキュリティー・マネージャー の checkPermission メソッドが、デバッグ情報とともに対象アクセス権についてセキュリティー例外を報告しました。 報告される情報は、 システム構成に関しては異なる可能性があります。このレポートは、信頼性・可用性・保守性 (RAS) トレースをデバッグ・モードに構成するか、Java プロパティーを指定することによって使用できるようになります。
デバッグ・モードで RAS トレースを構成する方法については 、トレースの使用可能化を参照してください。
管理コンソールから「JVM 設定」パネル内にプロパティー java.security.debug を指定します。 有効な値には、次のものが含まれます。- access
- 必要な許可、コード、スタック、およびコード・ベースの場所を含む、 すべてのデバッグ情報を出力します。
- stack
- デバッグ情報 (必要な許可、コード、スタックなど) を出力します。
- failure
- デバッグ情報 (必要な許可、コードなど) を出力します。
推奨される対応:
報告された例外は、セキュア・システムにとって重大な場合があります。 セキュリティー・トレースをオンにして、 セキュリティー・ポリシーを違反した可能性のあるコードを判別してください。 違反コードが判別されたら、該当するすべての Java 2 セキュリティー・ポリシー・ファイルおよびアプリケーション・コードを調べることによって、 試行した操作が Java 2 セキュリティーに対して許可されているかどうかを検査する必要があります。
アプリケーションが JavaMail を使用して実行されている場合、このメッセージは無害です。was.policy ファイルを更新して、以下のアクセス 権をアプリケーションに付与することができます。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";- SecurityException - アクセスは拒否されました
症状:
Java セキュリティーが 使用可能になっていて、jaxm.properties ファイルの読み取り許可が付与されていない場合、SOAPFactory インスタンス が javax.xml.soap.SOAPFactory.newInstance() の呼び出しを通じて作成されるか、MessageFactory インスタンスが MessageFactory.newInstance() の 呼び出しを通じて作成されると、SecurityException 例外が発生し、以下の例外がシステム・ログに書き込まれます。Permission: /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied (java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read) Code: com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder in {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib /addressbinder1.jar} Stack Trace: java.security.AccessControlException: access denied (java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read) .
問題:
Java 2 セキュリティー・ポリシーが、Java 2 セキュリティー許可 違反の可能性があることを報告しました。
推奨される対応:
SOAPFactory は、この例外を無視して、ロードする実装を判断する次の手段で続けます。 つまり、このセキュリティー例外のログ・エントリーは無視できます。
この製品は、SOAPFactory を 使用して、他の Web サービス・テクノロジー (WS-Addressing (WS-A)、WS-Atomic Transaction (WS-AT)、WS-Notification など) を サポートするため、Java セキュリティーが使用可能になっている場合、 いずれの Web サービス・アプリケーションでもこの SecurityException は無視してかまいません。
メッセージ
メッセージ: CWSCJ0313E: Java 2 セキュリティー・マネージャーのデバッグ・メッセージ・フラグが初期化されています。TrDebug: {0}、アクセス: {1}、スタック: {2}、障害: {3}
問題: セキュリティー・マネージャーに対して有効なデバッグ・メッセージ・フラグの値を構成しました。
メッセージ: CWSCJ0307E: コード・ベースのロケーションを判別しようとしているときに、予期しない例外をキャッチしました。例外: {0}
問題: コード・ベース場所の判別中に、予期しない例外がキャッチされました。