インストールしたシステムの Java セキュリティーポリシーを定義する、外部ポリシー構成ファイルの作成と修正を行います。
Java 実行時のポリシーは、さまざまなソースを出所とするコードが、さまざまなプリンシパルとして実行されるときに、どのようなアクセス権を利用できるかを指定するもので、Policy オブジェクトによって表現されます。デフォルトの Policy の実装は、静的な ASCII 形式のポリシー構成ファイルから情報を取得します。
ポリシーファイルは、簡単なテキストエディタを使用するか、このドキュメントで説明するグラフィカルな Policy Tool ユーティリティーを使用して作成できます。Policy Tool を使うと、入力の手間を省けるだけでなく、ポリシーファイルの構文について知る必要がなくなるため、エラーを減らすことができます。
「Policy Tool の使用法」セクションでは、Policy Tool を使用してポリシーファイルを作成および修正する方法について説明します。
「例」セクションでは、Policy Tool の使用例を紹介し、詳しく説明します。
「関連項目」セクションでは、関連するドキュメントへのリンクを提供します。
Policy Tool を起動するには、コマンド行に次のように入力します。
policytool
「Policy Tool」ウィンドウが表示されます。
Policy Tool は、起動するたびに、「ユーザーポリシーファイル」とも呼ばれるファイルからポリシー情報を取得して、ウィンドウに表示しようとします。デフォルトのユーザーポリシーファイルは、ホームディレクトリにある .java.policy
という名前のファイルです。ポリシーファイルが見つからない場合は、そのことを示すメッセージと空白の「Policy Tool」ウィンドウが表示されます。つまり、ウィンドウに見出しやボタンは表示されますが、データは含まれていません (次の画面を参照)。
続いて、作業する任意のポリシーファイルを開くことができます。また、ポリシーエントリを追加したり、必要に応じてキーストアを指定したりして、ファイルを保存すれば、新しいポリシーファイルを作成することもできます。
Policy Tool をはじめて実行した時点では、ユーザーポリシーファイルは存在していません (手動で作成した場合を除く)。
新しいポリシーファイルを作成するには、「ファイル」メニューから「新規」コマンドを選択します。現在開かれているポリシーファイルがあれば、必要に応じてファイルの保存を促すメッセージが表示されたあとで、そのファイルが閉じられて、新しい「Policy Tool」ウィンドウが表示されます。そのウィンドウには見出しやボタンが表示されていますが、データは含まれていません。
注: 上記の操作は、Policy Tool をはじめて実行する場合は必要ありません。Policy Tool はユーザーポリシーファイルを開こうとしますが、そのファイルがまだ存在しないため (手動で作成した場合を除く)、データが何も含まれていないウィンドウが表示されます。
新しい「Policy Tool」ウィンドウが表示されたら、ポリシーエントリを作成したり、キーストアを指定したり (キーストア別名を指定したポリシーエントリがある場合) することができます。ポリシーファイルは、いつでも保存できます。
現在作業中のポリシーファイルとは別のポリシーファイルで作業するには、「ファイル」メニューの「開く」コマンドを使います。
現在開かれているポリシーファイルがあれば、必要に応じてファイルの保存を促すメッセージが表示されたあとで、そのファイルが閉じられ、「開く」ダイアログが表示されます。このダイアログでは、ディレクトリ構造を移動して、作業するポリシーファイルがあるディレクトリを検索できます。ファイルを選択し、「了解」ボタンを選択します。
選択したポリシーファイルの情報が「Policy Tool」ウィンドウに表示されます。表示される情報は、ポリシーファイル名、キーストアの URL (存在する場合)、そしてポリシーファイル内の各ポリシーエントリの CodeBase、SignedBy、およびプリンシパルパートです。
ポリシーエントリの SignedBy パートで指定された別名の鍵情報を含むキーストアを指定するには、「キーストア」メニューの「編集」コマンドを選択します。
ダイアログボックスが表示されたら、新しいキーストアの URL と、キーストアのタイプ (オプション) を指定します。
たとえば、/tests/
ディレクトリにある「mykeystore」という名前のキーストアを指定するには、「新規キーストアの URL」というラベルの付いたテキストボックスに、次の file:
URL を入力します。
file:/tests/mykeystore
また、キーストアのタイプとして JKS (Sun がサポートしている独自のキーストアのタイプ) を指定するには、「新規キーストアのタイプ」というラベルの付いたテキストボックスに、次のように入力します。
JKS
キーストアの URL と、必要に応じてタイプを指定したら、「了解」を選択します。操作を取り消す場合は、「取消し」を選択します。操作を取り消さなかった場合は、「キーストア:」というラベルの付いたテキストボックスに、指定したキーストアの URL とタイプが表示されます。
新しいポリシーエントリを追加するには、「Policy Tool」メインウィンドウで「ポリシーエントリの追加」ボタンを選択します。
「ポリシーエントリ」ダイアログボックスが表示されます。
このダイアログボックスでは、次の情報を指定します
/JavaSoft/TESTS/
ディレクトリからのコードを指定するには、「CodeBase」テキストボックスで次のファイル URL を入力します。
file:/JavaSoft/TESTS/
duke
SignedBy の値は、署名者に関連付けられた一式の公開鍵に、キーストアを使ってマッピングされる別名の文字列です。これらの公開鍵は、指定されたコードソースからのクラスが、実際にこれらの署名者によって署名されていることを検証するために使われます。
SignedBy の値には、複数の署名者をコンマで区切った文字列を指定できます。たとえば、「Adam,Eve,Charles」のように指定します。この場合は、各要素が OR ではなく AND で結合され、「Adam と Eve と Charles によって署名された」という意味になります。
SignedBy の値はオプションです。省略した場合は、「任意の署名者」という意味になり、コードに署名がなされているかどうかが検証されなくなります。同様に、CodeBase エントリを省略した場合は、「任意のコード」という意味になり、コードの出所が検証されなくなります。
このため、CodeBase エントリが存在しない場合は、指定された別名の署名が付いたすべてのコードに対し、指定されたアクセス権が与えられます。また、SignedBy エントリが存在しない場合は、コードに署名がなされているかどうか、まただれが署名したかには関係なく、指定された CodeBase を出所とするすべてのコードに対して、指定されたアクセス権が与えられます。CodeBase エントリと SignedBy エントリがどちらも存在しない場合は、すべてのコードに対して、指定されたアクセス権が与えられます。
注:CodeBase 値の正確な意味は、末尾の文字によって異なります。末尾が「/」の CodeBase は、指定されたディレクトリ内のすべてのクラスファイル (JAR ファイルを除く) を示します。末尾が「/*」の CodeBase は、そのディレクトリ内にあるすべてのファイル (クラスファイルと JAR ファイルの両方) を示します。末尾が「/-」の CodeBase は、指定されたディレクトリとその下の全サブディレクトリ内のすべてのファイル (クラスファイルと JAR ファイルの両方) を示します。
プリンシパルエントリには、「プリンシパルの値」のリストを指定します。それぞれのプリンシパルの値には、実行しているスレッドのプリンシパルセット内に存在していなければならない principal_type と principal_name のペアを指定します。プリンシパルエントリはオプションです。省略した場合は、「任意のプリンシパル」という意味になります。
principal_type が指定されておらず、principal_name が引用符で囲まれた文字列である場合は、実行時にポリシーファイルが処理されるときに、その文字列はキーストアの別名として扱われます。キーストアは別名を経由して X509 証明書を調査し、問い合わせます。その証明書が見つかった場合、プリンシパルのタイプは javax.security.auth.x500.X500Principal であると自動的に想定され、実際のプリンシパルの名前は、証明書にある Subject として識別された名前であると想定されます。X509 証明書へのマッピングが見つからない場合は、指定されたプリンシパルにアクセス権を付与しているポリシーエントリ全体が無視されます。
新しいプリンシパルを追加するには、「ポリシーエントリ」ダイアログボックスで「プリンシパルの追加」ボタンを選択します。「プリンシパル」ダイアログボックスが表示されます。
プリンシパルを追加するには、次のようにします。
「プリンシパルのタイプ:」というラベルの付いたドロップダウンリストには、組み込まれているプリンシパルのタイプのリストが表示されます。リストにあるタイプを指定する場合は、リストからそのタイプを選択します。選択したプリンシパルのタイプの完全な名前が、ドロップダウンリストの右側のテキストボックスに表示されます。
ユーザーが定義したプリンシパルのタイプを指定する場合は、そのプリンシパルのタイプをテキストボックスに入力します。
プリンシパルの名前を、「プリンシパルの名前:」テキストボックスに直接入力します。たとえば、duke
という名前のプリンシパルを指定するには、次のように入力します
duke
プリンシパルの情報を指定したら、「了解」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。新しいプリンシパルの行が「プリンシパル」エントリに表示されます。
このあと、同じ手順に従って別のプリンシパルを追加することができます。既存のプリンシパルを編集または削除することもできます。
既存のプリンシパルを編集するには、「プリンシパル:」エントリでプリンシパルの行を選択し、「プリンシパルの編集」ボタンを選択します。または、そのプリンシパルの行をダブルクリックするだけでも、プリンシパルを編集できるようになります。
新しいプリンシパルを追加するときと同じ「プリンシパル」ダイアログボックスが表示されます。ただし、この場合は、既存のプリンシパルの情報が表示されています。表示されている情報を変更するには、ドロップダウンリストから新しい値を選択するか、またはテキストボックスの情報を新しい値で置き換えます。
終わったら、「了解」ボタンを選択します。変更を取り消す場合は、「取消し」を選択します。「プリンシパル:」エントリに、修正後のプリンシパルの情報が表示されます。
既存のプリンシパルを削除するには、「プリンシパル:」エントリでプリンシパルの行を選択し、「プリンシパルの削除」ボタンを選択します。
新しいアクセス権を追加するには、「ポリシーエントリ」ダイアログボックスで「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログボックスが表示されます。
アクセス権を追加するには、次のようにします。
「アクセス権:」というラベルの付いたドロップダウンリストには、組み込まれているアクセス権のタイプのリストが表示されます。リストにあるタイプを指定する場合は、リストからそのタイプを選択します。選択したアクセス権のタイプの完全な名前が、ドロップダウンリストの右側のテキストボックスに表示されます。
ユーザーが定義したアクセス権のタイプを指定する場合は、そのアクセス権のタイプをテキストボックスに入力します。
「アクセス権:」ドロップダウンリストから組み込みのアクセス権を選択した場合、そのタイプのアクセス権に特定のターゲット名の値があるときは、「ターゲット名:」というラベルの付いたドロップダウンリストにその値のリストが表示されるので、そのリストから値を選択します。
ターゲット名の選択肢が無限にある場合でも、特別な意味を持つ組み込みのターゲット名があるときは、そのようなターゲット名がドロップダウンリストに表示されます。たとえば、「FilePermission」のリストには、特別なターゲット名として「<<All FILES>>」が表示されます。
ドロップダウンリストにないターゲット名を指定するには、「ターゲット名:」ドロップダウンリストの右側のテキストボックスにターゲット名を直接入力します。たとえば、/JavaSoft/ptTest/
ディレクトリ内の data
という名前のファイルを指定するには、次のように入力します。
/JavaSoft/ptTest/data
一部のアクセス権は、ターゲット名だけを持ち、アクションを持っていません。このようなアクセス権では、「アクション:」ドロップダウンリストの右側のテキストボックスを空白のままにしておきます。そのアクセス権が組み込みのアクセス権の場合は、テキストボックスが自動的に淡色表示になり、利用できなくなります。
アクションの指定が必要なアクセス権の場合は、コンマで区切ったアクションのリストをテキストボックスに入力するか、またはドロップダウンリストからアクションを選択します。たとえば、「FilePermission」に指定されたファイルに対して読み込みと書き込みの両方のアクセス権を指定するには、まずリストから「read
」(または「write
」、順序は任意) を選択します。テキストボックスに「read」と表示されます。次に、「write
」を選択します。コンマとスペースが入力され、そのあとに「write」と表示されます。
アクセス権の情報を指定したら、「了解」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。新しいアクセス権の行が「ポリシーエントリ」ダイアログに表示されます。
このあと、同じ手順に従ってアクセス権を追加することができます。既存のアクセス権を編集または削除することもできます。
既存のアクセス権を編集するには、「ポリシーエントリ」ダイアログボックスでアクセス権の行を選択し、「アクセス権の編集」ボタンを選択します。または、アクセス権の行をダブルクリックするだけでも、そのアクセス権を編集できるようになります。
新しいアクセス権を追加するときと同じ「アクセス権」ダイアログボックスが表示されます。ただし、この場合は、既存のアクセス権の情報が表示されています。表示されている情報を変更するには、ドロップダウンリストから新しい値を選択するか、またはテキストボックスの情報を新しい値で置き換えます。
終わったら、「了解」ボタンを選択します。変更を取り消す場合は、「取消し」を選択します。「ポリシーエントリ」ダイアログボックスに、修正後のアクセス権の情報が表示されます。
既存のアクセス権を削除するには、「ポリシーエントリ」ダイアログボックスでそのアクセス権の行を選択し、「アクセス権の削除」ボタンを選択します。
ポリシーエントリの追加が終わったら、「ポリシーエントリ」ダイアログボックスの「完了」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。
「完了」を選択すると、これまでの操作で設定されたポリシーエントリを表す行が「Policy Tool」ウィンドウに表示されます。この行には、CodeBase、SignedBy、およびプリンシパルの情報 (存在する場合) が含まれています。「ポリシーエントリ」ダイアログボックスで、どの情報も指定しなかった場合は、
CodeBase <ALL>
とだけ表示されます。
注:キーストアにまだ存在していない SignedBy 別名がポリシーエントリに含まれている場合は、ポリシーエントリを閉じる時点で警告が表示されます。この場合は、「了解」を選択し、該当する別名をあとで作成します。別名の指定に誤りがある場合は、ポリシーエントリを編集して、別名を修正します。
既存のポリシーエントリを編集するには、「Policy Tool」メインウィンドウでそのエントリの行を選択し、「ポリシーエントリの編集」ボタンを選択します。または、エントリの行をダブルクリックするだけでも、そのエントリが編集できるようになります。
新しいポリシーエントリを追加するときと同じ「ポリシーエントリ」ダイアログボックスが表示されます。ただし、この場合は、既存のポリシーエントリの情報が表示されています。表示されている情報を変更するには、CodeBase および SignedBy の値の場合は、必要な直接入力し、プリンシパルおよびアクセス権の値の場合は、ボタンを使用して情報を変更します。
終わったら、「完了」ボタンを選択します。操作を取り消す場合は、「取消し」を選択します。
ポリシーファイルからポリシーエントリを削除するには、「Policy Tool」メインウィンドウでそのエントリの行を選択し、「ポリシーエントリの削除」ボタンを選択します。
選択したポリシーエントリ全体が表示されます。このエントリを削除するには「了解」を選択し、このエントリを削除しない場合は「取消し」を選択します。
既存のポリシーファイルに対する変更内容を保存するには、「ファイル」メニューの「保存」コマンドを選択します。
作成した新しいポリシーファイルを保存したり、既存のポリシーファイルを新しい名前のポリシーファイルにコピーしたりするには、「ファイル」メニューの「別名保存」コマンドを選択します。「別名保存」ダイアログボックスが表示されます。
ディレクトリ構造を移動して、ポリシーファイルの保存先のディレクトリを選択します。ファイル名を入力し、「了解」ボタンを選択します。ポリシーファイルが保存され、そのファイルの名前とパスが、「ポリシーファイル:」というラベルの付いたテキストボックスに表示されます
Policy Tool を終了するには、「ファイル」メニューの「終了」コマンドを選択します。
Policy Tool が、警告を警告ログに保存したというメッセージを表示した場合は、「ファイル」メニューの「警告ログの表示」コマンドを選択すれば、警告ログを表示できます。
たとえば、ポリシーファイルでキーストアの URL を指定していて、このキーストアがまだ存在していない場合は、ファイルを開くときなど、さまざまな場面で警告が表示されます。警告が存在する場合でも、ポリシーファイルの作業は続行できます。
このあと紹介する例では、次の操作を実行する方法を説明します。
初期状態では、ユーザーポリシーファイルは存在していません (手動で作成した場合を除く)。ユーザーポリシーファイルを作成するには、コマンド行に次のように入力して Policy Tool を起動します。
policytool
「Policy Tool」ウィンドウが表示されます。
Policy Tool は、起動するたびに、「ユーザーポリシーファイル」とも呼ばれるファイルからポリシー情報を取得して、ウィンドウに表示しようとします。デフォルトのユーザーポリシーファイルは、ホームディレクトリにある .java.policy
という名前のファイルです。ポリシーファイルが見つからない場合は、そのことを示すメッセージと空白の「Policy Tool」ウィンドウが表示されます。つまり、ウィンドウに見出しやボタンは表示されますが、データは含まれていません (次の画面を参照)。
このウィンドウでエントリを追加してファイルを保存すれば、ユーザーポリシーファイルを作成できます。
たとえば、/tests/
ディレクトリからのすべてのクラスに対し、/temp/data/
ディレクトリ内の mydata
という名前のファイルを読み取るアクセス権を許可するとします。この場合は、まず、「Policy Tool」メインウィンドウで「ポリシーエントリの追加」ボタンを選択します。
「ポリシーエントリ」ダイアログボックスが表示されます。
このダイアログボックスでは、
file:/tests/
というファイル URL を「CodeBase」テキストボックスに入力します。
コードに署名がなされている必要はないので、「SignedBy」テキストボックスは空白のままにします。
コードが認証されている必要はないので、「プリンシパル」リストは空白のままにします。
アクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログボックスが表示されます。
アクセス権を追加するには、次のようにします。
/temp/data/mydata
ここまでの操作で、「アクセス権」ダイアログボックスには、次のように表示されています。
アクセス権の情報を指定したら、「了解」ボタンを選択します。新しいアクセス権の行が「ポリシーエントリ」ダイアログに表示されます。
これで、このポリシーエントリの指定は終わりです。「完了」ボタンを選択します。ここで指定したポリシーエントリを表す行が「Policy Tool」ウィンドウに表示されます。この行には CodeBase の値だけが含まれています。
ここでは、「http://www.example.com/」という URL にあるコードのうち、別名「duke」の署名者によって署名された任意のコードに対して、/tmp/
ディレクトリ内のすべてのファイルへの読み取りアクセス権を許可するとします。さらに、これらのコードに、任意のホストに対する送信ソケット接続を開始できるアクセス権も許可するとします。この場合は、次の 2 つの操作を行う必要があります。
ポリシーエントリの SignedBy パートで指定された別名の鍵情報を含むキーストアを指定するには、「Policy Tool」メインウィンドウで「キーストア」メニューの「編集」コマンドを選択します。
ダイアログボックスが表示されたら、新しいキーストアの URL と、キーストアのタイプ (オプション) を指定します。
たとえば、/tests/
ディレクトリにある「mykeystore」という名前のキーストアを指定するには、「新規キーストアの URL」というラベルの付いたテキストボックスに、次の file:
URL を入力します。
file:/tests/mykeystore
キーストアのタイプが、セキュリティープロパティーファイル内の keystore.type プロパティーの値により指定されたデフォルトのタイプの場合は、「新規キーストアのタイプ」の値を入力する必要はありません。このプロパティーのデフォルトの値は、「JKS」(Sun がサポートする独自のキーストアのタイプ) です。
キーストアのタイプを指定するには、「新規キーストアのタイプ」というラベルの付いたテキストボックスに値を入力します。たとえば、キーストアのタイプが「JKS」であることを示すには、次のように入力します。
JKS
ダイアログボックスには、次のように表示されます。
キーストアの URL とタイプを指定したら、「了解」を選択します。「キーストア:」というラベルの付いたテキストボックスに、ここで指定したキーストアの URL とタイプが表示されます。
次に、ポリシーエントリを指定する必要があります。
「ポリシーツール」メインウィンドウで「ポリシーエントリの追加」ボタンを選択します。「ポリシーエントリ」ダイアログボックスが表示されます。「CodeBase」テキストボックスに、次のように入力します。
http://www.example.com/*
「*」は、この CodeBase が指定したディレクトリ内のクラスファイルと JAR ファイルの両方を示すことを意味します。
「SignedBy」テキストボックスには、次の別名を入力します。
duke
コードが認証されている必要はないので、「プリンシパル」リストは空白のままにします。
指定する 2 つのアクセス権のうち、最初のアクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログボックスが表示されます。次のように操作します。
/tmp/
ディレクトリ内のすべてのファイルを指定します。
/tmp/*
「アクセス権」ダイアログボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシーエントリ」ダイアログに表示されます。
次に、2 つ目のアクセス権を指定する必要があります。「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログボックスで、次のように操作します。
*
「アクセス権」ダイアログボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシーエントリ」ダイアログに表示されます。
これで、ポリシーエントリの指定は終わりです。「ポリシーエントリ」ダイアログの「完了」ボタンを選択します。「Policy Tool」ウィンドウに、指定した CodeBase、SignedBy、およびプリンシパルの値を含むポリシーエントリの行が表示されます。
ここでは、次のような X500 名を持つプリンシパルにアクセス権を与えるとします。
CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US
このプリンシパルに、/tmp/
ディレクトリに対する書き込みを許可します。
「ポリシーツール」メインウィンドウで「ポリシーエントリの追加」ボタンを選択します。「ポリシーエントリ」ダイアログボックスが表示されます。
コードの出所は制限しないので、「CodeBase」テキストボックスは空白のままにします。
コードに署名がなされている必要はないので、「SignedBy」テキストボックスは空白のままにします。
「プリンシパルの追加」ボタンを選択します。「プリンシパル」ダイアログボックスで、次のように操作します。
CN=Duke,OU=JavaSoft,O=Sun Microsystems,C=US
「プリンシパル」ダイアログボックスには、次のように表示されます。
「了解」ボタンを選択します。新しいプリンシパルの行が「プリンシパル」リストに表示されます。
アクセス権を追加するために、「アクセス権の追加」ボタンを選択します。「アクセス権」ダイアログボックスが表示されます。次のように操作します。
/tmp/
ディレクトリ内のすべてのファイルを指定します。
/tmp/*
「了解」ボタンを選択します。新しいアクセス権の行が「ポリシーエントリ」ダイアログに表示されます。
これで、ポリシーエントリの指定は終わりです。「ポリシーエントリ」ダイアログの「完了」ボタンを選択します。「Policy Tool」ウィンドウに、指定した CodeBase、SignedBy、およびプリンシパルの値を含むポリシーエントリの行が表示されます。
ここでは、作成したポリシーファイルを、デフォルトの場所 (ホームディレクトリ) にデフォルトの名前 (.java.policy) で保存するとします。
作成したユーザーポリシーファイルを保存するために、「ファイル」メニューの「別名保存」コマンドを選択します。「別名保存」ダイアログボックスが表示されます。
ホームディレクトリまでディレクトリ構造を移動します。型
.java.policy
先頭にピリオドがあることに注意してください。そのあと、「了解」ボタンを選択します。ポリシーファイルが保存され、そのファイルの名前とパスが、「ポリシーファイル:」というラベルの付いたテキストボックスに表示されます。
Policy Tool を終了するには、「ファイル」メニューの「終了」コマンドを選択します。