Sun ONE Web Server 6.1 管理者ガイド |
付録 C
ACL ファイルの構文この付録では、アクセス制御リスト (access-control list、ACL) ファイルとその構文について説明します。ACL ファイルはテキストファイルで、Web サーバー上に格納されるリソースにアクセス可能なユーザーを定義するリストが記述されています。デフォルトでは、Web サーバーはサーバーへのアクセスに関するすべてのリストを含む ACL ファイルを 1 つ使用します。ただし、複数の ACL ファイルを作成し、obj.conf ファイルでそれらの参照を指定することもできます。
アクセス制御 API を使用してアクセス制御をカスタマイズする場合、ACL ファイルの構文や関数を知っておく必要があります。たとえば、アクセス制御 API を使用して、Oracle や Informix などの別のデータベースと連動させることができます。API の詳細は、次に示す Sun ONE のドキュメントサイトを参照してください。
この付録は、次の節で構成されています。
ACL ファイルの構文すべての ACL ファイルは、特定の書式と構文に従って記述する必要があります。ACL ファイルは 1 つまたは複数の ACL を含むテキストファイルです。すべての ACL ファイルの先頭に、使用するバージョン番号を記述する必要があります。バージョン行は 1 つだけで、何行のコメント行の後にも指定できます。Sun ONE Web Server 6.1 はバージョン 3.0 を使用します。その例を次に示します。
ACL ファイルでは、行の先頭に # を付けてコメントを挿入することができます。
ファイル内の各 ACL は、タイプを定義する文で開始されます。ACL は、次の 3 つのうちのいずれかのタイプに従います。
- パス ACL は、影響を受けるリソースへの絶対パスを指定します。
- URI (Uniform Resource Indicator) ACL は、サーバーのドキュメントルートに対して相対的なディレクトリまたはファイルを指定します。
- 名前付き ACL は、obj.conf ファイル内のリソースで参照される名前を指定します。サーバーには、すべてのユーザーに読み取りアクセスを許可する、LDAP ディレクトリのユーザーに書き込みアクセスを許可する「default」という名前が付いたリソースが付属しています。Sun ONE Web Server のウィンドウから名前付き ACL を作成することはできますが、obj.conf ファイルで、リソースの名前付き ACL を手動で参照する必要があります。
パス ACL と URI ACL では、エントリの末尾にワイルドカードを付けることができます。たとえば、/a/b/* のように記述します。エントリの末尾以外の場所にワイルドカードを指定しても機能しません。
タイプの行は acl という文字で始まり、タイプ情報は二重引用符で囲まれ、次にセミコロン (;) が続きます。異なる ACL ファイルの間でも、すべての ACL の各タイプ情報に固有の名前を付ける必要があります。以下の行では、ACL の複数のタイプの例を示します。
ACL のタイプを定義したあと、ACL で使用されるメソッド (認証文) と、アクセスを許可、または拒否されるユーザーやコンピュータ (承認文) を定義する 1 つまたは複数の文を記述することができます。次の節では、このような文の構文について説明します。
この節では、次の内容について説明します。
認証メソッド
ACL では、必要に応じて、サーバーが ACL を処理するときに使用する必要のある認証メソッドを指定します。主に次の 3 つのメソッドがあります。
基本認証メソッドとダイジェスト認証メソッドでは、リソースにアクセスしようとしているユーザーに対してユーザー名とパスワードの入力を要求します。
SSL 認証メソッドでは、ユーザーに対してクライアント証明書を持っていることを要求します。Web サーバーで暗号化を有効にする必要があり、認証された信頼されている CA のリストにユーザーの証明書発行元が表示されている必要があります。
デフォルトでは、サーバーはメソッドを指定しない ACL に対して基本認証メソッドを使用します。サーバーの認証データベースでは、ユーザーから送信されたダイジェスト認証を処理する必要があります。
各認証行では、サーバーが認証を行う属性 (ユーザー、グループ、またはその両方) を指定する必要があります。次に示す ACL タイプ行の後に表示される認証文では、データベースまたはディレクトリ内の各ユーザーと一致するユーザーの基本認証を指定します。
次の例では、ユーザーとグループの認証メソッドとして SSL を使用します。
次の例では、ユーザー名が sales という文字で始まるユーザーを認証します。
最後の行が group = sales に変更された場合、グループの属性が認証されないため、ACL がエラーになります。
承認文
各 ACL エントリには、1 つまたは複数の承認文を指定できます。承認文では、サーバーリソースへのアクセスを許可、または拒否されるユーザーを指定します。承認文を作成する場合、次の構文を使用します。
各行の先頭を allow または deny にします。通常の場合、最初の規則ですべてのユーザーに対してアクセスを拒否し、2 番目以降の規則で個別のユーザー、グループ、またはコンピュータに対してアクセスを許可することをお勧めします。これは、規則の階層のためです。すなわち、すべてのユーザーに対して /my_stuff という名前のディレクトリへのアクセスを許可し、サブディレクトリ /my_stuff/personal へのアクセスを一部のユーザーだけに許可する場合、/my_stuff ディレクトリへのアクセスを許可されたユーザーは /my_stuff/personal ディレクトリへのアクセスも許可されるため、サブディレクトリに対するアクセス制御は動作しません。これを避けるには、すべてのユーザーのアクセスを拒否してからアクセスする必要のあるユーザーだけにアクセスを許可する規則をサブディレクトリに対して作成します。
ただし、デフォルトの ACL を設定してすべてのユーザーに対してアクセスを拒否する場合、ほかの ACL 規則では「deny all」規則が必要ありません。
次の行では、すべてのユーザーに対してアクセスを拒否します。
この節では、次の内容について説明します。
承認文の階層
ACL には、リソースに応じて異なる階層があります。たとえば、ドキュメント (URI) /my_stuff/web/presentation.html からの要求を受信する場合、サーバーはこの URI に適用する ACL のリストを構築します。サーバーはまず、obj.conf ファイルの「check-acl」の文にリスト表示される ACL を追加します。次に、一致する URI と PATH ACL を追加します。
サーバー上でも、同じ順序でこのリストを処理します。「無条件な」ACL 文がない場合は、すべての文が順序どおりに評価されます。「無条件に許可」の文または「無条件に拒否」の文が true かどうかを評価する場合、サーバーは処理を停止し、この結果の処理を受け入れます。
一致する ACL が複数ある場合は、一致する最後の文を使用します。ただし、無条件文を使用する場合は、ほかの一致する文の検索を停止し、無条件文のある ACL を使用します。同一のリソースに対する無条件文が 2 つある場合は、ファイル内の最初の文を使用し、一致するほかのリソースの検索を停止します。
属性式
属性式は、ユーザー名、グループ名、ホスト名、または IP アドレスに基づいて、アクセスを許可、または拒否するユーザーを定義します。次の行は、複数のユーザーまたはコンピュータに対してアクセスを許可する例です。
また、timeofday 属性を使用すると、サーバーのローカル時間を基準にした時刻で、サーバーへのアクセスを制御できます。たとえば、timeofday 属性を使用すると、特定のユーザーによる特定の時刻のアクセスを制御することができます。
次の例では、guests というユーザーのグループによる午前 8 時から午後 4 時 59 分までの間のアクセスを制御します。
また、曜日によってアクセスを制御することもできます。3 文字の省略形、Sun、Mon、Tue、Wed、Thu、Fri、Sat を使用して曜日を指定します。
次の文では、premium グループのユーザーは、曜日や時刻に制限なくアクセスを許可されます。discount グループのユーザーは、週末 (土曜日と日曜日) は時刻に制限なく、平日 (月曜日から金曜日まで) は午前 8 時から午後 4 時 59 分までを除く任意の時間にアクセスできます。
式の演算子
属性式では、各種の演算子を使用できます。括弧で演算子の優先度を示します。user、group、dns、ip では、次の演算子を使用できます。
timeofday と dayofweek では、次を使用できます。
デフォルト ACL ファイル
インストールのあと、server_root/httpacl/generated.https-serverid.acl ファイルに含まれているサーバーのデフォルト設定を使用できます。ユーザーインタフェースで設定が作成されるまで、サーバーは作業ファイル genwork.https-serverid.acl を使用します。ACL ファイルを編集する場合、genwork ファイルに対して変更を加えSun ONE Web Server を使用して変更を保存して適用します。
汎用構文の項目
入力文字列には、次の文字を使用できます。
ほかの文字を使用する場合は、文字を二重引用符で囲む必要があります。
1 つの文は 1 行で表示し、末尾にセミコロンを付けます。複数の文は括弧で囲みます。項目のリストはコンマで区切り、二重引用符で囲む必要があります。
obj.conf での ACL ファイルの参照名前付き ACL ファイルまたは個別の ACL ファイルがある場合、obj.conf ファイル内で ACL ファイルを参照することができます。このためには、PathCheck 指令で check-acl 関数を使用します。この行には、次の構文があります。
aclname は、ACL ファイルに表示される、ACL の固有の名前です。
たとえば、testacl という名前の付いた ACL を使用してディレクトリへのアクセスを制限する場合、obj.conf ファイルに次のような行を追加します。
上の例では、1 行目が、アクセスを制御するサーバーリソースを示すオブジェクトです。2 行目は PathCheck 指令で、check-acl 関数を使用して名前付き ACL (testacl) を、指令が表示されるオブジェクトにバインドします。testacl ACL は、magnus.conf で参照される ACL ファイルに表示できます。