Java 2 セキュリティー

Java™ 2 Security 機能は、 WebSphere® Application Server Libertyでサポートされています。 Java 2 セキュリティー は、ポリシー・ベースの微細化されたアクセス制御メカニズムを提供します。このメカニズムは、特定の保護システム・リソースへのアクセスを許可する前にアクセス権を検査することにより、システム全体の保全性を向上させます。

Java 2 Security は、 Java Platform, Enterprise Edition のロール・ベースの許可に依存しません。 Java 2 セキュリティー は、ファイル入出力、ソケット、プロパティーなどのシステム・リソースへのアクセスを保護します。一方、 Java Platform, Enterprise Edition セキュリティーは、サーブレットや JSP ファイルなどの Web リソースへのアクセスを保護します。

Java 2 Security (デプロイヤーおよび管理者向け)

Java 2 Securityを有効にする前に、すべてのアプリケーションに必要な許可が付与されていることを確認する必要があります。そうしないと、アプリケーションの実行に失敗する可能性があります。 デフォルトでは、Java Platform, Enterprise Edition 7.0 仕様によって、アクセス権がアプリケーションに付与されます。 アプリケーションが Java 2 Security 用に準備されていない場合、またはアプリケーション・プロバイダーがアプリケーションの一部として permissions.xml ファイルを提供しない場合、 「Java 2 セキュリティー」 が有効になっていると、アプリケーションの実行時に 「Java 2 セキュリティー」 アクセス制御例外が発生する可能性があります。 アプリケーションが実行されていても、正しく実行されない可能性があります。

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

アプリケーション開発者は、デフォルトの WebSphere ポリシーに付与されているアクセス権と、Java SDK API のアクセス権要件を把握する必要があります。 アプリケーションで呼び出す API が、追加のアクセス権を必要とするかどうかを認識していなければなりません。 アクセス権を必要とする Java API について詳しくは、 Java 2 SDK でのアクセス権を参照してください。
アクセス権は、permissions.xml ファイルによってアプリケーションに追加され、 リストされたアクセス権に関連付けられたコードベースは、ファイルの場所に基づきます。 スタンドアロンの .war アプリケーションの場合、 permissions.xml ファイルは、META-INF ディレクトリーの下にバンドルされ、 指定されたすべてのアクセス権が、.war ファイルに含まれるすべてのモジュールに適用されます。 .ear アプリケーションの場合、permissions.xml は、.ear 自体の META-INF ディレクトリーの直下にバンドルされ、指定されたアクセス権は、 .ear ファイルに含まれるすべてのモジュールに適用されます。
注: .ear アプリケーションの場合、 .ear 以外のモジュールの META-INF ディレクトリーの下にバンドルされている permissions.xml ファイルは無視されます。

Web アプリケーション・バンドル (WAB) を含んだ OSGi アプリケーションを操作する場合、permissions.perm ファイルでアクセス権が追加されます。 WAB に permissions.perm ファイルがない場合、ポリシーはデフォルトで java.security.AllPermission. になります。

Java 2 Security の有効化

Java 2 Security 関数はカーネル・エクステンションの一部であり、 websphere.java.security プロパティーを使用して bootstrap.properties ファイルを更新することにより、ブートストラップ時に有効になります。

bootstrap.properties ファイルで websphere.java.security プロパティーが指定されている場合、 Java 2 Security が適用されます。指定されていない場合、許可検査は行われません。

制限アクセス権の指定

Liberty には、Web アプリケーション・コンポーネントまたは EJB アプリケーション・コンポーネントの実行時に制限付きアクセス権を指定するメカニズムが用意されています。 制限アクセス権では、バンドルまたはアプリケーションにそのアクセス権のインスタンスが付与されないようにします。 アプリケーションが、許可された内容を超えるアクセス権 (例えば、VM を終了するアクセス権など) を自身に付与しないようにするメカニズムが提供されます。
制限アクセス権は、server.xml ファイルおよび client.xml ファイルで指定されます。 以下の例では、システム・プロパティー os.name の書き込みに使用される PropertyPermission がどのように制限されるのかを示します。 この構文は、server.xml ファイルと client.xml ファイルで同じです。

<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />

アクセス権の付与

