Java Runtime のポリシーは、さまざまなソースを出所とするコードがどのようなアクセス権を使用できるかを指定するもので、Policy オブジェクトによって表されます。デフォルトの Policy の実装は、静的な ASCII 形式のポリシー構成ファイルから必要な情報を取得します。
ポリシーファイルは、シンプルなテキストエディタ、またはこのドキュメントで説明しているグラフィカルな Policy Tool ユーティリティを使って作成できます。Policy Tool を使うと、入力の手間を省くことができ、またポリシーファイルの構文について詳しく知らなくてもポリシーファイルを作成できるため、エラーを減らすことができます。
このドキュメントの「アクセス権とポリシーファイルの概要」では、アクセス権について説明し、ポリシーファイルの内容とデフォルトポリシーファイルについて解説します。また、これらのトピックについてのさらに詳しい説明にリンクしています。
「Policy Tool の使用法」では、Policy Tool を使ってポリシーファイルの作成と修正を行う方法について説明します。
「例」では、Policy Tool の使用例を示し、詳しく解説します。
「関連項目」では、関連するドキュメントへのリンクを提供します。
ここでは、アクセス権について簡単に説明し、ポリシーファイルの内容とデフォルトポリシーファイルについて解説します。アクセス権
アクセス権は、システムリソースへのアクセスを表します。アプレット (またはセキュリティマネージャとともに実行するアプリケーション) が、リソースへのアクセスを許可されるためには、アクセスを試みるコードに対し、該当するアクセス権を明示的に与える必要があります。
一般に、アクセス権は名前 (しばしば「ターゲット名」と呼ばれる) を持っています。 場合によっては、名前のほかに、コンマで区切られた 1 つ以上のアクションのリストを持つこともあります。たとえば、
/tmp/
ディレクトリ内の abc という名前のファイルを読み取るアクセス権を作成するには、ターゲット名 /tmp/abc とアクション文字列 read を持つファイルアクセス権 (正確には java.io.FilePermission アクセス権) を作成します。デフォルトの Policy の実装では、ファイル \tmp\abc を読み取ろうとするコードに対し、ポリシー構成ファイルの「ポリシーエントリ」(「付与エントリ」とも呼ばれる) によって、指定のアクセス権を与えなければなりません。Policy Tool を使うと、ポリシー構成ファイルにこのようなエントリを作成することができます。
「Java 2 Platform におけるアクセス権」には、Java 2 Platform に組み込まれているアクセス権の種類、および各アクセス権を与えた場合のリスクについて説明している表が含まれています。また、正常な実行のためにアクセス権が必要になる Java 2 Platform メソッド、および各メソッドに必要なアクセス権も表に示されています。
デフォルトポリシーファイルとその場所
デフォルトでは、システム全体のポリシーファイルが 1 つと、オプションのユーザポリシーファイルが 1 つ存在します。
システムポリシーファイルは、デフォルトでは次の場所にあります。
java.home/lib/security/java.policyここで、 java.home は、実行環境のディレクトリ (SDK の jre ディレクトリまたは Java 2 Runtime Environment の最上位のディレクトリ) です。
ユーザポリシーファイルは、デフォルトでは次の場所にあります。
user.home/.java.policyここで、user.home は、ユーザのホームディレクトリを表しています。
Policy が初期化されると、まずシステムポリシーがロードされ、次に、ロードされたシステムポリシーにユーザポリシーが追加されます。どちらのポリシーも存在しない場合は、組み込みポリシーが使われます。組み込みポリシーは、オリジナルのサンドボックス (sandbox) ポリシーと同じものです。
ポリシーファイルの場所は、セキュリティプロパティファイルの中で指定されています。 セキュリティプロパティファイルは、次の場所にあります。
java.home/lib/security/java.securityポリシーファイルの場所は、次のような形式の名前を持つプロパティの値として指定されています。policy.url.nここで、n
は数字を表しています。次に示す形式の行で、それぞれのプロパティの値を指定します。ここで、URL は URL の指定を表します。たとえば、「システムポリシーファイル」または「ユーザポリシーファイル」と呼ばれるデフォルトのポリシーファイルは、セキュリティプロパティファイルの中で次のように指定されています。policy.url.n=URLpolicy.url.1=file:${java.home}/lib/security/java.policy policy.url.2=file:${user.home}/.java.policy注: ポリシーファイルやセキュリティプロパティファイルでは、次のような文字列が使われていることがあります。
${some.property}この文字列は、指定されたシステムプロパティの値に展開されます。次に例を示します。${java.home}実行環境のディレクトリ (SDK の jre ディレクトリまたは Java 2 Runtime Environment の最上位のディレクトリ) を指定する java.home プロパティの値を示しています。プロパティの展開が許可されるかどうかは、セキュリティプロパティファイル内の policy.expandProperties プロパティの値によって管理されています。このプロパティの値が true (デフォルト) の場合は、展開が許可されます。
セキュリティプロパティファイルでは、(http:// 形式のものを含め) URL を複数指定して、該当するポリシーファイルをすべてロードすることもできます。また、上に示したポリシーファイルの指定のうち、2 番目のポリシーファイルの指定をコメントアウトするか、あるいは修正すれば、デフォルトユーザポリシーファイルの読み込みを無効にすることができます。
ポリシーファイルの読み込みは、policy.url.1 から始めて、番号を 1 つずつ増やしながら URL が見つからなくなるまで続けられます。したがって、policy.url.1 と policy.url.3 がある場合、policy.url.3 は読み込まれません。
アプリケーションを実行するときに、追加のポリシーファイルや別のポリシーファイルを指定することもできます。この場合は、-Djava.security.policy コマンド行引数を使います。この引数は java.security.policy プロパティの値を設定します。 たとえば、次のように入力します。 pURL は、ポリシーファイルの場所を示す URL です。 この例では、セキュリティプロパティファイルで指定されているすべてのポリシーファイルのほかに、pURL で指定されているポリシーファイルもロードされます。
java -Djava.security.manager -Djava.security.policy=pURL SomeApp-Djava.security.manager 引数によって、デフォルトのセキュリティマネージャがインストールされるので、このアプリケーションに対してはポリシーのチェックが行われます。アプリケーション SomeApp がセキュリティマネージャをインストールする場合は、-Djava.security.manager 引数を指定する必要はありません。等号を 2 つ使って次のように入力する場合は、指定されたポリシーファイルだけが使われ、ほかのすべてのポリシーファイルは無視されます。
java -Djava.security.manager -Djava.security.policy==pURL SomeAppポリシーファイルを appletviewer に渡す場合は、次のように -Djava.security.policy 引数を指定します。
appletviewer -J-Djava.security.policy=pURL myApplet注: セキュリティプロパティファイルで policy.allowSystemProperty プロパティに false が設定されている場合は、-Djava.security.policy のポリシーファイルの値は (java コマンドと appletviewer コマンドのどちらの場合も) 無視されます。policy.allowSystemProperty プロパティの既定値は true です。ポリシーファイルの内容
ポリシー構成ファイル (略してポリシーファイルとも呼ぶ) は、指定されたコードソースからのコードに対し、どのアクセス権が許可されているかを示します。ポリシー構成ファイルは、エントリのリストを含んでいます。ポリシー構成ファイルは「キーストア」エントリを 1 つ含むことができ、0 個以上の「ポリシー」エントリ (または「付与」エントリ) を含みます。
「キーストア」は、非公開鍵と、対応する公開鍵を認証する X.509 証明書などのデジタル証明書が格納されたデータベースです。キーストアの作成と管理には、keytool ユーティリティを使います。ポリシー構成ファイルで指定されたキーストアは、ポリシー構成ファイルの付与エントリで指定された署名者 (署名者の指定がある場合) の公開鍵を参照するときに使われます。公開鍵は、コードに署名するのに使われたデジタル署名を検証するために使われます。
署名者の別名を指定しているポリシーエントリがある場合は、ポリシー構成ファイルでキーストアを指定する必要があります。
現在、ポリシーファイルで指定できるのは、1 つのキーストアエントリだけです。キーストアエントリでは、キーストアの URL と、オプションでキーストアのタイプを指定します。URL は、ポリシーファイルがある場所からの相対位置を表します。たとえば、セキュリティプロパティファイルの中でポリシーファイルが次のように指定されているとします。
policy.url.1=http://foo.bar.com/blah/some.policyまた、このポリシーファイルには、.keystore という値を持つキーストアエントリがあるとします。 この場合、指定されたキーストアは、次の場所からロードされます。http://foo.bar.com/blah/.keystoreURL に絶対位置を指定することもできます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開鍵とキーストア自体の完全性を保護するために使われるアルゴリズムを定義します。タイプを指定しない場合は、セキュリティプロパティファイル内の keystore.type プロパティの値によって指定されたタイプであるとみなされます。この値の初期値は「JKS」で、Sun がサポートする独自のキーストアのタイプを指定しています。
実行されるコードは、常に、特定の「コードソース」から来ると考えられます。コードソースは、アプレット (またはアプリケーション) の出所を表す CodeBase の場所 (URL) だけでなく、キーストアからの 1 つ以上の (シンボリックな) 別名への参照を含むことがあります。 このような参照は、コードの署名に使われた非公開鍵に対応する公開鍵を含んだキーストアエントリを指定するために使われます。
ポリシーファイル内の各ポリシーエントリは、次のものを含んでいます。
- コードの出所を表す URL の場所を指定するための CodeBase エントリ。 このエントリは省略可能
- キーストアからの別名を指定するための SignedBy エントリ。 別名は、コードの署名に使われた非公開鍵を所有する署名者を参照するために使われる。 このエントリは省略可能
- アクセス権を指定するための 1 つ以上のアクセス権エントリ。 アクセス権は、指定された CodeBase を出所とし、指定された SignedBy 別名によって署名されたコードに与えられる
Policy Tool の起動
Policy Tool を起動するには、コマンド行で次のように入力します。policytoolPolicy Tool が起動され、[Policy Tool] ウィンドウが表示されます。
Policy Tool は、起動するたびに、「ユーザポリシーファイル」と呼ばれるファイルのポリシー情報をウィンドウに表示しようとします。デフォルトのユーザポリシーファイルは、ホームディレクトリにある
.java.policy
という名前のファイルです。ポリシーファイルを見つけることができない場合は、そのことを示すメッセージを表示し、空の [Policy Tool] ウィンドウを表示します。 ウィンドウには見出しやボタンが表示されますが、データは含まれていません。
Policy Tool の起動後は、任意のポリシーファイルを開くことができます。 また、ポリシーエントリを追加したり、必要に応じてキーストアを指定したりしたあとでファイルを保存すれば、新しいポリシーファイルを作成することもできます。
Policy Tool を初めて実行した時点では、ユーザポリシーファイルは存在していません (手動で作成した場合は除く)。
新しいポリシーファイルの作成
新しいポリシーファイルを作成するには、[File] メニューの [New] コマンドを選択します。現在開かれているポリシーファイルがあれば、そのファイルが閉じられ (このとき、ファイルの保存を促すメッセージが表示される)、新しく [Policy Tool] ウィンドウが表示されます。 ウィンドウには見出しやボタンが表示されますが、データは含まれていません。注: 上記の操作は、Policy Tool を初めて実行した場合は必要ありません。Policy Tool はユーザポリシーファイルを開こうとしますが、ファイルはまだ存在しないので (手動で作成した場合は除く)、データが何も含まれていないウィンドウが画面に表示されます。
新しい [Policy Tool] ウィンドウが表示されたら、ポリシーエントリを作成し、(キーストアの別名を指定したポリシーエントリがある場合は) キーストアを指定できます。ポリシーファイルは、いつでも保存できます。
ほかのポリシーファイルのオープン
現在作業中のポリシーファイルとは別のポリシーファイルで作業するときは、[File] メニューの [Open] コマンドを使います。現在開かれているポリシーファイルがあれば、(必要に応じてファイルの保存を促す最初のメッセージが表示されたあとに) そのファイルが閉じられ、[Open] ダイアログが表示されます。このダイアログで、作業するポリシーファイルがあるディレクトリに行き着くまで、ディレクトリ構造をナビゲートすることができます。ファイルを選択して [了解] ボタンを選択します。
ポリシーファイル名、キーストアの URL (該当する場合)、およびポリシーファイル内の各ポリシーエントリの CodeBase パートと SignedBy パートなど、選択したポリシーファイルの情報が [Policy Tool] ウィンドウに表示されます。
キーストアの指定
ポリシーエントリの SignedBy パートで指定された別名の鍵情報を含むキーストアを指定するには、[Edit] メニューの [Change KeyStore] コマンドを選択します。ダイアログボックスが表示されたら、新しいキーストアの URL と、オプションでキーストアのタイプを指定します。
たとえば、
/tests/
ディレクトリにある mykeystore という名前のキーストアを指定するには、[New KeyStore URL] というラベルの付いたテキストボックスに、次のようにfile:
URL を入力します。file:/tests/mykeystoreまた、キーストアのタイプに JKS (Sun がサポートしている独自のキーストアのタイプ) を指定するには、[New KeyStore Type] というラベルの付いたテキストボックスに、次のように入力します。JKSキーストアの URL と、必要に応じてタイプを指定したら、[OK] を選択します。 このとき、[Cancel] を選択すれば、操作を取り消すことができます。操作を取り消さなかった場合は、[Keystore:] というラベルの付いたテキストボックスに、指定したキーストアの URL とタイプが表示されます。
新しいポリシーエントリの追加
新しいポリシーエントリを追加するには、メインの [Policy Tool] ウィンドウで [Add Policy Entry] ボタンを選択します。[Policy Entry] ダイアログボックスが表示されます。
このダイアログボックスでは、次のものを指定できます。
- コードの出所を表す URL の場所を指定するための CodeBase エントリ。 このエントリは省略可能です。たとえば、ローカルの
/JavaSoft/TESTS/
ディレクトリからのコードを指定するには、[CodeBase] テキストボックスで次のように file: URL を入力します。file:/JavaSoft/TESTS/
- キーストアからの別名を指定するための SignedBy エントリ。 別名は、コードの署名に使われた非公開鍵を所有する署名者を参照するために使われます。 このエントリは省略可能です。たとえば、duke という名前の別名を指定するには、[SignedBy] テキストボックスで次のように入力します。
duke
- アクセス権を指定するための 1 つ以上のアクセス権エントリ。アクセス権は、CodeBase と SignedBy の値によって指定されたコード (またはこれらの値が指定されていない場合はすべてのコード) に与えられます(「新しいアクセス権の追加」を参照)。
SignedBy の値は、署名者に関連付けられた公開鍵の集合に (キーストアを使って) マッピングされる別名の文字列です。これらの公開鍵は、指定されたコードソースからのクラスが、実際にこれらの署名者によって署名されていることを検証するために使われます。
SignedBy の値には、複数の署名者をコンマで区切った文字列を指定できます。 たとえば、「Adam,Eve,Charles」のように指定できます。 この場合は、各要素が OR ではなく AND で結ばれ、「Adam、Eve、および Charles によって署名された」という意味になります。
SignedBy の値は省略できます。 省略した場合は、「任意の署名者」という意味になり、コードに署名が付いているかどうかは問われなくなります。同様に、CodeBase エントリを省略した場合は、「任意のコード」という意味になり、コードの出所は問われません。
このため、CodeBase エントリが存在しない場合は、指定された別名の署名が付いたすべてのコードに対し、指定されたアクセス権が与えられます。SignedBy エントリが存在しない場合は、コードに署名が付いているかどうか、また誰が署名しているかには関係なく、指定された CodeBase を出所とするすべてのコードに対して、指定されたアクセス権が与えられます。CodeBase エントリが存在せず、SignedBy エントリも存在しない場合は、すべてのコードに対して、指定されたアクセス権が与えられます。
注: CodeBase 値の正確な意味は、末尾の文字によって異なります。末尾が「/」の CodeBase は、指定されたディレクトリ内のすべてのクラスファイル (JAR ファイルでない) に一致します。末尾が「/*」の CodeBase は、そのディレクトリ内にあるすべてのファイル (クラスファイルと JAR ファイルの両方) に一致します。末尾が「/-」の CodeBase は、指定されたディレクトリとその下のサブディレクトリ内のすべてのファイル (クラスファイルと JAR ファイルの両方) に一致します。
新しいアクセス権の追加
新しいアクセス権を追加するには、[Policy Entry] ダイアログボックスで [Add Permission] ボタンを選択します。[Permissions] ダイアログボックスが表示されます。
アクセス権を追加するには、次の操作を行います。
アクセス権に関する情報の指定を終えたら、[OK] ボタンを選択します (操作を取り消す場合は [Cancel] を選択)。新しく指定したアクセス権の行が追加され、[Policy Entry] ダイアログに表示されます。
- アクセス権型を入力または選択します。
[Permission:] というラベルの付いたドロップダウンリストは、組み込みアクセス権型のリストを含んでいます。この型のアクセス権を指定する場合は、リストから目的のアクセス権を選択します。 完全なアクセス権型名が、リストの右側のテキストボックスに表示されます。
ユーザが定義したアクセス権型を指定する場合は、目的のアクセス権型をテキストボックスに入力します。
- アクセス権のターゲット名を入力または選択します。
[Permission:] ドロップダウンリストで組み込みアクセス権を選択した場合、そのアクセス権型で、特定のターゲット名の値が必要になるときは、[Target Name:] というラベルの付いたドロップダウンリストに含まれる値のリストから、目的の値を選択します。
ターゲット名の選択肢が無限にある場合でも、特別な意味を持つ組み込みターゲット名の指定が存在する場合は、その組み込みターゲット名がドロップダウンリストに表示されます。たとえば、[File Permission] のリストには、特別なターゲット名 <<All Files>> が表示されます。
ドロップダウンリストにないターゲット名を指定するには、[Target Name:] ドロップダウンリストの右側のテキストボックスに直接、ターゲット名を入力します。たとえば、
/JavaSoft/ptTest/
ディレクトリ内のdata
という名前のファイルを指定するには、次のように入力します。/JavaSoft/ptTest/data
- アクションを指定する場合は、1 つ以上のアクションを入力または選択します。
アクセス権の中には、ターゲット名だけを持ち、アクションを持たないものがあります。このようなアクセス権では、[Actions:] ドロップダウンリストの右側のテキストボックスを空白のままにしておきます。このようなアクセス権が組み込みアクセス権の場合、テキストボックスは自動的に選択不可になります。
アクションの指定が必要なアクセス権の場合は、コンマで区切ったアクションのリストをテキストボックスに入力するか、あるいはドロップダウンリストから目的のアクションを選択します。たとえば、ファイルアクセス権の指定されたファイルに対する読み取りと書き込みの両方のアクセスを指定するには、まず、リストから
read
(またはwrite
。順序は任意) を選択します。テキストボックスに read と表示されます。次に、write
を選択します。 コンマと空白が入力され、その後に write と表示されます。
- 必要に応じて、[SignedBy] ラベルの右側のテキストボックスに SignedBy 別名を入力します。アクセス権エントリでは SignedBy の値は省略できます。この値が存在する場合は、署名付きアクセス権であることを示します。つまり、そのアクセス権を与えることができるためには、アクセス権クラスそれ自体が、指定された別名によって署名されていなければなりません。
以後は、同じ手順を使ってアクセス権を追加できます。また、既存のアクセス権を編集したり、アクセス権を削除することもできます。
アクセス権の編集
既存のアクセス権を編集するには、[Policy Entry] ダイアログボックスで目的のアクセス権に対応する行を選択し、[Edit Permission] ボタンを選択します。あるいは、目的のアクセス権の行をダブルクリックする方法も使用できます。新しいアクセス権を追加したときと同じ [Permissions] ダイアログボックスが表示されます。 ただし、この場合は既存のアクセス権情報が表示されています。 新しいアクセス権を追加したときと同じ [Permissions] ダイアログボックスが表示されます。 ただし、この場合は既存のアクセス権情報が表示されています。表示されている情報を変更するには、ドロップダウンリストで新しい値を選択するか、あるいはテキストボックスの情報を新しい値で置き換えます。 表示されている情報を変更するには、ドロップダウンリストで新しい値を選択するか、あるいはテキストボックスの情報を新しい値で置き換えます。
操作を終えたら、[OK] ボタンを選択します (変更を取り消す場合は [Cancel] を選択)。[Policy Entry] ダイアログボックスに、変更内容を反映したアクセス権が表示されます。
アクセス権の削除
既存のアクセス権を削除するには、[Policy Entry] ダイアログボックスで目的のアクセス権に対応する行を選択し、[Remove Permission] ボタンを選択します。ポリシーエントリの追加の完了
ポリシーエントリの追加を終えたら、[Policy Entry] ダイアログボックスの [Done] ボタンを選択します。 操作を取り消す場合は [Cancel] を選択します。[Done] を選択した場合は、これまでの操作で設定されたポリシーエントリを表す行が [Policy Tool] ウィンドウに表示されます。この行には CodeBase と SignedBy の情報 (存在する場合) だけが含まれています。[Policy Entry] ダイアログボックスでどちらも指定しなかった場合は、次のように表示されます。
CodeBase <ALL>注: キーストアにまだ存在していない SignedBy 別名がポリシーエントリに含まれている場合は、ポリシーエントリを閉じるときに警告が表示されます。この場合は、[OK] を選択し、該当する別名を後で作成します。 別名の指定に誤りがある場合は、ポリシーエントリを編集し、別名を修正します。
ポリシーエントリの編集
既存のポリシーエントリを編集するには、メインの [Policy Tool] ウィンドウで目的のエントリの行を選択し、[Edit Policy Entry] ボタンを選択します。あるいは、目的のエントリの行をダブルクリックする方法も使用できます。新しいポリシーエントリを追加したときと同じ [Policy Entry] ダイアログボックスが表示されます。 ただし、この場合は既存のポリシーエントリ情報が表示されています。表示されている情報を変更するには、CodeBase と SignedBy の値を直接入力し直すか、アクセス権を追加、削除、あるいは編集します。
操作を終えたら、[Done] ボタンを選択します (操作を取り消す場合は [Cancel] を選択)。
ポリシーエントリの削除
ポリシーファイルからポリシーエントリを削除するには、メインの [Policy Tool] ウィンドウで目的のエントリの行を選択し、[Remove Policy Entry] ボタンを選択します。選択したポリシーエントリ全体が表示されます。 エントリを削除する場合は、[OK] を選択します。 エントリを削除しない場合は、[Cancel] を選択します。
ポリシーファイルの保存
既存のポリシーファイルに対する変更内容を保存するには、[File] メニューの [Save] コマンドを選択します。
作成した新しいポリシーファイルを保存したり、既存のポリシーファイルを新しい名前のポリシーファイルにコピーしたりするには、[File] メニューの [Save As] コマンドを選択します。[Save As] ダイアログボックスが表示されます。
ポリシーファイルの保存先のディレクトリに到達するまでディレクトリ構造をナビゲートします。目的のファイル名を入力して [OK] ボタンを選択します。ポリシーファイルが保存され、ファイルの名前とパスが [Policy File:] ポリシーファイルが保存され、ファイルの名前とパスが、[Policy File:] というラベルの付いたテキストボックスに表示されます。
Policy Tool の終了
Policy Tool を終了するには、[File] メニューの [Exit] コマンドを選択します。警告ログの表示
Policy Tool が、警告を警告ログに保存したという意味のメッセージを表示した場合は、[Edit] メニューの [View Warning Log] コマンドを選択すると、警告ログを表示できます。たとえば、ポリシーファイルでキーストア URL を指定していて、このキーストアがまだ存在していない場合は、ファイルを開くときなど、さまざなな場面で警告が表示されます。警告が存在する場合でも、ポリシーファイルの作業は続行できます。
ここでは、次の操作方法の例を示します。
ユーザポリシーファイルの作成の開始
初期状態では、ユーザポリシーファイルは存在していません (手動で作成した場合は除く)。したがって、ユーザポリシーファイルを作成するために、コマンド行で次のように入力して Policy Tool を起動します。
policytoolPolicy Tool が起動され、[Policy Tool] ウィンドウが表示されます。
Policy Tool は、起動するたびに、「ユーザポリシーファイル」と呼ばれるファイルのポリシー情報をウィンドウに表示しようとします。デフォルトのユーザポリシーファイルは、ホームディレクトリにある
.java.policy
という名前のファイルです。ポリシーファイルを見つけることができない場合は、そのことを示すメッセージを表示し、空の [Policy Tool] ウィンドウを表示します。 ウィンドウには見出しやボタンが表示されますが、データは含まれていません。
このウィンドウでエントリを追加してファイルを保存すれば、ユーザポリシーファイルを作成できます。
ポリシーエントリの追加
たとえば、/tests/
ディレクトリからのすべてのクラスに対し、/temp/data/
ディレクトリ内のmydata
という名前のファイルを読み取るアクセス権を与えるとします。この場合は、まず、メインの [Policy Tool] ウィンドウで [Add Policy Entry] ボタンを選択します。[Policy Entry] ダイアログボックスが表示されます。
[CodeBase] テキストボックスで次のように file: URL を入力します。
file:/tests/コードに署名を付ける必要はないので、[SignedBy] テキストボックスは空白のままにしておきます。
アクセス権を追加するには、[Add Permission] ボタンを選択します。[Permissions] ダイアログボックスが表示されます。
アクセス権を追加するには、次の操作を行います。
ここまでの操作で、[Permission] ダイアログボックスには、次のように表示されます。
- [Permission:] ドロップダウンリストから [FilePermission] を選択します。完全なアクセス権型名 (java.io.FilePermission) が、ドロップダウンリストの右側のテキストボックスに表示されます。
- [Target Name:] というラベルの付いたリストの右側のテキストボックスに、次のように入力します。
/temp/data/mydata- [Actions:] ドロップダウンリストから [read] を選択して読み込みアクセスを指定します。
アクセス権に関する情報の指定を終えたら、[OK] ボタンを選択します。新しく指定したアクセス権の行が追加され、[Policy Entry] ダイアログには次のように表示されます。
これで、ポリシーエントリの指定は終わりです。 [Done] ボタンを選択します。ポリシーエントリを表す行が [Policy Tool] ウィンドウに表示されます。この行には CodeBase の値だけが含まれます。
キーストアの指定
たとえば、http://java.sun.com/ という URL からのコードのうち、別名「duke」の署名が付いたすべてのコードに対し、/tmp/
ディレクトリ内のすべてのファイルへの読み取りアクセス権を与えるとします。また、これらのコードに、任意のホストへの外向きのソケット接続を開始できるアクセス権も与えるとします。この場合は、次の 2 つのことを行う必要があります。ポリシーエントリの SignedBy パートで指定された別名の鍵情報を含むキーストアを指定するには、メインの [Policy Tool] ウィンドウで、[Edit] メニューの [Change Keystore] コマンドを選択します。
- 目的の別名を含むキーストアの指定
- 目的のアクセス権を与えるためのポリシーエントリの追加
ダイアログボックスが表示されたら、新しいキーストアの URL と、オプションでキーストアのタイプを指定します。
たとえば、
/tests/
ディレクトリにある mykeystore という名前のキーストアを指定するには、[New KeyStore URL] というラベルの付いたテキストボックスに、次のようにfile:
URL を入力します。file:/tests/mykeystoreキーストアのタイプが、セキュリティプロパティファイル内の keystore.type プロパティの値により指定されたデフォルトタイプの場合は、[New KeyStore Type] の値を入力する必要はありません。このプロパティのデフォルトの値は、Sun がサポートする独自のキーストアのタイプである「JKS」です。キーストアのタイプを指定するには、[New KeyStore Type] というラベルの付いたテキストボックスに値を入力します。たとえば、キーストアのタイプが「JKS」であることを示すには、次のように入力します。
JKSダイアログボックスには、次のように表示されます。
キーストアの URL とタイプの指定を終えたら、[OK] を選択します。[Keystore:] というラベルの付いたテキストボックスに、指定したキーストアの URL とタイプが表示されます。
次は、ポリシーエントリを指定する必要があります。
SignedBy 別名を持つポリシーエントリの追加
メインの [Policy Tool] ウィンドウで [Add Policy Entry] ボタンを選択します。[Policy Entry] ダイアログボックスが表示されます。[CodeBase] テキストボックスに次の URL を入力します。http://java.sun.com/*「*」は、特定のディレクトリのクラスおよび JAR ファイルがこのコードベースに一致することを意味します。[SignedBy] テキストボックスには、次の別名を入力します。
duke指定する 2 つのアクセス権のうち、最初のアクセス権を追加するには、[Add Permission] ボタンを選択します。[Permissions] ダイアログボックスが表示されます。次の操作を行います。
[Permissions] ダイアログボックスには、次のように表示されます。
- [Permission:] ドロップダウンリストから [FilePermission] を選択します。完全なアクセス権型名 (java.io.FilePermission) が、ドロップダウンリストの右側のテキストボックスに表示されます。
- [Target Name:] というラベルの付いたリストの右側のテキストボックスに、次のように入力し、
/tmp/
ディレクトリ内のすべてのファイルを指定します。/tmp/*- [Actions:] ドロップダウンリストから [read] を選択して読み込みアクセスを指定します。
[OK] ボタンを選択します。新しく指定したアクセス権の行が追加され、[Policy Entry] ダイアログには次のように表示されます。
次に、もう一方のアクセス権を指定する必要があります。[Add Permission] ボタンを選択します。[Permissions] ダイアログボックスが表示されたら、次の操作を行います。
[Permissions] ダイアログボックスには、次のように表示されます。
- [Permission:] ドロップダウンリストから [SocketPermission] を選択します。完全なアクセス権型名 (java.net.SocketPermission) が、ドロップダウンリストの右側のテキストボックスに表示されます。
- [Target Name:] というラベルの付いたリストの右側のテキストボックスに、次のように入力し、すべてのホストを指定します。
*- [Actions:] ドロップダウンリストから [connect] を選択して接続を得るためのアクセス権を指定します。
[OK] ボタンを選択します。新しく指定したアクセス権の行が追加され、[Policy Entry] ダイアログには次のように表示されます。
これで、ポリシーエントリの指定は終わりです。 [Policy Entry] ダイアログの [Done] ボタンを選択します。[Policy Tool] ウィンドウに、指定した CodeBase と SignedBy の値を含むポリシーエントリの行が、次のように表示されます。
ユーザポリシーファイルの保存
作成したポリシーファイルを、デフォルトの場所 (ホームディレクトリ) にデフォルトの名前 (.java.policy) で保存するとします。作成したユーザポリシーファイルを保存するには、[File] メニューの [Save As] コマンドを選択します。[Save As] ダイアログボックスが表示されます。
ホームディレクトリまでディレクトリ構造をナビゲートし、ファイル名を次のように入力します。ファイル名の先頭にピリオドがあることに注意してください。
.java.policy[OK] ボタンを選択します。ポリシーファイルが保存され、ファイルの名前とパスが、[Policy File:] というラベルの付いたテキストボックスに表示されます。Policy Tool の終了
Policy Tool を終了するには、[File] メニューの [Exit] コマンドを選択します。
- Java 2 SDK におけるアクセス権
- デフォルトの Policy の実装とポリシーファイルの構文
- keytool ツールのドキュメント
- Java セキュリティアーキテクチャ
- Policy Tool を含むセキュリティツールの使用法の例については、Java チュートリアルの「Security」