第14章 Java セキュリティマネージャー
- Java セキュリティマネージャー
- Java セキュリティマネージャー は Java Virtual Machine (JVM) サンドボックスの外部の境界を管理するクラスで、JVM 内で実行しているコードと JVM 外のリソースとの連携方法を制御します。Java セキュリティマネージャーがアクティブになると、Java API は潜在的に安全でない多様な動作を実行する前にセキュリティマネージャーと承認を確認します。
セキュリティマネージャーはセキュリティポリシーを使用して、特定のアクションが許可または拒否されるか決定します。
- セキュリティポリシー
- コードの様々なクラスに対して定義されたパーミッションのセットです。Java セキュリティーマネージャーはセキュリティポリシーとアプリケーションから要求されたアクションを比較します。ポリシーがアクションを許可している場合は、セキュリティマネージャーはそのアクションが行われることを許可します。ポリシーがアクションを許可していない場合は、セキュリティマネージャーはそのアクションを拒否します。セキュリティポリシーはコードの場所またはコードのシグネチャに基づきパーミッションを定義することができます。
使用するセキュリティマネージャーとセキュリティポリシーは Java Virtual Machine オプション
java.security.manager
と java.security.policy
を使用して設定されます。
セキュリティマネージャー関連のオプション
- java.security.manager
- セキュリティマネージャーを使用し、使用するセキュリティマネージャーをオプションで指定します。引数がこのオプションにない場合は、デフォルトの JDK セキュリティマネージャー
java.lang.SecurityManager
が使用されます。別のセキュリティマネージャー実装を使用するには、java.lang.SecurityManager
のサブクラスの完全修飾クラス名にこのオプションを提供します。 - java.security.policy
- ポリシーファイルを指定して、VM に対するデフォルトのセキュリティポリシーを補強または置換します。このオプションは 2 つの形式を取ります。
java.security.policy=policyFileURL
- policyFileURL により参照されたポリシーファイルは、VM により設定されたデフォルトのセキュリティポリシーを 補強 します。
java.security.policy==policyFileURL
- policyFileURL により参照されたポリシーファイルは、VM により設定されたデフォルトのセキュリティポリシーを 置換 します。
policyFileURL 値は URL またはファイルパスとなります。
JBoss Enterprise Application Platform はデフォルトでは Java セキュリティマネージャーをアクティブにしません。セキュリティマネージャーを使用するために Platform を設定するには、「セキュリティマネージャーの使用」 を参照してください。
14.1. セキュリティマネージャーの使用
JBoss Enterprise Application Platform は デフォルトの JDK セキュリティマネージャーまたはカスタムのセキュリティマネージャーを使用できます。カスタムのセキュリティマネージャーの選択に関する詳細は セキュリティマネージャー関連のオプション を参照してください。
セキュリティマネージャーを使用するように Platform を設定する場合は、セキュリティポリシーファイルを指定する必要があります。セキュリティポリシーファイル
jboss-as/bin/server.policy.cert
は開始点として含まれています。
セキュリティポリシーを書くにあたっての情報は 「JBoss Enterprise Application Platform 向けのセキュリティポリシーを書く」 を参照してください。
設定ファイル
ファイル run.conf
(Linux) または run.conf.bat
(Windows) を使用して、Security Manager とセキュリティポリシーを設定します。このファイルは jboss-as/bin
ディレクトリにあります。
このファイルはサーバーレベルのオプションを設定するために使用され、すべてのサーバープロファイルに適用します。セキュリティマネージャーとセキュリティポリシーの設定には、プロファイル固有の設定が関係しています。グローバルな
run.conf
または run.conf.bat
ファイルを jboss-as/bin/
からサーバープロファイル (例えば jboss-as/server/production/run.conf
) にコピーすることを選択でき、そこで設定変更が可能です。サーバープロファイルが開始された場合、サーバープロファイルの設定ファイルはグローバルな run.conf
/ run.conf.bat
ファイルより優先されます。
手順14.1 セキュリティマネージャーをアクティブにする
これは JBoss Enterprise Application Platform を設定して、Java セキュリティマネージャーをアクティブにして開始する手順を示しています。
この手順のファイル編集のアクションは、あればサーバープロファイルディレクトリにあるファイル
run.conf
(Linux) または run.conf.bat
(Windows)、なければ jboss-as/bin
を参照します。このファイルの場所の詳細は 設定ファイル を参照してください。
JBoss ホームディレクトリを指定します
ファイルrun.conf
(Linux) またはrun.conf.bat
(Windows) を編集します。jboss.home.dir
オプションを追加し、インストール環境のjboss-as
ディレクトリへのパスを指定します。LinuxJAVA_OPTS="$JAVA_OPTS -Djboss.home.dir=/path/to/jboss-eap-5.1/jboss-as"
WindowsJAVA_OPTS="%JAVA_OPTS% -Djboss.home.dir=c:\path\jboss-eap-5.1\jboss-as"
サーバーホームディレクトリを指定します
jboss.server.home.dir
オプションを追加し、サーバープロファイルへのパスを指定します。LinuxJAVA_OPTS="$JAVA_OPTS -Djboss.server.home.dir=path/to/jboss-eap-5.1/jboss-as/server/production"
WindowsJAVA_OPTS="%JAVA_OPTS% -Djboss.server.home.dir=c:\path\to\jboss-eap-5.1\jboss-as\server\production"
Protocol Handler を指定します
java.protocol.handler.pkgs
オプションを追加し、JBoss スタブハンドラを指定します。LinuxJAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.jboss.handlers.stub"
WindowsJAVA_OPTS="%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.jboss.handlers.stub"
使用するセキュリティポリシーを指定します
$POLICY
変数を追加し、使用するセキュリティポリシーを指定します。セキュリティマネージャーをアクティブにする行の前に変数定義を追加します。例14.1 Platform に含まれるセキュリティポリシーの使用
POLICY="server.policy.cert"
セキュリティマネージャーをアクティブにする
最初の#
を削除して、次の行を非コメントします。Linux#JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$POLICY"
Windows#JAVA_OPTS="%JAVA_OPTS% -Djava.security.manager -Djava.security.policy=%POLICY%"
結果これで JBoss Enterprise Application Platform はセキュリティマネージャーをアクティブにして開始するよう設定できました。
オプション : Red Hat の JBoss 署名キーのインポート
含まれているセキュリティポリシーは JBoss 署名コードにパーミッションを付与します。含まれているポリシーを使用する場合は、JBoss 署名キーを JDKcacerts
キーストアにインポートする必要があります。次のコマンドでは、環境変数JAVA_HOME
が JBoss Enterprise Application Platform 5 でサポートされている JDK の場所に設定されていると仮定します。最初に JBoss Enterprise Application Platform 5 をインストールするときにJAVA_HOME
を設定します。詳細は 『Installation Guide』 を参照してください。注記
正しい JVM を選択するには、alternatives
コマンドを使用して、ご使用の Linux システムにインストールされている JDK から選択することができます。付録A/usr/sbin/alternatives
ユーティリティによるデフォルト JDK の設定 を参照してください。ターミナルで次のコマンドを実行し、JAVA_HOME を Java インストールのディレクトリがある場所に置き換えます。Linux[~]$ sudo JAVA_HOME/bin/keytool -import -alias jboss -file JBossPublicKey.RSA \ -keystore JAVA_HOME/lib/security/cacerts
WindowsC:> JAVA_HOME\bin\keytool -import -alias jboss -file JBossPublicKey.RSA -keystore JAVA_HOME\lib\security\cacerts
本書では上記のコマンドは 2 行に渡って書かれていますが、ターミナルでは 1 行で入力します。注記
cacerts キーストアのデフォルトパスワードはchangeit
です。結果これで JBoss Enterprise Application Platform コードを署名するために使用するキーがインストールされました。