Java 2 セキュリティー

Java™ 2 セキュリティは、特定の保護されたシステム リソースへのアクセスを許可する前に権限をチェックすることで、システム全体の整合性を向上させる、ポリシー ベースのきめ細かいアクセス制御メカニズムを提供します。 Java 2 セキュリティーにより、ファイル入出力、ソケット、およびプロパティーなどのシステム・リソースへのアクセスが保護されます。 Java 2 プラットフォーム、Enterprise Edition( J2EE ) セキュリティガードはサーブレットなどのWebリソースへのアクセスをJavaServerページ(JSP)ファイルとエンタープライズJavaBeans (EJB) メソッド。

Java 2 セキュリティは比較的新しいため、多くの既存アプリケーションや新規アプリケーションは、Java 2 セキュリティが実施できる非常にきめ細かいアクセス制御プログラミング モデルに対応していない可能性があります。 アプリケーションが Java 2 セキュリティに対応していない場合、管理者は Java 2 セキュリティを有効にした場合に起こり得る結果を理解する必要があります。 Java 2 セキュリティでは、アプリケーション開発者と管理者にいくつかの新しい要件が課せられます。

[IBM i]重要: Java 2 セキュリティは、Java 2 セキュリティが有効になっている Java 仮想マシンで実行される Java プログラムのみを制限します。 Java 2 セキュリティが無効になっている場合、またはシステム リソースが他のプログラムやコマンドからアクセスされている場合、システム リソースは保護されません。 このため、システム・リソースを保護したい場合には、オペレーティング・システム・セキュリティーを使用する必要があります。
トラブルを避ける:アプリケーション サーバーは、カスタム Java セキュリティ マネージャーの実装をサポートしていません。

デプロイ担当者と管理者向けの Java 2 セキュリティ

Java 2 セキュリティはサポートされていますが、デフォルトでは無効になっています。 Java 2 セキュリティーと管理セキュリティーは、互いに独立して構成できます。 管理セキュリティーを無効にしても、Java 2 セキュリティーは自動的に無効になりません。 Java 2 セキュリティーは明示的に使用不可にする必要があります。

アプリケーションまたはサードパーティのライブラリの準備ができていない場合、Java 2 セキュリティを有効にすると問題が発生します。 これらの問題はJava 2のセキュリティとして識別できますAccessControlExceptionsシステム ログまたはトレース ファイル内。 アプリケーションの Java 2 セキュリティの準備状況が不明な場合は、最初に Java 2 セキュリティを無効にしてアプリケーションをインストールし、正常に動作していることを確認します。

Java 2セキュリティが有効になっている場合WebSphere® Application Server、クラスに関連付けられたJava 2セキュリティ権限のセットは、そのクラスが次のいずれかによってロードされたときに作成されます。WebSphereクラスローダー。 どれでもnon-WebSphereクラスローダーにはこのJava権限セットがありませんWebSphere Application Serverポリシー ファイル。 アクセス制御を持ち、アクションを実行するこれらのクラスローダーに関連付けられたコードには、Java 2セキュリティが必要です。doPrivilegedそのコードの周囲をブロックします。

これらのポリシーファイルによって具体化されたポリシーは、製品に必要なJava 2セキュリティが備わっていない可能性があるため、より制限を厳しくすることはできません。doPrivilegedAPI が導入されました。 デフォルト・ポリシーが制限的なポリシーとなります。 追加の権限を付与することはできますが、デフォルトをより厳しく制限することはできません。AccessControlExceptions例外は内部から生成されるWebSphere Application Server。 この製品では、 上記で示したポリシー・ファイルで定義されたデフォルト・ポリシーよりもさらに制限的なポリシーはサポートしていません。

Java 2セキュリティが有効になっている場合WebSphere Application Server、クラスに関連付けられたJava 2セキュリティ権限のセットは、そのクラスが次のいずれかによってロードされたときに作成されます。WebSphereクラスローダー。 どれでもnon-WebSphereクラスローダーにはこのJava権限セットがありませんWebSphere Application Serverポリシー ファイル。 アクセス制御を持ち、アクションを実行するこれらのクラスローダーに関連付けられたコードには、Java 2セキュリティが必要です。doPrivilegedそのコードの周囲をブロックします。 この状況について詳しくは、以下を参照してください。

