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
サブシステムを使用すると、すべてのデプロイメントの共有のパーミッションまたは共通のパーミッションを定義できます。これは、最小および最大のパーミッションセットを定義することで実行できます。すべてのデプロイメントには、最小パーミッションで定義された少なくともすべてのパーミッションが付与されます。このデプロイメントプロセスは、最大パーミッションセットで定義されたものを超えるパーミッションを要求すると失敗します。
最小権限を更新するコマンド例
/subsystem=security-manager/deployment-permissions=default:write-attribute(name=minimum-permissions, value=[{class="java.util.PropertyPermission", actions="read", name="*"}])
最大権限を更新するコマンド例
/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
に設定されます。
security-manager
サブシステムの完全リファレンスは、JBoss EAP設定ガイド にあります。
5.2.2. デプロイメントでのポリシーの定義
JBoss EAP 7 では、JSR 342 の一部であり、Java EE 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
で要求されるパーミッションのみが付与されます。
Java EE 7 仕様は 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>
要素が存在しない場合は、モジュールには制限がつきません。