OSGi バンドルは、permissions.perm ファイルによって、バンドル内のライブラリー/クラスに付与されるアクセス権を自己制御することができます。

また、permissions.xml ファイルを通じて付与されたアクセス権、あるいは、server.xml ファイルと client.xml ファイルでアクセス権付与を指定することで付与されたアクセス権をアプリケーションが自己制御することも可能です。

OSGi バンドルのアクセス権

OSGi 仕様では、バンドルの OSGI-INF ディレクトリーの permissions.perm ファイルによって、バンドルのアクセス権を指定するメカニズムが用意されています。 このメカニズムにより、バンドルのアクセス権を精細にアクセス制御できるようになります。
permissions.perm ファイルでは、バンドルで必要となる最大のアクセス権を指定します。
重要: 空の permissions.perm ファイルは、 permissions.perm ファイルと同等ではありません。 制限アクセス権が必要な場合は、空でない permissions.perm ファイルを必ず用意してください。

アプリケーションの server.xmlclient.xml におけるアクセス権の宣言

server.xml ファイルおよび client.xml ファイルで定義されている、コードベースが指定されていない許可は、その Liberty サーバー上のすべてのアプリケーションに適用されます。
以下の例のようにして、server.xml ファイルと client.xml ファイルで付与されるアクセス権を指定することができます。 この例では、すべてのシステム・プロパティーを読み取れるようにする PropertyPermission が付与されます。

<javaPermission className="java.util.PropertyPermission"  name="*" actions="read" />
server.xml ファイルと client.xml ファイルで、アクセス権が制限されるように指定できます。 以下の例では、システム・プロパティー os.name の書き込みに使用される PropertyPermission がどのように制限されるのかを示します。 この構文は、server.xml ファイルと client.xml ファイルで同じです。

<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
注:
  • 制限アクセス権では、restrictiontrue に設定されます。
  • 制限アクセス権として定義されたアクセス権をアプリケーションが自身に付与しようとした場合、 制限アクセス権が付与より優先され、付与は許可されません。

アプリケーションの permissions.xml におけるアクセス権の宣言

permissions.xml ファイルは、Java EE7 仕様で導入された新しいファイルです。 これは、アプリケーションの META-INF ディレクトリーの下にパッケージされます。

スタンドアロンの .war ファイルとしてパッケージされたアプリケーションの場合、 META-INF の WAR レベルで指定されたアクセス権は、 .war ファイル内にパッケージされたすべてのモジュールとライブラリーに適用されます。

.ear ファイルのパッケージであるアプリケーションの場合、アクセス権の宣言は、 .ear ファイル・レベルでなければなりません。 このアクセス権設定は、.ear ファイル内、またはそこに含まれるモジュール内にパッケージされたすべてのモジュールとライブラリーに適用されます。 そのようなパッケージ・モジュール内の permissions.xml ファイルは、 permissions.xml ファイルが .ear ファイル自体に指定されたかどうかに関係なく、無視されます。

.rar ファイルにパッケージされたアプリケーションの場合、アクセス権の宣言は、 META-INF の RAR レベルでなければなりません。

再スローなしのオプション

Java 2 セキュリティーが有効の場合、アクセス権違反が発生すると、JDK セキュリティー・マネージャーは、デフォルトで java.security.AccessControl 例外をスローします。 例外が処理されないと、実行時の失敗につながる可能性があります。 Java 2 セキュリティー用にアプリケーションを作成する開発者を支援するために、no-rethrow オプションがあります。 no-rethrow オプションでは、 AccessControl 例外を console.logmessages.log に記録できますが、アプリケーションは失敗しません。 no-rethrow オプションは、 bootstrap.properties ファイルに websphere.java.security.norethrow=true を指定して有効にします。 no-rethrow オプションは、デフォルトでは有効でないため、 bootstrap.properties ファイルに指定してこのプロパティーを有効にする必要があります。
注: このプロパティーはセキュリティー・マネージャーが例外をスローすることを許可しないため、セキュリティー・マネージャーは技術的には Java 2 セキュリティーを適用しません。 no-rethrow プロパティーは、実稼働環境では使用しないでください。

動的更新

permissions.permpermissions.xmlserver.xmlclient.xml などのアクセス権ファイルへの動的更新はサポートされません。 許可を更新するには、 Liberty サーバーを再始動する必要があります。