5.2. Java のセキュリティーポリシーについて
Java セキュリティーポリシーは、さまざまなクラスのコードに対する定義されたパーミッションのセットです。Java Security Manager は、アプリケーションによって要求されたアクションをセキュリティーポリシーと比較します。ポリシーがアクションを許可した場合、Security Manager はそのアクションの実行を許可します。ポリシーによりアクションが許可されない場合、セキュリティーマネージャーはそのアクションを拒否します。
以前のバージョンの JBoss EAP では、外部ファイル (例: EAP_HOME/bin/server.policy) を使用してポリシーが定義されていました。JBoss EAP 7 では、security-manager サブシステムと、個別のデプロイメントで XML ファイルを使用するという 2 つの方法で Java セキュリティーポリシーを定義します。Security-manager サブシステムは、ALL ディプロイメントの最小および最大パーミッションを定義します。一方、XML ファイルは、個別のディプロイメントによって要求されたパーミッションを指定します。
5.2.1. Security Manager サブシステムでのポリシーの定義 リンクのコピーリンクがクリップボードにコピーされました!
security-manager サブシステムを使用すると、すべてのデプロイメントの共有のパーミッションまたは共通のパーミッションを定義できます。これは、最小および最大のパーミッションセットを定義することで実行できます。すべてのデプロイメントには、最小パーミッションで定義された少なくともすべてのパーミッションが付与されます。このデプロイメントプロセスは、最大パーミッションセットで定義されたものを超えるパーミッションを要求すると失敗します。
例: 最小パーミッションセットを更新する管理 CLI コマンド
/subsystem=security-manager/deployment-permissions=default:write-attribute(name=minimum-permissions, value=[{class="java.util.PropertyPermission", actions="read", name="*"}])
例: 最大パーミッションセットを更新する管理 CLI コマンド
/subsystem=security-manager/deployment-permissions=default:write-attribute(name=maximum-permissions, value=[{class="java.util.PropertyPermission", actions="read,write", name="*"}, {class="java.io.FilePermission", actions="read,write", name="/-"}])
最大パーミッションセットが定義されていない場合、その値のデフォルトが java.security.AllPermission に設定されます。
5.2.2. デプロイメントでのポリシーの定義 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 7 では、デプロイメントに META-INF/permissions.xml を追加できます。このファイルでは、デプロイメントに必要なパーミッションを指定できます。
最低限のパーミッションセットが security-manager サブシステムに定義され、META-INF/permissions.xml がデプロイメントに追加されると、これらのパーミッションの結合が許可されます。permissions.xml で要求されるパーミッションが security-manager サブシステムで定義された最大ポリシーを超える場合、そのデプロイメントは成功しません。META-INF/permissions.xml と META-INF/jboss-permissions.xml の両方がデプロイメントにある場合は、META-INF/jboss-permissions.xml で要求されるパーミッションのみが付与されます。
この仕様は 、permission.xml がアプリケーション全体またはトップレベルのデプロイメントモジュールに対応するように指定します。サブデプロイメントに特定のパーミッションを定義する必要がある場合は、JBoss EAP 固有の META-INF/jboss-permissions.xml を使用できます。これは、permission.xml と同じ形式に従います。また、宣言されるデプロイメントモジュールにのみ適用されます。
例: permissions.xml のサンプル
<permissions version="7">
<permission>
<class-name>java.util.PropertyPermission</class-name>
<name>*</name>
<actions>read</actions>
</permission>
</permissions>
5.2.3. モジュールにおけるポリシーの定義 リンクのコピーリンクがクリップボードにコピーされました!
<permissions> 要素を module.xml ファイルに追加してモジュールのパーミッションを制限できます。<permissions> 要素には、モジュールに付与するパーミッションを定義する、ゼロまたはそれ以上の <grant> 要素が含まれます。<grant> 要素には以下の属性が含まれます。
- permission
- 付与するパーミッションの修飾クラス名。
- name
- パーミッションクラスのコンストラクターに提供するパーミッション名。
- actions
- 一部のパーミッションタイプで必要なアクションの (オプション) リスト。
例: 定義されたポリシーを含む module.xml
<module xmlns="urn:jboss:module:1.5" name="org.jboss.test.example">
<permissions>
<grant permission="java.util.PropertyPermission" name="*" actions="read,write" />
<grant permission="java.io.FilePermission" name="/etc/-" actions="read" />
</permissions>
...
</module>
<permissions> 要素が存在する場合、モジュールはリストしたパーミッションのみに制限されます。<permissions> 要素が存在しない場合は、モジュールには制限がつきません。