いくつかのポリシーファイルJava プロセスのセキュリティ ポリシーを定義するために使用されます。 これらのポリシーファイルは静的(コードベースはポリシーファイルで定義されます)であり、 IBM®開発キット、Java テクノロジー エディション。 エンタープライズアプリケーションリソースとユーティリティライブラリについては、 WebSphere Application Server動的なポリシーサポートを提供します。 コード・ベースはデプロイメント情報を基にして動的に計算され、 許可は実行時にテンプレートのポリシー・ファイルに基づいて認可されます。

ポリシー・ファイルに構文エラーがあると、アプリケーション・サーバー・プロセスが失敗するので、これらのポリシー・ファイルの編集には注意が必要です。

[IBM i]注記:これらのポリシーファイルを編集するには、政策ツールそれはIBM開発キット、Java テクノロジー エディション。

アプリケーションがJava 2セキュリティに対応していない場合、アプリケーションプロバイダがwas.policyファイルをアプリケーションの一部として使用しない場合、またはアプリケーション プロバイダーが期待される権限を伝達しない場合、アプリケーションは実行時に Java 2 セキュリティ アクセス制御例外を引き起こす可能性があります。 アプリケーションが Java 2 セキュリティに対応していないことは明らかではない場合があります。 アクセス制御例外が発生するアプリケーションのトラブルシューティングに役立つ、いくつ かのランタイム・デバッグ援助機能があります。 詳細については、Java 2 セキュリティ デバッグ支援を参照してください。 見るJava 2 セキュリティに対応していないアプリケーションの処理このようなアプリケーションに対処するための情報と戦略については、

管理セキュリティ設定でJavaセキュリティが有効になっている場合、インストールされているセキュリティマネージャは現在チェックしないことに注意してください。modifyThreadそしてmodifyThreadGroup非システム スレッドの権限。 ウェブとエンタープライズの許可JavaBeansスレッドを作成または変更する (EJB) アプリケーション コードは、コンテナーの他のコンポーネントに悪影響を及ぼす可能性があり、コンテナーがエンタープライズ Bean のライフ サイクルとトランザクションを管理する機能に影響を及ぼす可能性があります。

アプリケーション開発者のための Java 2 セキュリティー

アプリケーション開発者は、デフォルトで付与される権限を理解する必要があります。WebSphereアプリケーションが呼び出す SDK API のポリシーと権限要件を確認して、追加の権限が必要かどうかを判断します。 Java 2 SDK リファレンスのリソース セクションの「Permissions」には、どの API にどの権限が必要かが説明されています。

アプリケーション・プロバイダーにより、アプリケーションは 前述のデフォルト・ポリシーで与えられたアクセス権を保持していると想定されます。 デフォルトでカバーされていないリソースにアクセスするアプリケーションWebSphereアプリケーションに追加の Java 2 セキュリティ権限を付与するには、ポリシーが必要です。

他の動的設定のいずれかでアプリケーションに追加の権限を付与することは可能ですが、WebSphereポリシーファイルまたはより伝統的なjava.policy静的ポリシーファイル、was.policy EAR ファイルに埋め込まれたファイルにより、追加の権限が、それを必要とするアプリケーションに正確に限定されます。 アクセス権の有効範囲をそのアクセス権を必要とするアプリケーション・コード以外にも定義すると、 本来ならアクセス権を持っていないコードが、特定のリソースにアクセスできるようになります。

アプリケーションコンポーネントを開発する場合、例えば複数のアプリケーションに含まれる可能性のあるライブラリなど、.earファイルの場合、ライブラリ開発者は、アプリケーション アセンブラに必要な Java 2 権限を文書化する必要があります。 ライブラリー・タイプ・コンポーネント用の was.policy ファイルは、存在しません。 開発者は、アプリケーション・プログラミング・インターフェース (API) 文書またはその他の外部文書を介して必須のアクセス権を伝達する必要があります。

コンポーネント・ライブラリーを複数のエンタープライズ・アプリケーションで共有する場合は 、app.policy ファイルで、ノード上のすべてのエンタープライズ・アプリケーションに アクセス権を与えることができます。
注記:アップデートapp.policyファイルは、app.policyファイルが属します。

アクセス権がコンポーネント・ライブラリーにより内部でしか使用されず、 そのアクセス権によって保護されるリソースへのアクセス許可がアプリケーションには付与されない場合、そのコードに特権があることを示す必要があります。 参照AccessControlException詳細についてはトピックをご覧ください。 ただし、doPrivileged 呼び出しの挿入が不適切な場合に、セキュリティー・ホールが開く恐れがあります。 doPrivileged 呼び出しの影響を理解し、適切に判断してください。

