第14章 Java セキュリティマネージャー

Java セキュリティマネージャー
Java セキュリティマネージャー は Java Virtual Machine (JVM) サンドボックスの外部の境界を管理するクラスで、JVM 内で実行しているコードと JVM 外のリソースとの連携方法を制御します。Java セキュリティマネージャーがアクティブになると、Java API は潜在的に安全でない多様な動作を実行する前にセキュリティマネージャーと承認を確認します。
セキュリティマネージャーはセキュリティポリシーを使用して、特定のアクションが許可または拒否されるか決定します。
セキュリティポリシー
コードの様々なクラスに対して定義されたパーミッションのセットです。Java セキュリティーマネージャーはセキュリティポリシーとアプリケーションから要求されたアクションを比較します。ポリシーがアクションを許可している場合は、セキュリティマネージャーはそのアクションが行われることを許可します。ポリシーがアクションを許可していない場合は、セキュリティマネージャーはそのアクションを拒否します。セキュリティポリシーはコードの場所またはコードのシグネチャに基づきパーミッションを定義することができます。
使用するセキュリティマネージャーとセキュリティポリシーは Java Virtual Machine オプション java.security.managerjava.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 を参照します。このファイルの場所の詳細は 設定ファイル を参照してください。
  1. JBoss ホームディレクトリを指定します

    ファイル run.conf (Linux) または run.conf.bat (Windows) を編集します。jboss.home.dir オプションを追加し、インストール環境の jboss-as ディレクトリへのパスを指定します。
    Linux

    JAVA_OPTS="$JAVA_OPTS -Djboss.home.dir=/path/to/jboss-eap-5.1/jboss-as"

    Windows

    JAVA_OPTS="%JAVA_OPTS% -Djboss.home.dir=c:\path\jboss-eap-5.1\jboss-as"

  2. サーバーホームディレクトリを指定します

    jboss.server.home.dir オプションを追加し、サーバープロファイルへのパスを指定します。
    Linux

    JAVA_OPTS="$JAVA_OPTS -Djboss.server.home.dir=path/to/jboss-eap-5.1/jboss-as/server/production"

    Windows

    JAVA_OPTS="%JAVA_OPTS% -Djboss.server.home.dir=c:\path\to\jboss-eap-5.1\jboss-as\server\production"

  3. Protocol Handler を指定します

    java.protocol.handler.pkgs オプションを追加し、JBoss スタブハンドラを指定します。
    Linux

    JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.jboss.handlers.stub"

    Windows

    JAVA_OPTS="%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.jboss.handlers.stub"

  4. 使用するセキュリティポリシーを指定します

    $POLICY 変数を追加し、使用するセキュリティポリシーを指定します。セキュリティマネージャーをアクティブにする行の前に変数定義を追加します。

    例14.1 Platform に含まれるセキュリティポリシーの使用

    POLICY="server.policy.cert"
  5. セキュリティマネージャーをアクティブにする

    最初の # を削除して、次の行を非コメントします。
    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 はセキュリティマネージャーをアクティブにして開始するよう設定できました。

  6. オプション : Red Hat の JBoss 署名キーのインポート

    含まれているセキュリティポリシーは JBoss 署名コードにパーミッションを付与します。含まれているポリシーを使用する場合は、JBoss 署名キーを JDK cacerts キーストアにインポートする必要があります。
    次のコマンドでは、環境変数 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

    Windows

    C:> JAVA_HOME\bin\keytool -import  -alias jboss -file JBossPublicKey.RSA -keystore JAVA_HOME\lib\security\cacerts

    本書では上記のコマンドは 2 行に渡って書かれていますが、ターミナルでは 1 行で入力します。

    注記

    cacerts キーストアのデフォルトパスワードは changeit です。
    結果

    これで JBoss Enterprise Application Platform コードを署名するために使用するキーがインストールされました。