すべての ACL ファイルは、特定の書式と構文に従って記述する必要があります。ACL ファイルは 1 つまたは複数の ACL を含むテキストファイルです。すべての ACL ファイルの先頭に、構文のバージョン番号を記述する必要があります。次に例を示します。
version 3.0;
バージョン行は、何行のコメント行の後にも指定できます。Proxy Server は、構文バージョン 3.0 を使用します。コメント行の先頭に # を付けて、ファイルにコメントを挿入することができます。
ファイル内の各 ACL は、タイプを定義する文で始まります。パス、リソース、または名前付きのいずれかです。
リソース ACL では、影響が及ぶテンプレートを指定します。たとえば http://、https://、ftp:// などです。テンプレートについては、第 16 章「テンプレートとリソースの管理」を参照してください。
名前付き ACL では、 obj.conf ファイル内のリソースで参照される名前を指定します。サーバーには、すべてのユーザーに読み取りアクセスを許可し、LDAP ディレクトリのユーザーに書き込みアクセスを許可する、デフォルト名の付いたリソースが付属しています。Proxy Server のユーザーインタフェースから名前付き ACL を作成することはできますが、obj.conf ファイル内のリソースで、名前付き ACL を手動で参照する必要があります。
パス ACL とリソース ACL ではワイルドカードを使用することができます。ワイルドカードについては、第 16 章「テンプレートとリソースの管理」を参照してください。
タイプの行は acl という文字で始まり、タイプ情報は二重引用符で囲まれ、次にセミコロン (;) が続きます。次に例を示します。
acl "default";acl "http://*.*";
異なる ACL ファイルの間でも、すべての ACL の各タイプ情報に固有の名前を付ける必要があります。ACL のタイプを定義したあと、ACL で使用されるメソッド (認証文) と、アクセスを許可、または拒否されるユーザーやコンピュータ (承認文) を定義する 1 つまたは複数の文を記述することができます。次の節では、このような文の構文について説明します。
ACL では、必要に応じて、サーバーが ACL を処理するときに使用する必要のある認証方法を指定します。主に次の 3 つのメソッドがあります。
基本メソッドとダイジェストメソッドでは、リソースにアクセスしようとしているユーザーに対してユーザー名とパスワードの入力を要求します。
SSL メソッドでは、ユーザーに対してクライアント証明書を持っていることを要求します。認証されるには、Proxy Server の暗号化を有効にする必要があり、信頼されている CA のリストにユーザーの証明書発行元が記載されている必要があります。
デフォルトでは、サーバーはメソッドを指定しない ACL に対して基本メソッドを使用します。サーバーの認証データベースは、ユーザーから送信されたダイジェスト認証をサポートする必要があります。
各認証行では、サーバーが認証を行う属性を指定する必要があります。ユーザー、グループ、またはその両方です。次に示す ACL タイプ行の後に表示される認証文では、データベースまたはディレクトリ内の各ユーザーと一致するユーザーの基本認証を指定します。
authenticate(user) { method = "basic";};
次の例では、ユーザーとグループの認証方法として SSL を使用します。
authenticate(user, group) { method = "ssl";};
次の例では、ユーザー名が sales という語で始まるユーザーを認証します。
allow (all) user = "sales*";
最後の行が group = sales に変更された場合、グループの属性が認証されないため、ACL がエラーになります。
各 ACL エントリには、1 つ以上の承認文を指定できます。承認文では、サーバーリソースへのアクセスを許可、または拒否するユーザーを指定します。
承認文を作成する場合、次の構文を使用します。
allow|deny [absolute] (right[,right...]) attribute expression;
各行の先頭を allow または deny にします。規則は階層化されているため、通常の場合、最初の規則ですべてのユーザーに対してアクセスを拒否し、2 番目以降の規則で個別のユーザー、グループ、またはコンピュータに対してアクセスを許可してください。たとえば、すべてのユーザーに対して /my_files という名前のディレクトリへのアクセスを許可し、一部のユーザーのみに対してサブディレクトリ /my_files/personal へのアクセスを許可する場合、/my_files ディレクトリへのアクセスを許可されたユーザーは /my_files/personal ディレクトリへのアクセスも許可されるため、サブディレクトリに対するアクセス制御は機能しません。これを避けるには、すべてのユーザーのアクセスを拒否してからアクセスする必要のあるユーザーだけにアクセスを許可する規則をサブディレクトリに対して作成します。
ただし、デフォルトの ACL を設定してすべてのユーザーに対してアクセスを拒否した場合、ほかの ACL 規則では「deny all」規則は必要ありません。
次の行では、すべてのユーザーに対してアクセスを拒否します。
deny (all) user = "anyone";
ACL には、リソースに応じて異なる階層があります。サーバーが特定のリソースに対する要求を受信した場合、そのリソースに適用する ACL のリストを構築します。サーバーはまず、check-acl 文の obj.conf ファイルにリスト表示する名前付き ACL を追加します。次に、一致するパス ACL とリソース ACL を追加します。このリストは同じ順序で処理されます。「無条件な」ACL 文がない場合は、すべての文が順序どおりに評価されます。「無条件に許可」の文または「無条件に拒否」の文が「true」かどうかを評価する場合、サーバーは処理を停止し、この結果の処理を受け取ります。
一致する ACL が複数ある場合、サーバーは一致する最後の文を使用します。ただし、無条件文を使用する場合は、ほかの一致する文の検索を停止し、無条件文のある ACL を使用します。同一のリソースに対する無条件文が 2 つある場合は、ファイル内の最初の文を使用し、一致するほかのリソースの検索を停止します。
version 3.0;acl "default";authenticate (user,group) { prompt="Sun Java System Web Proxy Server";}; allow (read,execute,list,info) user = "anyone"; allow (write,delete) user = "all";acl "http://*.*"; deny (all) user = "anyone";allow (all) user = "joe"; |
属性式は、ユーザー名、グループ名、ホスト名、または IP アドレスに基づいて、アクセスを許可、または拒否するユーザーを定義します。次の行は、複数のユーザーまたはコンピュータに対してアクセスを許可する方法の例を示しています。
user = "anyone"
user = "smith*"
group = "sales"
dns = "*.mycorp.com"
dns = "*.mycorp.com,*.company.com"
ip = "198.*"
ciphers = "rc4"
ssl = "on"
また、timeofday 属性を使用すると、サーバーのローカル時間を基準にした時刻で、サーバーへのアクセスを制御できます。たとえば、timeofday 属性を使用すると、特定のユーザーによる特定の時間のアクセスを制御することができます。
時間を指定するには、24 時間形式を使用します。たとえば、午前 4 時を指定するには 0400、午後 10 時 30 分を指定するには 2230 と指定します。次の例では、guests というユーザーのグループの午前 8 時から午後 4 時 59 分までの間のアクセスを制御します。
allow (read) (group="guests") and (timeofday<0800 or timeofday=1700);
また、曜日によってアクセスを制御することもできます。3 文字の省略形を使用して曜日を指定します。つまり、Sun、Mon、Tue、Wed、Thu、Fri、Sat です。
次の文で、premium グループのユーザーは、曜日や時間に関係なくアクセスが許可されます。discount グループのユーザーは、週末 (土曜日と日曜日) は時間に制限なく、平日 (月曜日から金曜日まで) は午前 8 時から午後 4 時 59 分までを除く任意の時間にアクセスできます。
allow (read) (group="discount" and dayofweek="Sat,Sun") or (group="discount" and (dayofweek="mon,tue,wed,thu,fri" and(timeofday<0800 or timeofday=1700)))or (group="premium");
属性式では、各種の演算子を使用できます。括弧で演算子の優先度を示します。user、group、 dns、および ip では、次の演算子を使用できます。
timeofday および dayofweek では、次の演算子を使用できます。
より大きい
< (より小さい)
= (以上)
<= (以下)
インストールのあと、サーバーは server_root/httpacl/generated.proxy- serverid.acl ファイルに含まれているデフォルト設定を使用できるようになります。ユーザーインタフェースで設定が作成されるまで、サーバーは作業ファイル genwork.proxy- serverid.acl を使用します。ACL ファイルを編集する場合、genwork ファイルに対して変更を行い、Proxy Server を使用して変更を保存し、適用します。
入力文字列には、次の文字を使用できます。
a 〜 z までの文字
0 〜 9 までの文字
ピリオド (.) と下線 (_)
その他の文字については、二重引用符で文字を囲む必要があります。
1 つの文は 1 行で表示し、末尾にセミコロンを付けます。複数の文は括弧で囲みます。項目のリストはコンマで区切り、二重引用符で囲む必要があります。