動的ポリシーファイルに関するセクションJava 2 セキュリティ ポリシー ファイルの権限がどのように機能するかを説明しますwas.policyファイルは実行時に許可されます。

Java 2 セキュリティで使用するアプリケーションの開発は新しいスキルになる可能性があり、これまでアプリケーション開発者に求められなかったセキュリティ意識を課すことになります。 Java 2 セキュリティ モデルとそれがアプリケーション開発に与える影響については、このセクションでは説明しません。 次の URL が開始に役立ちます。 https://docs.oracle.com/javase/1.5.0/docs/guide/security/index.html

デバッグ援助機能

のWebSphere Application ServerSYSOUTファイルとcom.ibm.websphere.java2secman.norethrowプロパティはデバッグに役立つ 2 つの主要なツールです。

のWebSphereシステムログまたはトレースファイル

システム・ログまたはトレース・ファイルに 記録される AccessControl 例外には、この例外の原因であるアクセス権違反、例外呼び出しスタック、 および各スタック・フレームに与えられたアクセス権についての情報が含まれます。 通常、この情報だけで、不足しているアクセス権およびアクセス権を必要としているコードを判別できます。

com.ibm.websphere.java2secman.norethrow プロパティー

Java 2セキュリティが有効になっている場合WebSphere Application Serverセキュリティマネージャコンポーネントは、 java.security.AccessControl権限違反が発生した場合の例外。 この例外は、例外処理が行われていない場合には、ランタイム障害の原因になることがよくあります。 この例外も SYSOUT ファイルに記録されます。

しかし、Java仮想マシンcom.ibm.websphere.java2secman.norethrowプロパティが設定されており、値は真実セキュリティマネージャは、AccessControl例外。 この情報はログに記録されます。

このプロパティーは、セキュリティー・マネージャーに AccessControl 例外を生成しないように指示するので、サンドボックスまたはデバッグ環境を対象としています。 Java 2 セキュリティは適用されません。 緩い Java 2 セキュリティ環境によって、Java 2 セキュリティが意図する整合性が弱まる実稼働環境では、このプロパティを使用しないでください。

このプロパティーは、 アプリケーションを徹底的にテストすることが可能で、システム・ログまたはトレース・ファイルに AccessControl 例外が 記述されているかどうかを検査することのできるサンドボックスまたはテスト環境で非常に役に立ちます。 このプロパティーは AccessControl 例外を作成しないので、呼び出しスタックを伝搬せず、障害の原因にもなりません。 このプロパティーを指定しない場合、AccessControl 例外を見つけて、1 つずつそれを修正する必要があります。

Java 2 セキュリティーに対応していないアプリケーションの取り扱い

Java 2セキュリティが提供するシステム整合性の向上が重要な場合は、アプリケーションプロバイダに連絡して、アプリケーションがJava 2セキュリティをサポートするようにするか、少なくともデフォルトの権限を超える必要な追加の権限を伝えてください。 WebSphere Application Server付与する必要があるポリシー。

このようなアプリケーションに対処する最も簡単な方法は、Java 2セキュリティを無効にすることです。 WebSphere Application Server。 ただし、この方法では、このソリューションがシステム全体に適用されるために、 システムの保全性が本来の強度を保持できなくなってしまいます。 組織のセキュリティ ポリシーまたはリスク許容度によっては、Java 2 セキュリティを無効にすることが受け入れられない場合があります。

もう 1 つの方法は、Java 2 セキュリティを有効にしたまま、問題のあるアプリケーションにのみ、必要な追加権限を付与するか、すべての権限を付与することです。 ただし、アクセス権を与えるということは、些細 (ささい) な問題ではありません。 アプリケーション・プロバイダーが何らかの方法で必要なアクセス権を伝達していない場合、 必要なアクセス権が何であるかを判別することが困難であり、 すべてのアクセス権を与えざるを得ないことがあります。 このリスクは、このアプリケーションを異なるノードに置くことによって最小化され、 これによってアプリケーションを特定のリソースから隔離させるのに役立つ場合があります。 アプリケーションの .ear ファイルに組み込まれている was.policy ファイルで、 java.security.AllPermission 許可を付与します。以下に例を示します。
grant codeBase "file:${application}" {
            permission java.security.AllPermission;
        };

