|
JAAS | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Object
|
+--javax.security.auth.Policy
|
+--com.sun.security.auth.PolicyFile
sun.security.provider.PolicyFile に置き換えられる。このクラスの使用は推奨されない
javax.security.auth.Policy のデフォルトの実装を表します。
Java ランタイム全体のポリシーを格納し、複数のファイルに存在する複数の静的ポリシー構成を合わせます。ポリシーファイルを検出し、その情報を Policy オブジェクトに読み込むアルゴリズムは次のとおりです。
java.security.Security のプロパティ auth.policy.url.1、auth.policy.url.2、...、auth.policy.url.X に対してループ処理を行います。これらのプロパティは <JAVA_HOME>/lib/security/java.security という名前の Java セキュリティプロパティファイルに設定されます (<JAVA_HOME> は JDK のインストールディレクトリ)。それぞれのプロパティ値では、ロードされるポリシーファイルを参照する URL を指定します。各ポリシーが読み込まれ、ロードされます。
java.lang.System のプロパティである java.security.auth.policy にも、別のポリシーファイルを参照する URL を設定できます (実行時に -D スイッチを使用する場合)。このプロパティが定義されており、このプロパティを使用するようにセキュリティプロパティファイルに設定されている (セキュリティプロパティ policy.allowSystemProperty が true) 場合は、参照されているポリシーがロードされます。
grant signedBy "alias", codeBase "URL",
principal principalClass "principalName",
principal principalClass "principalName",
... {
permission Type "name "action",
signedBy "alias";
permission Type "name "action",
signedBy "alias";
....
};
前述の太字でない項目は表記のとおりである必要があります。ただし、あとで説明するように、大文字小文字は関係なく、また省略可能な項目があります。斜体の項目は可変な値を表します。
grant エントリは、grant で開始します。 signedBy と codeBase は名前と値のペアで、省略可能です。省略されている場合は、任意の署名者 (署名なしのコードを含む) が一致し、任意の codeBase が一致します。principal の名前と値のペアは省略できません。この場合の Policy 実装では、プリンシパルベースの grant エントリだけを含めることができます。principalClass はワイルドカード * を設定することができ、その場合は任意の Principal クラスが一致します。さらに、principalName にワイルドカード * を設定することで、任意の Principal 名に一致させることができます。principalName に * を設定するときは、* を引用符で囲まないでください。
permission エントリは、permission で開始します。前述のテンプレートにある Type は特定のアクセス権タイプを表しており、java.io.FilePermission や java.lang.RuntimePermission などを指定します。
"action" は java.io.FilePermission など、多くのアクセス権の種類で必須です (許可するファイルアクセスの種類を指定する)。java.lang.RuntimePermission などのカテゴリでは不要なため、必須ではありません。タイプ名に続く "name" 値で指定するか、あるいは指定しません。
permission エントリ内の signedBy の名前と値のペアは省略可能です。存在する場合は、署名済みの許可を意味します。つまり、権限が付与されるために permission クラス自体が与えられたエイリアスで署名されていなければなりません。たとえば次の grant エントリを考えてみます。
grant principal foo.com.Principal "Duke" {
permission Foo "foobar", signedBy "FooSoft";
}
この場合、Foo.class 許可が FooSoft エイリアスによって署名されているか、あるいは Foo.class がシステムクラス (i.e., is found on the CLASSPATH) である場合に、Foo タイプのアクセス権に権限が付与されます。
エントリ内にある項目は、指定された順番 (permission、Type、"name"、"action" の順) に並んでいる必要があります。エントリの末尾にはセミコロンが付きます。
文字の大文字小文字は、識別子 (permission、signedBy、codeBase など) では関係ありませんが、Type や、値として渡される文字列にとっては重要です。
ポリシー構成ファイル内の 2 つのエントリ例を次に示します。
// if the code is comes from "foo.com" and is running as "Duke",
// grant it read/write to all files in /tmp.
grant codeBase "foo.com", principal foo.com.Principal "Duke" {
permission java.io.FilePermission "/tmp/*", "read,write";
};
// grant any code running as "Duke" permission to read
// the "java.vendor" Property.
grant principal foo.com.Principal "Duke" {
permission java.util.PropertyPermission "java.vendor";
上記の Policy の実装では、PrivateCredentialPermissions に対する特別な処理をサポートしています。grant エントリが PrivateCredentialPermission で構成されており、その PrivateCredentialPermission のプリンシパルクラスやプリンシパル名が self の場合、指定した Subject に Subject 自体の private クレデンシャルへのアクセス許可を与えます。たとえば、Subject である Duke に、Duke 自体の a.b.Credential へのアクセスを許可する例を次に示します。
grant principal foo.com.Principal "Duke" {
permission javax.security.auth.PrivateCredentialPermission
"a.b.Credential self",
"read";
};
Subject である Duke に、Duke 自体のすべての private クレデンシャルへのアクセスを許可する例を次に示します。
grant principal foo.com.Principal "Duke" {
permission javax.security.auth.PrivateCredentialPermission
"* self",
"read";
};
名前に関係なく SolarisPrincipal として承認されたすべての Subject に、Subject 自体の private クレデンシャルへのアクセスを許可する例を次に示します。
grant principal com.sun.security.auth.SolarisPrincipal * {
permission javax.security.auth.PrivateCredentialPermission
"* self",
"read";
};
すべての Subject に、Subject 自体の private クレデンシャルへのアクセスを許可する例を次に示します。
grant principal * * {
permission javax.security.auth.PrivateCredentialPermission
"* self",
"read";
};
CodeSource,
Permissions,
ProtectionDomain| コンストラクタの概要 | |
PolicyFile()
推奨されていません。 Policy オブジェクトを初期化し、デフォルトのポリシー構成ファイルを Policy オブジェクトに読み込みます。 |
|
| メソッドの概要 | |
PermissionCollection |
getPermissions(Subject subject,
CodeSource codesource)
推奨されていません。 Policy を検査し、指定した Subject や CodeSource に付与したアクセス権を返します。
|
void |
refresh()
推奨されていません。 すべてのポリシーファイルを読み込み直すことで、Policy オブジェクトをリフレッシュします。 |
| クラス javax.security.auth.Policy から継承したメソッド |
getPolicy, setPolicy |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
public PolicyFile()
| メソッドの詳細 |
public void refresh()
Policy 内の refreshSecurityException - 呼び出し元に Policy のリフレッシュ許可がない場合
public PermissionCollection getPermissions(Subject subject,
CodeSource codesource)
Policy を検査し、指定した Subject や CodeSource に付与したアクセス権を返します。
エントリ内で指定した codeBase や signedBy の値を使用して構築された CodeSource にメソッドに渡される CodeSource が含まれる (implies) 場合、およびこのメソッドに渡される Subject にエントリ内で指定したすべてのプリンシパルが含まれる場合は、特定の grant エントリに対するアクセス権が返されます。
grant エントリで指定した各 Principal 「P1」に対して、次の 2 つの条件のうちどちらかを満たす場合は、このメソッドに渡される Subject にエントリで指定したすべてのプリンシパルが含まれます。
Subject が Principal「P2」を持ち、P2.getClass().getName() の値が P1 のクラス名に、P2.getName() の値が P1 の名前に、それぞれ等しい
com.sun.security.auth.PrincipalComparator を、P1.implies では与えられた Subject を、それぞれ実装している
この Policy では、PrivateCredentialPermissions に対する特別な処理を実装しています。Principal クラスと名前に self を指定した PrivateCredentialPermission が渡されると、返す PermissionCollection に Permission を追加しません。代わりに、与えられた Subject に関連付けられた各 Principal に対して、新しい PrivateCredentialPermission を構築します。それぞれの新しい PrivateCredentialPermission にはそれぞれの Principal の Class と名前のほかに、当初与えられたアクセス権で指定したのと同じクレデンシャルクラスが含まれます。
Policy 内の getPermissionssubject - この Subject に与えられたアクセス権と、追加で渡した CodeSource が返される。
codesource - この CodeSource に与えられたアクセス権と、追加で渡した Subject が返される
Subject と CodeSource に与えられたアクセス権
|
JAAS | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||