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 でのアクセス権を参照してください。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 を終了するアクセス権など) を自身に付与しないようにするメカニズムが提供されます。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 ファイルによって、バンドルのアクセス権を指定するメカニズムが用意されています。 このメカニズムにより、バンドルのアクセス権を精細にアクセス制御できるようになります。アプリケーションの server.xml と client.xml におけるアクセス権の宣言
server.xml ファイルおよび client.xml ファイルで定義されている、コードベースが指定されていない許可は、その Liberty サーバー上のすべてのアプリケーションに適用されます。PropertyPermission
が付与されます。
<javaPermission className="java.util.PropertyPermission" name="*" actions="read" />
os.name
の書き込みに使用される PropertyPermission
がどのように制限されるのかを示します。 この構文は、server.xml ファイルと client.xml ファイルで同じです。
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
- 制限アクセス権では、restriction が true に設定されます。
- 制限アクセス権として定義されたアクセス権をアプリケーションが自身に付与しようとした場合、 制限アクセス権が付与より優先され、付与は許可されません。
アプリケーションの 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.log と
messages.log に記録できますが、アプリケーションは失敗しません。 no-rethrow オプションは、 bootstrap.properties ファイルに websphere.java.security.norethrow=true
を指定して有効にします。 no-rethrow オプションは、デフォルトでは有効でないため、
bootstrap.properties ファイルに指定してこのプロパティーを有効にする必要があります。