セキュリティーマネージャーの運用方法について説明します。
IJServerクラスタおよびInterstage Java EE DASサービスのインスタンスのセキュリティーマネージャーは、デフォルトで無効になっています。セキュリティーマネージャーを有効にするためには、Interstage Java EE管理コンソールまたはasadminコマンドで以下の設定を行い、IJServerクラスタを再起動してください。
Interstage Java EE管理コンソール
[設定] > [クラスタ名-config] または [server-config] > [セキュリティ]のセキュリティーマネージャーのチェックボックスを有効にする。
または、
[設定] > [クラスタ名-config] または [server-config] > [JVM 設定] > [JVMオプション]タブ のオプションに-Djava.security.managerを追加する。
asadminのcreate-jvm-optionsサブコマンド
JVMオプションに-Djava.security.managerを追加する。
セキュリティーマネージャーを無効にする場合は、Interstage Java EE管理コンソールまたはasadminのdelete-jvm-optionsサブコマンドを使用して上記の設定を元に戻し、IJServerクラスタを再起動してください。
注意
IIOP通信使用時の注意事項
セキュリティーマネージャーを使用するアプリケーションが、IIOP通信を行い、EJB、JMSまたはCORBAサービスアプリケーション呼出し機能を使用する場合は、以下のどちらかを行ってください。
システムプロパティに以下を設定してください。
jdk.corba.allowOutputStreamSubclass=true
policyファイルに以下の権限を追加してください。
permission java.io.SerializablePermission "enableSubclassImplementation";
上記設定を行っていない場合、IIOP通信時に以下の例外が発生する場合があります。
java.security.AccessControlException: access denied (java.io.SerializablePermission enableSubclassImplementation).
IJServerクラスタを作成すると、そのIJServerクラスタで使用されるデフォルトのpolicyファイルが以下のディレクトリに配置されます。デフォルトのpolicyファイルには、IJServerクラスタの動作に必要なアクセス権が設定されています。
[Java EE共通ディレクトリ]\nodeagents\ijna\[サーバーインスタンス名]\config\server.policy
[Java EE共通ディレクトリ]/nodeagents/ijna/[サーバーインスタンス名]/config/server.policy
運用環境に合わせてセキュリティを強化する場合は、デフォルトのpolicyファイルを任意のディレクトリ配下にコピーし、コピーしたファイルを編集してください。また、デフォルトのpolicyファイルがIJServerクラスタで使用されないようにするため、IJServerクラスタのJVMオプションに「-Djava.security.policy=[編集したpolicyファイルのフルパス]」を設定してください。このJVMオプションは、IJServerクラスタを再起動することにより有効となります。
JVMオプションの設定は、Interstage Java EE管理コンソールまたはasadminのcreate-jvm-optionsサブコマンドで行います。
Interstage Java EE管理コンソール
[設定] > [クラスタ名-config] または [server-config] > [JVM 設定] > [JVM オプション]タブ
asadminのcreate-jvm-optionsサブコマンド
注意
policyファイル編集時の注意事項
Interstage Java EE DASサービスのpolicyファイルは変更しないでください。
デフォルトのpolicyファイルには、IJServerクラスタが動作するために必要な権限が設定されています。
「// Core server classes get all permissions by default」から「//Required to register MBeans, fails otherwise」の変更および削除は行わないでください。変更した場合、IJServerクラスタが起動できなくなる可能性があります。
policyファイルでマルチバイト文字を使用する場合は、policyファイルをUTF-8で保管するか、IJServerクラスタのJVMオプションに「-Dsun.security.policy.utf8=false」を設定してください。
policyファイルをデフォルト以外の場所に定義した場合、バックアップコマンドによるバックアップの対象となりません。手動でバックアップしてください。
policyファイルは、grant構文と複数のpermission構文により構成されます。セキュリティレベルの低下を防ぐためアクセス権を設定する場合は、すべてのアプリケーションではなく、変更が必要なアプリケーションへ適切なアクセス権を設定してください。
アプリケーションのアクセス権は、policyファイルの「// Please change the following content if necessary.// Basic set of required permissions granted to all remaining code」という記述の次から始まるgrant構文を変更してください。デフォルトでいくつかのアクセス権が定義されているため、必要に応じて変更してください。
例えば、デフォルトではすべてのファイルへの読み込み/書き込みが許可されていますが、特定のJava EEアプリケーションのみに権限を付与したい場合は、デフォルトの定義をコメントアウト(※1)し、特定のJava EEアプリケーションへの権限を追加(※2)してください。
// Please change the following content if necessary. // Basic set of required permissions granted to all remaining code grant { : // permission java.io.FilePermission "<<ALL FILES>>", "read,write"; ・・・※1 : }; grant codeBase "file:${com.sun.aas.installRoot}/var/domains/interstage/applications/j2ee-apps/[アプリケーション名]/-" { permission java.io.FilePermission "<<ALL FILES>>", "read,write"; ・・・※2 }; |
各アプリケーションのアクセス制御を行う場合は、grant文のcodeBaseを設定する必要があります。
省略値の${com.sun.aas.instanceRoot}変数、${com.sun.aas.installRoot}変数については、「6.8.1 定義時に利用できるプロパティ」を参照してください。
IJServerクラスタに配備されたすべてのJava EEアプリケーション(EARモジュール)に対してアクセス制御を行う場合は、以下のように指定します。
grant codeBase "file:${com.sun.aas.installRoot}/var/domains/interstage/applications/j2ee-apps/- " { ... }; |
Java EEアプリケーション(EARモジュール)ごとにアクセス制御を行う場合は、以下のように指定します。
grant codeBase "file:${com.sun.aas.installRoot}/var/domains/interstage/applications/j2ee-apps/[アプリケーション名]/-" { ... }; |
Webモジュール(war)、EJBモジュール(ejb-jar)、connector(rar)などのモジュールごとにアクセス制御を行う場合は、以下のように指定します。
grant codeBase "file:${com.sun.aas.installRoot}/var/domains/interstage/applications/j2ee-modules/[モジュール名]/-" { ... }; |
配備時に出力されるスタブコードに対してアクセス制御を行う場合は、以下のように指定します。
grant codeBase "file:${com.sun.aas.instanceRoot}/generated/-" { ... }; |
JSPに対してアクセス制御を行う場合は、JSPのコンパイル結果の保管先ディレクトリを指定してください。デフォルトでは、上記スタブと同じ値です。
コンパイル結果出力ディレクトリを変更している場合は、コンパイル結果出力先ディレクトリを指定してください。
server.policyファイル内に設定するアクセス権(permission構文)の詳細については、以下のサイトを参照してください。
日本語:http://docs.oracle.com/javase/jp/6/technotes/guides/security/permissions.html
英語:http://docs.oracle.com/javase/6/docs/technotes/guides/security/permissions.html
PermissionクラスのJavadoc は、以下のサイトを参照してください。