server.policy ファイル

[AIX Solaris HP-UX Linux Windows][z/OS]server.policyファイルはアプリケーションサーバールート/properties/ディレクトリ。

[IBM i]server.policyファイルはプロファイルルート/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 セキュリティ ポリシーを定義するファイル (エンタープライズ アプリケーションごと)。
注記:アップデートapp.policyファイルは、app.policyファイルが属します。

java.policy ファイル

このファイルは、 すべてのクラスに与えられるデフォルトのアクセス権を表します。 このファイルのポリシーは、Java仮想マシンによって起動されるすべてのプロセスに適用されます。 WebSphere Application Server。

[AIX Solaris HP-UX Linux Windows][z/OS]java.policyファイルはアプリケーションサーバールート/java/lib/securityディレクトリ。

[IBM i]java.policyファイルは${java.home}/lib/security/ディレクトリ${java.home}使用しているソフトウェア開発キット (SDK) へのパスです。 このポリシー・ファイルは、オペレーティング・システム全体で使用されます。 java.policy ファイルは編集しないでください。

トラブルシューティング

エラー・メッセージ CWSCJ0314E

症状:

Error message CWSCJ0314E: 現在の Java 2 セキュリティ ポリシーにより、Java 2 セキュリティ権限の潜在的な違反が報告されました。 詳細については、問題判別ガイドを参照してください。{0}許可\:{1}コード\:{2}{3}スタックトレース\:{4}コードベースの場所\:{5}現在の Java 2 セキュリティ ポリシーにより、Java 2 セキュリティ パーミッションの潜在的な違反が報告されました。 詳細については、問題判別ガイドを参照してください。{0} 許可¥:{1} コード¥:{2}{3} スタック・トレース¥:{4} コード・ベースのロケーション¥:{5}

問題:

JavaセキュリティマネージャcheckPermissionメソッドは、デバッグ情報を含むサブジェクト権限のセキュリティ例外を報告しました。 報告される情報は、 システム構成に関しては異なる可能性があります。 このレポートは、Reliability Availability Service Ability (RAS) トレースをデバッグ モードに構成するか、Java プロパティを指定することで有効になります。

見るトレースを有効にするデバッグ モードで RAS トレースを構成する方法については、こちらをご覧ください。

管理コンソールから「JVM 設定」パネル内にプロパティー java.security.debug を指定します。 有効な値には、次のものが含まれます。
アクセス
必要な許可、コード、スタック、およびコード・ベースの場所を含む、 すべてのデバッグ情報を出力します。
stack
デバッグ情報 (必要な許可、コード、スタックなど) を出力します。
failure
デバッグ情報 (必要な許可、コードなど) を出力します。

推奨される対応:

報告された例外は、セキュア・システムにとって重大な場合があります。 セキュリティー・トレースをオンにして、 セキュリティー・ポリシーを違反した可能性のあるコードを判別してください。 違反コードが判明したら、適用可能なすべての Java 2 セキュリティ ポリシー ファイルとアプリケーション コードを調べて、試行した操作が Java 2 セキュリティに関して許可されているかどうかを確認します。

アプリケーションが Java Mail で実行されている場合、このメッセージは無害である可能性があります。 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例外が発生し、次の例外がシステム ログに書き込まれます。
アクセス権:

      /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied 
(java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties
read)

コード:

     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 は、この例外を無視して、ロードする実装を判断する次の手段で続けます。 つまり、このセキュリティー例外のログ・エントリーは無視できます。

この製品は、WS-Addressing (WS-A)、WS-Atomic Transaction (WS-AT)、WS-Notificationなどの他のWebサービステクノロジをサポートするためにSOAPFactoryを使用しているため、これを無視できます。SecurityExceptionJava セキュリティが有効になっているすべての Web サービス アプリケーションで使用できます。

メッセージ

メッセージ:CWSCJ0313E : Java 2 セキュリティ マネージャーのデバッグ メッセージ フラグが初期化されました\: TrDebug: {0}、 アクセス: {1}、スタック: {2}、 失敗: {3}

問題: セキュリティー・マネージャーに対して有効なデバッグ・メッセージ・フラグの値を構成しました。

メッセージ: CWSCJ0307E: コード・ベースのロケーションを判別しようとしているときに、予期しない例外をキャッチしました。 例外: {0}

問題: コード・ベース場所の判別中に、予期しない例外がキャッチされました。