Sun ONE ロゴ      前へ      目次      索引      次へ     

Sun ONE Web Server 6.1 管理者ガイド

第 9 章
サーバーへのアクセス制御

この章では、管理サーバーや、Web サイト上に配置されたファイルやディレクトリへのアクセスを制御するためのさまざまな方法について説明します。たとえば、管理サーバーについては、マシンにインストールされているすべてのサーバーを完全に制御できるユーザーや、1 台以上のサーバーを部分的に管理できるユーザーを指定できます。管理サーバーでアクセス制御を使用するには、分散管理を有効にして、LDAP データベースに管理グループを設定する必要があります。この章では、すでに分散管理を設定していて、LDAP データベースにユーザーとグループを定義していることを前提としています。

第 4 章「Web コンテナと Web アプリケーションの J2EE ベースのセキュリティ」および第 6 章「証明書と鍵の使用」で説明されている Web サーバーのセキュリティについても、確認する必要があります。

この章では、次の項目について説明します。


アクセス制御とは

アクセス制御を使用すると、次の内容を指定できます。

サーバー全体やサーバーの一部、または Web サイトのファイルやディレクトリへのアクセスを制御できます。アクセス制御エントリ (ACE) と呼ばれる規則の階層を作成します。これによって、アクセスを許可したり拒否したりすることができるようになります。各 ACE は、サーバーが階層内の次の ACE を確認する必要があるかどうかを指定します。作成する ACE の集合は、アクセス制御リスト (ACL) と呼ばれます。

デフォルトでは、サーバーには、複数の ACL が含まれる 1 つの ACL ファイルがあります。Sun ONE Web Server は、受信する要求に使用する仮想サーバーを指定したあと、その仮想サーバーに対して ACL が設定されているかどうかを確認します。現在の要求に適用される ACL が見つかった場合、Sun ONE Web Server は ACL に含まれる ACE を評価し、アクセスを許可するか拒否するかを決定します。

次の内容を基準にして、アクセスを許可または拒否します。

ユーザー - グループのアクセス制御の設定

特定のユーザーまたはグループに対して、Web サーバーへのアクセスを制限することができます。ユーザー - グループのアクセス制御を設定すると、ユーザーはユーザー名とパスワードを入力しないと、サーバーへのアクセス権を取得できなくなります。サーバーは、クライアント証明書の情報またはクライアント証明書自体を、ディレクトリサーバーのエントリと比較します。

管理サーバーでは、基本認証だけを使用します。管理サーバーでクライアント認証を要求する場合、obj.conf の ACL ファイルを手動で編集し、認証メソッドを SSL に変更する必要があります。

なお、( ) 内は画面上の表示を示しています。

これらすべてのメソッドで、ディレクトリサーバーが必要です。

ユーザー - グループ認証の場合、ユーザーは自分自身の認証を行わないと、管理サーバー、および Web サイト上のファイルやディレクトリにアクセスできません。クライアント証明書、またはダイジェスト認証プラグインを使用して認証を行う場合、ユーザーはユーザー名とパスワードを入力することによって識別情報を証明します。クライアント証明書を使用する場合は、暗号化が必要です。暗号化とクライアント証明書については、第 4 章「Web コンテナと Web アプリケーションの J2EE ベースのセキュリティ」を参照してください。

デフォルト認証 (Default)

デフォルト認証は、優先されるメソッドです。デフォルト設定では、obj.conf ファイルで指定したデフォルトメソッドを使用します。obj.conf でメソッドが設定されていない場合は、「基本」メソッドを使用します。「Default」チェックボックスにチェックマークを付けた場合、ACL 規則によって ACL ファイル内のメソッドが指定されることはありません。「Default」を選択すると、obj.conf ファイル内の 1 行を編集することによって、すべての ACL のメソッドを簡単に変更できます。

基本認証 (Basic)

基本認証では、Web サーバーまたは Web サイトにアクセスするユーザーに対して、ユーザー名とパスワードを要求します。これがデフォルトの設定です。Sun ONE Directory Server などの LDAP データベースにユーザーとグループのリストを作成して格納する必要があります。ここでは Web サーバーではなく、別のサーバールートにインストールされているディレクトリサーバー、またはリモートマシンにインストールされているディレクトリサーバーを使用する必要があります。

管理サーバー内、または Web サイト上のユーザー - グループ認証が設定されているリソースにユーザーがアクセスした場合、Web ブラウザにユーザー名とパスワードの入力を求めるダイアログボックスが表示されます。サーバーに対する暗号化が設定されているかどうかに応じて、サーバーはこの情報を暗号化された状態、または暗号化されていない状態で受信します。


SSL 暗号化なしで基本認証を使用する場合、暗号化されていないユーザー名とパスワードがネットワークを経由して送信されます。ネットワークパケットは不正に読み取られる可能性があり、ユーザー名とパスワードが不正に知られてしまう可能性があります。基本認証は、SSL 暗号化とホスト - IP 認証のどちらかまたはその両方と組み合わせた場合にもっとも効果的です。ダイジェスト認証を使用しても、この問題を回避できます。


ユーザーがサーバーに対して自分自身の認証を行う場合、次のダイアログが表示されます。

「OK」をクリックすると、次の内容が表示されます。

認証を受けていないユーザーが「Access Denied Response」ページで受信するアクセス拒否メッセージは、カスタマイズすることができます。

SSL 認証 (SSL)

サーバーは、次の 2 つの方法で、セキュリティ証明書付きのユーザーの識別情報を確認できます。

クライアントの認証で証明書の情報を使用するようにサーバーを設定した場合、サーバーは次の処理を実行します。

特定のリソースへのアクセスを制御するためにクライアント認証を要求することは、サーバーへの接続のすべてに対してクライアント認証を要求することとは異なります。すべての接続に対してクライアント認証を要求するようにサーバーを設定した場合、クライアントは信頼できる CA によって発行された有効な証明書を提示するだけで済みます。ユーザーとグループの認証に SSL メソッドを使用するようにサーバーのアクセス制御を設定した場合、クライアントでは次の内容をすべて満たすことが必要です。

アクセス制御を使ってクライアント認証を要求する場合、Web サーバーでは SSL 暗号化方式を有効にする必要があります。SSL を有効にする方法については、第 6 章「証明書と鍵の使用」を参照してください。

SSL で認証されるリソースにアクセスするには、Web サーバーで信頼されている CA から、クライアント証明書が発行されている必要があります。ブラウザのクライアント証明書とディレクトリサーバーのクライアント証明書を比較するように Web サーバーの certmap.conf ファイルが設定されている場合、クライアント証明書はディレクトリサーバー内で発行されている必要があります。ただし、証明書から選択した情報とディレクトリサーバーのエントリだけを比較するように、certmap.conf ファイルを設定することもできます。たとえば、ブラウザ証明書のユーザー ID および電子メールアドレスとディレクトリサーバーのエントリだけを比較するように、 certmap.conf ファイルを設定することができます。certmap.conf と証明書のマッピングの詳細は、第 6 章「証明書と鍵の使用」を参照してください。


LDAP ディレクトリに対する証明書が確認されるため、SSL 認証メソッドだけは certmap.conf ファイルの修正を必要とします。サーバーへの接続のすべてに対してクライアント認証を要求するメソッドでは、この必要はありません。使用するクライアント証明書を選択する場合は、magnus.confAcceptTimeout 指令の値を大きくする必要があります。


ダイジェスト認証 (Digest)

ダイジェスト認証では、ユーザーがユーザー名とパスワードをプレーンテキスト形式 (暗号化されていない形式) で送信することなく、ユーザー名とパスワードに基づいた認証を行うことができます。ブラウザは、ユーザーのパスワードと Web サーバーによって提供される情報の一部を使用し、MD5 アルゴリズムによりダイジェスト値を作成します。このダイジェスト値は、サーバー側でもダイジェスト認証プラグインを使用して計算し、クライアントによって提示されたダイジェスト値と比較します。ダイジェスト値が一致する場合、ユーザーは認証を受けたものと見なします。

これが機能するには、ディレクトリサーバーがプレーンテキスト形式のユーザーのパスワードにアクセスできる必要があります。Sun ONE Directory Server にはリバーシブルパスワードプラグインが用意されています。このプラグインは、対称暗号化アルゴリズムを使用して格納時にデータを暗号化し、後にそれを元の形式に復号化することができます。データへの鍵を持っているのは Directory Server だけです。

ダイジェスト認証の場合は、リバーシブルパスワードプラグインと、Sun ONE Web Server 6.1 に組み込まれているダイジェスト認証に固有のプラグインを有効にする必要があります。ダイジェスト認証を処理するように Web サーバーを設定するには、dbswitch.conf でデータベース定義の digestauth プロパティを設定します。

サーバーは、指定されている ACL メソッドに基づいて、LDAP データベースに対して認証を試みます。表 9-1 を参照してください。ACL メソッドを指定しない場合、認証が必要であればダイジェスト認証または基本認証が使用され、認証が必要ない場合は基本認証が使用されます。基本認証が使用されるのは、これが優先されるメソッドのためです。

表 9-1 ダイジェスト認証要求の生成

ACL メソッド

認証データベースによってサポートされるダイジェスト認証

認証データベースによってサポートされないダイジェスト認証

デフォルト

指定なし

ダイジェストと基本

基本

基本

基本

基本

ダイジェスト

ダイジェスト

エラー

method = digest を指定して ACL を処理する場合、サーバーは次の内容を実行して認証を試みます。

UNIX でのダイジェスト認証プラグインのインストール

ダイジェスト認証プラグインは、次の両方に存在する共用ライブラリで構成されています。

UNIX でダイジェスト認証プラグインをインストールするには、次の手順を実行します。

  1. この共用ライブラリが、Sun ONE Web Server がインストールされているのと同じサーバーマシンにあることを確認します。
  2. Directory Manager のパスワードを確認します。
  3. /path/to へのすべての参照を、ダイジェストプラグインの共用ライブラリのインストール先に参照先が変更されるように、libdigest-plugin.ldif ファイルを修正します。
  4. プラグインをインストールするには、次のコマンドを入力します。
  5. % ldapmodify -D "cn=Directory Manager" -w password -a < libdigest-plugin.ldif

Windows でのダイジェスト認証プラグインのインストール

ダイジェストプラグインとともに Sun ONE Directory Server を正常に起動できるようにするには、Sun ONE Web Server がインストールされている場所にある .dll ファイルを Sun ONE Directory Server のサーバーマシンにいくつかコピーする必要があります。

Windows でダイジェスト認証プラグインをインストールするには、次の手順を実行します。

  1. 次の場所にインストールされている Sun ONE Web Server の共用ライブラリにアクセスします。
  2. [server_root]¥bin¥https¥bin

  3. 次のファイルをコピーします。
    • nsldap32v50.dll
    • libspnr4.dll
    • libplds4.dll
  4. これらのファイルを次の両方の場所にペーストします。
    • ¥Winnt¥system32
    • Sun ONE Directory Server のインストールディレクトリ [server_root]¥bin¥sldap¥server
DES アルゴリズムを使用するための Sun ONE Directory Server の設定

DES アルゴリズムは、ダイジェストパスワードが格納されている属性を暗号化するために必要です。

DES アルゴリズムを使用するように Sun ONE Directory Server を設定するには、次の手順を実行します。

  1. Sun ONE Directory サーバーコンソールを起動します。
  2. iDS 5.0 のインスタンスを開きます。
  3. 「Configuration」タブを選択します。
  4. プラグインの隣にある + 記号をクリックします。
  5. DES プラグインを選択します。
  6. 「Add」を選択して新しい属性を追加します。
  7. iplanetReversiblePassword」と入力します。
  8. 「Save」をクリックします。
  9. Sun ONE Directory Server のインスタンスを再起動します。

    iplanetReversiblePassword 属性でユーザーのダイジェスト認証のパスワードを設定するには、エントリに iplanetReversiblePasswordobject オブジェクトが含まれている必要があります。


その他の認証 (Other)

アクセス制御 API を使用すると、カスタム認証メソッドを作成できます。

ホスト - IP のアクセス制御の設定

管理サーバー、または Web サイトのファイルやディレクトリに対して、特定のコンピュータで動作しているクライアントだけが利用できるように、アクセスを制限できます。そのためには、アクセスの許可または拒否を行うコンピュータをホスト名または IP アドレスで指定します。ワイルドカードパターンを使用して、複数のコンピュータまたはネットワーク全体を指定することができます。ホスト - IP 認証を使用したファイルまたはディレクトリへのアクセスは、ユーザーが意識することなく行われます。このため、各ユーザーは、ユーザー名やパスワードを入力することなく、すぐにファイルやディレクトリにアクセスできます。

特定のコンピュータであっても複数のユーザーが使用しているため、ホスト - IP 認証は、ユーザー - グループ認証と組み合わせるとより効果的です。両方の認証メソッドが使用される場合は、アクセスするときにユーザー名とパスワードが要求されます。

ホスト - IP 認証では、サーバーが動作しているマシンで DNS を設定する必要はありません。ただし、ホスト - IP 認証を使用する場合は、ネットワーク上で DNS が稼働していて、この認証方式を使用するようにサーバーが設定されている必要があります。サーバーに対して DNS を有効にするには、サーバーマネージャの「Preferences」タブにある「Performance Tuning」ページを使用します。

DNS を有効にすると、サーバーで DNS ルックアップを実行する必要があるため、Sun ONE Web Server のパフォーマンスが低下します。サーバーパフォーマンスに対する DNS ルックアップの影響を小さくするには、すべての要求に対して IP アドレスを解決する代わりに、アクセス制御と CGI に対してだけ IP アドレスを解決します。このためには、obj.conf ファイルの AddLog fn="flex-log" name="access"iponly=1 にします。

アクセス制御ファイルの使用

管理サーバーまたは Web サイト上のファイルやディレクトリに対してアクセス制御を使用する場合、拡張子が .acl のファイルに設定が格納されます。アクセス制御ファイルは install_dir/httpacl ディレクトリに格納されます。install_dir はサーバーがインストールされている場所です。たとえば、/usr/Sun/Servers にサーバーをインストールした場合、管理サーバーとサーバーに設定されている各サーバーインスタンスの両方の ACL ファイルが、/usr/Sun/Servers/httpacl/ に格納されます。

主要な ACL ファイルの名前は generated-https-server-id.acl で、一時的な作業ファイルは genwork-https-server-id.acl という名前です。Sun ONE 管理サーバーを使用してアクセスを設定する場合は、これらの 2 つのファイルが作成されます。ただし、複雑な制約が必要な場合は、複数のファイルを作成し、server.xml ファイルから参照することができます。また、時刻や曜日を基準にしたサーバーへのアクセス制限など、ファイルを編集することによって利用可能になる機能もいくつかあります。

また、.acl ファイルを手動で作成して編集し、API を使用してアクセス制御をカスタマイズすることもできます。アクセス制御 API の使用の詳細は、『Programmer's Guide』を参照してください。

アクセス制御ファイルとその構文については、付録 C 「ACL ファイルの構文」を参照してください。

ACL ユーザーキャッシュの設定

デフォルトでは、Sun ONE Web Server によるユーザーとグループの認証の結果が、ACL ユーザーキャッシュに保存されます。magnus.conf ファイルの ACLCacheLifetime 指令を使用して、ACL ユーザーキャッシュを有効にする期間を制御することができます。キャッシュのエントリが参照されるたびにその経過時間が計算され、ACLCacheLifetime と照合されます。経過時間が ACLCacheLifetime と同じか、それよりも長い場合、このエントリは使用されません。デフォルト値は 120 秒です。値を 0 (ゼロ) に設定すると、キャッシュが無効になります。この値に大きな値を使用する場合は、LDAP エントリを変更するたびに Sun ONE Web Server の起動が必要となる可能性があります。たとえば、この値を 120 秒に設定した場合は、Sun ONE Web Server と LDAP の同期が 2 分間に渡ってとられない可能性があります。LDAP ディレクトリが頻繁に変更される可能性が低い場合にだけ、大きな値を設定します。

magnus.confACLUserCacheSize パラメータを使用すると、キャッシュ内に保存できるエントリの最大数を設定できます。このパラメータのデフォルト値は 200 です。新しいエントリがリストの先頭に追加され、キャッシュが最大サイズに達すると、新しいエントリを作成するために、このリストの最後のエントリが再利用されます。

また、magnus.conf に含まれるパラメータである ACLGroupCacheSize を使用して、ユーザーエントリごとにキャッシュできるグループメンバーの最大数を設定することができます。このパラメータのデフォルト値は 4 です。ただし、グループのメンバーではないユーザーはキャッシュされず、要求ごとに何回か LDAP ディレクトリにアクセスすることになります。

ACL ファイルの指令の詳細は、『NSAPI Programmer's Guide』を参照してください。


アクセス制御のしくみ

サーバーはページへの要求を受け取ると、ACL ファイルの規則を使用して、アクセスを許可するか拒否するか判断します。規則は、要求を送信しているコンピュータのホスト名や IP アドレスを参照できます。また、規則が LDAP ディレクトリに格納されているユーザーやグループを参照するように設定することもできます。

たとえば、次の ACL ファイルには、管理サーバー (admin-serv) に対する 2 つのデフォルトエントリと、「admin-reduced」グループ内のユーザーが管理サーバーの「Preferences」タブにアクセスできるようにするための追加エントリがあります。

version 3.0;

# The following "es-internal" rules protect files such

# as icons and images related to Sun ONE Web Server.

# These "es-internal" rules should not be modified.

  acl "es-internal";

  allow (read, list, execute,info) user = "anyone";

  deny (write, delete) user = "anyone";

# The following "default" rules apply to the entire document

# directory of Sun ONE Web Server. In this example, the rules

# are set up so that "all" users in the directory server are

# allowed to read, execute, list, and get information.

# The "all" users are not allowed to write to or delete any files.

# All clients that accesses the document directory of the web

# server will be required to submit a username and password

# since this example is using the "basic" method of

# authentication. A client must be in the directory server

# to gain access to this default directory since "anyone"

# not in the directory server is denied, and "all" in the

# directory server are allowed.

  acl "default";

  authenticate (user,group) {

     database = "default";

     method = "basic";

  };

  deny (all)

  (user = "anyone");

  allow (read,execute,list,info)

  (user = "all");

# The following rules deny access to the directory "web"

# to everyone not in the directory server and deny everyone

# in the directory server who is not in GroupB.

# Only the users in GroupB are allowed read, execute, list,

# and info permissions. GroupA can not gain access to the

# directory "web" even though (in the ACL rule below) they

# can access the directory "my_stuff". Furthermore, members

# of GroupB can not write or delete files.

  acl "path=/export/user/990628.1/docs/my_stuff/web/";

  authenticate (user,group) {

     database = "default";

     method = "basic";

  };

  deny (all)

  (user = "anyone");

  allow (read,execute,list,info)

  (group = "GroupB");

# The following rule denies everyone not in the directory

# server and denies everyone in the directory server except

# user with the ID of "SpecificMemberOfGroupB". The ACL rule

# in this setting also has a requirement that the user

# connect from a specific IP address. The IP address setting

# in the rule is optional; it has been added to for extra

# security. Also, this ACl rule has a Customized prompt

# of "Presentation Owner". This Customized prompt appears

# in the username and password dialog box in the client's

# browser.

  acl "path=/export/user/990628.1/docs/my_stuff/web/presentation.html" ;

  authenticate (user,group) {

     database = "default";

     method = "basic";

     prompt = "Presentation Owner";

  };

  deny (all)

  (user = "anyone" or group = "my_group");

  allow (all)

  (user = "SpecificMemberOfGroupB") and

  (ip = "208.12.54.76");

# The following ACL rule denies everyone not in the directory

# server and everyone in the directory server except for

# GroupA and GroupB access to the directory "my_stuff"

  acl "path=/export/user/990628.1/docs/my_stuff/";

  authenticate (user,group) {

     database = "default";

     method = "basic";

  };

  deny (all)

  (user = "anyone");

  allow (read,execute,list,info)

  (group = "GroupA,GroupB");

たとえば、ユーザーが http://server_name/my_stuff/web/presentation.html という URL を要求したと仮定します。

Sun ONE Web Server はまず、サーバー全体へのアクセス制御を確認します。サーバー全体への ACL が認証の処理を続行するように設定される場合、サーバーは my_stuff ディレクトリへの ACL を確認します。ACL が存在する場合、サーバーは ACL 内の ACE を確認し、次のディレクトリに移動します。このプロセスは、アクセスを拒否する ACL が見つかるまで、または要求された URL の最後の ACL (この場合は、ファイル presentation.html) に達するまで続行します。

サーバーマネージャを使用してこの例のアクセス制御を設定するには、このファイルだけを対象とした ACL の作成のほか、ファイルへ誘導する各リソースの ACL を作成することができます。つまり、1 つはサーバー全体用、1 つは my_stuff ディレクトリ用、1 つは my_stuff/web ディレクトリ用、1 つはファイル用です。


一致する ACL が複数ある場合は、一致する最後の ACL 文を使用します。一致する最後の ACL 文は uri なので、default ACL はバイパスされます。



アクセス制御の設定

この節では、Web サイト上のファイルまたはディレクトリに対して、アクセスを制限するための手順を説明しています。すべてのサーバーに対してグローバルアクセス制御規則を設定することも、特定のサーバーに対して個別に設定することもできます。たとえば、人材管理部門を対象に、認証を受けているすべてのユーザーに各自の給与計算データを参照することは許可して、データを更新できるのは人材管理部門の給与計算担当者だけに制限する ACL を作成することができます。

管理サーバーによって、すべてのサーバーに対してグローバルにアクセス制御を設定することができます。次の節「アクセス制御オプションの選択」では、各オプションについて詳しく説明します。


グローバルアクセス制御を作成するには、分散管理を設定して有効にしておく必要があります。


グローバルなアクセス制御の設定

すべてのサーバーに対してグローバルにアクセス制御を作成したり編集したりするには、次の手順を実行します。

  1. 管理サーバーにアクセスして、「Global Settings」タブをクリックします。
  2. 「Restrict Access」リンクをクリックします。
  3. ドロップダウンリストから管理サーバー (https-admserv) を選択します。
  4. 「Create ACL」ボタン、および「Go」ボタンをクリックします。
  5. 「Access Control Rules for uri=/https-admserv/」ページが表示されます。

    「Access Control Rules」ページ

    管理サーバーには、編集できないデフォルトアクセス制御規則が 2 行あります。

  6. チェックマークが付いていない場合は、「Access control is on」チェックボックスにチェックマークを付けます。
  7. テーブルの最下行にデフォルトの ACL 規則を追加するには、「New Line」ボタンをクリックします。
  8. アクセス制御制限を、その前のアクセス制御制限と置き換えるときは、上向き矢印をクリックします。

    アクセス制御制限を、その後のアクセス制御制限と置き換えるときは、下向き矢印をクリックします。

  9. 「Users/Groups」列の「anyone」をクリックします。
  10. 下のフレームに「User/Group」ページが表示されます。

    「User/Group」ページ
    「User/Group」ページを示す図

  11. アクセスを許可するユーザーやグループを選択し、「Update」をクリックします。
  12. 「Group」と「User」の「List」をクリックすると、選択肢のリストが表示されます。

  13. 「From Host」列の「anyplace」をクリックします。
  14. アクセスを許可するホスト名と IP アドレスを入力し、「Update」をクリックします。
  15. 「Programs」列で「All Programs」をクリックします。
  16. 「Programs」
    「Programs」ページを示す図

  17. 「Program Groups」を選択するか、または「Program Items」フィールドにアクセスを許可する特定のファイル名を入力し、「Update」をクリックします。
  18. (省略可能) 「Extra」列の「x」をクリックして、カスタマイズした ACL 式を追加します。
  19. デフォルトとして選択されていない場合は、「Continue」列にチェックマークを付けます。
  20. サーバーは次の行を評価してから、ユーザーがアクセスを許可されているかどうかを判断します。複数の行を作成する場合は、より一般的な制限からより特殊な制限へと処理を行います。

  21. (省略可能) 別の URL または URI の内容をユーザーに対して表示することを拒否する場合、「Response」をクリックします。
  22. 絶対 URL または相対 URI へのパスを入力し、「update」をクリックします。
  23. 「Submit」をクリックして、新しいアクセス制御規則を ACL ファイルに保存します。

    「Revert」をクリックすると、作成したすべての設定が画面を表示した時点の内容に戻ります。


サーバーインスタンスに対するアクセス制御の設定

サーバーマネージャを使用すると、特定のサーバーインスタンスに対するアクセス制御の作成、編集、または削除を実行できます。


削除する場合、ACL ファイルからすべての ACL 規則を削除しないでください。サーバーを起動するには、最小限の ACL 規則が含まれる ACL ファイルが少なくとも 1 つ必要です。すべての ACL 規則を削除してサーバーを再起動すると、構文エラーが発生します。


サーバーインスタンスに対してアクセス制御を作成するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、ACL を作成または編集するサーバーインスタンスを選択します。
  2. サーバーマネージャの「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Option」列で、次のいずれかを選択します。
    • 「Add」を選択して、ACL ファイルの場所を入力します。
    • 「Edit」を選択し、ドロップダウンメニューから ACL ファイルを選択します。
    • ドロップダウンメニューから「Delete」を選択し、ACL ファイルを選択します。
    • 「Access Control List Management」ページに、次の 3 つのオプションが表示されます。

      「Access Control List Management」ページ
      「Access Control List Management」ページウィンドウを示す図

  5. 次のいずれかを選択します。
    • リソースを選択し、ファイルまたはディレクトリのワイルドカードパターン (*.html など) を指定し、制限するディレクトリまたはファイル名を選択するか、またはファイルやディレクトリを参照します。
    • 有効にしたすべての ACL のリストから選択する既存の ACL を選びます。有効にしていない既存の ACL は、このリストに表示されません。
    • ACL 名を入力すると、名前付きの ACL を作成できます。このオプションは、ACL ファイルについての知識が豊富な場合にだけ使用します。名前付きの ACL をリソースに適用する場合、手動で obj.conf を編集する必要があります。
    • 表 9-2 は、使用できるリソースワイルドカードと、その説明を示しています。

      表 9-2 サーバーリソースのワイルドカード

      リソースのワイルドカード

      意味

      デフォルト

      インストール時に作成される名前付き ACL。LDAP ディレクトリ内のユーザーだけがドキュメントを発行できるように、書き込みアクセスを制限する

      サーバー全体

      1 組の規則によって、稼動中の仮想サーバーを含めた Web サイト全体へのアクセスが定義される。仮想サーバーへのアクセスを制限するには、そのドキュメントルートのパスを指定すること

      /usr/sun/server4/docs/cgi-bin/*

      cgi-bin ディレクトリ内のすべてのファイルとディレクトリへのアクセスを制御する。絶対パスを指定する必要がある。Windows では、パスにドライブ文字を含める必要がある

      uri="/sales"

      ドキュメントルートの sales ディレクトリへのアクセスを制御する。URI を指定するには、名前付き ACL を作成すること

  6. 「Edit Access Control」をクリックします。
  7. 「Access Control Rules for: (サーバーインスタンス)」が表示されます。

    「Access Control Rules」ページ
    「Access Control Rules」ページの図

  8. チェックマークが付いていない場合は、「Access control is on」チェックボックスにチェックマークを付けます。
  9. このサーバーインスタンス用の ACL を作成したり編集したりするには、「Action」列で「Deny」をクリックします。
  10. 下のフレームに「Allow/Deny」ページが表示されます。

    「Allow/Deny」ページ
    「Allow/Deny」ページを示す図

  11. デフォルトで選択されていない場合は「Allow」を選択し、「Update」をクリックします。
  12. 「Users/Groups」列の「anyone」をクリックします。
  13. 下のフレームに「User/Group」ページが表示されます。

    「User/Group」ページ
    「User/Group」ページを示す図

  14. アクセスを許可するユーザーやグループを選択し、「Update」をクリックします。
  15. 「Group」と「User」の「List」をクリックすると、選択肢のリストが表示されます。

  16. 「From Host」列の「anyplace」をクリックします。
  17. アクセスを許可するホスト名と IP アドレスを入力し、「Update」をクリックします。
  18. 「Rights」列で「all」をクリックします。
  19. 「Access Rights」ページ
    「Access Rights」ページを示す図

  20. 次のどちらかを選択し、「Update」をクリックします。
    • All Access Rights (すべてのアクセス権)
    • 「Only the following rights」をクリックし、このユーザーに適したすべての権利にチェックマークを付けます。
  21. (省略可能) 「Extra」列の「x」をクリックして、カスタマイズした ACL 式を追加します。
  22. デフォルトとして選択されていない場合は、「Continue」列にチェックマークを付けます。
  23. サーバーは次の行を評価してから、ユーザーがアクセスを許可されているかどうかを判断します。複数の行を作成する場合は、より一般的な制限からより特殊な制限へと処理を行います。

  24. (省略可能) 別の URL または URI の内容をユーザーに対して表示することを拒否する場合、「Response」をクリックします。
  25. 絶対 URL または相対 URI へのパスを入力し、「Update」をクリックします。
  26. 「Submit」をクリックして、新しいアクセス制御規則を ACL ファイルに保存します。

  27. 「Revert」をクリックすると、作成したすべての設定が画面を表示した時点の内容に戻ります。


  28. 目的の各サーバーインスタンスに対して上記のすべての手順を繰り返し、アクセス制御を確立します。
  29. 完了したら、「Apply」をクリックします。
  30. 「hard start /restart」または「dynamically apply」を選択します。

また、仮想サーバーごとに ACL 設定を有効にすることもできます。この実行方法については、「仮想サーバーのアクセス制御リストの編集」を参照してください。


アクセス制御オプションの選択

次の節では、アクセス制御を設定するときに選択できる個々のオプションについて説明します。管理サーバーの場合は、最初の 2 行はデフォルトとして設定されていて、編集できません。

アクションの設定

要求がアクション制御規則と一致する場合にサーバーが実行するアクションを指定できます。

サーバーはアクセス制御式 (access control expressions、ACE) のリストを参照して、アクセス権を指定します。たとえば、最初の ACE は通常、すべてのユーザーを拒否します。最初の ACE に「continue」が設定されている場合、サーバーはリストの 2 番めの ACE を確認し、一致している場合は、次の ACE を確認します。「continue」チェックボックスにチェックマークが付いていない場合は、すべてのユーザーがリソースへのアクセスを拒否されます。サーバーは、一致しない ACE か、一致していても「continue」チェックボックスにチェックマークが付いていない ACE のどちらかに達するまでリストを参照します。一致する最後の ACE によって、アクセスが許可されるか拒否されるかが決まります。

ユーザーとグループの指定

ユーザーとグループの認証が行われる場合、ユーザーがアクセス制御規則で指定されているリソースにアクセスするには、ユーザー名とパスワードを入力する必要があります。

Sun ONE Web Server は、Sun ONE Directory Server などの LDAP サーバーに格納されているユーザーとグループのリストを確認します。

データベース内のすべてのユーザーに対してアクセスを許可または拒否することも、ワイルドカードパターンを使用して特定のユーザーに対してアクセスを許可または拒否することも、アクセスを許可または拒否する対象をユーザーとグループのリストから選択することもできます。

From Host の指定

どのコンピュータから要求されたかに基づいて、管理サーバーや Web サイトへのアクセスを制限できます。

「Only from」オプションを選択する場合は、「Host Names」フィールドまたは「IP アドレス」フィールドに、ワイルドカードパターンまたはコンマで区切ったリストを入力します。ホスト名に基づく制限は、IP アドレスに基づく制限よりも柔軟性があります。ユーザーの IP アドレスが変更された場合でも、このリストを更新する必要はありません。ただし、IP アドレスによる制限には、より高い信頼性があります。これは、接続されているクライアントを対象とした DNS 検索に失敗した場合、ホスト名によるアクセス制限が機能しなくなるためです。

コンピュータのホスト名または IP アドレスと一致するワイルドカードパターンとして使用できるのは、* というワイルドカード表記だけです。たとえば、指定ドメインのすべてのコンピュータに対してアクセスを許可するか、または拒否する場合、*.sun.com のように特定ドメイン内のすべてのホストと一致するワイルドカードパターンを指定します。管理サーバーにアクセスしているスーパーユーザーに対しては、その他のユーザーとは異なるホスト名と IP アドレスを設定することもできます。

ホスト名については、* が名前のコンポーネント全体を表現していなくてはなりません。つまり、*.sun.com は許容されますが、*users.sun.com は許容されません。また、ホスト名で * を使用する場合、この記号を文字列の一番左に使用する必要があります。たとえば、*.sun.com は許容されますが、users.*.com は許容されません。

IP アドレスについては、* がアドレスのバイト全体を表現していなくてはなりません。たとえば、198.95.251.* は許容されますが、198.95.251.3* は許容されません。IP アドレスで * を使用する場合、この記号を文字列の一番右に使用する必要があります。たとえば、198.* は許容されますが、198.*.251.30 は許容されません。

プログラムへのアクセス制限

プログラムへのアクセスを制限できるのは、管理サーバーだけです。プログラムへのアクセス制限を適用すると、特定のユーザーだけがサーバーマネージャのページを参照し、そのサーバーを設定できるように制限できます。たとえば、一部の管理者に対して管理サーバーの「Users & Groups」セクションを設定することを許可するものの、「Global Settings」へのアクセスは拒否するように制限することができます。

異なるユーザーが異なる機能ドメインにアクセスするように設定することもできます。選択したいくつかの機能ドメインへのアクセス権をユーザーに設定すると、そのユーザーのログイン後、そのユーザーにアクセスを許可した機能ドメインだけから管理サーバーページを表示できます。

アクセス権の設定

サーバーインスタンスに対するアクセス権を設定できるのは、サーバーマネージャを使用した場合だけです。アクセス権は、Web サイトのファイルやディレクトリへのアクセスを制限します。すべてのアクセス権の許可または拒否に加えて、一部のアクセス権の許可または拒否を行うための規則を指定することもできます。たとえば、ユーザーに対してファイルへの読み取り専用アクセスを許可することができます。この設定では、ユーザーは情報を参照することはできますが、ファイルを変更することはできません。

カスタマイズされた式の作成

ACL には、カスタマイズした式を入力できます。このオプションは、ACL ファイルの構文や構造をよく理解している場合にだけ選択してください。ACL ファイルを編集するか、カスタマイズした式を作成する場合にだけ使用できる機能がいくつかあります。たとえば、時刻、曜日、またはその両方を基準として、サーバーへのアクセスを制限することができます。

次のカスタマイズされた式で、時刻や曜日によってアクセスを制限する方法を示します。この例では、LDAP ディレクトリに 2 つのグループがあることを前提としています。「regular」グループは、月曜日から金曜日までの午前 8 時から午後 5 時までアクセスできます。「critical」グループは、いつでもアクセスできます。

allow (read)
{
    (group=regular and dayofweek="mon,tue,wed,thu,fri");
    (group=regular and (timeofday>=0800 and timeofday<=1700));
    (group=critical)
}

有効な構文と ACL ファイルについては、付録 C 「ACL ファイルの構文」および「obj.conf での ACL ファイルの参照」を参照してください。

アクセス制御の解除

「Access control is on」チェックボックスのチェックマークを外した場合、ACL 内のレコードを消去するかどうかを確認するプロンプトが表示されます。「OK」をクリックすると、サーバーは ACL ファイルから該当するリソースの ACL エントリを削除します。

ACL を無効にしたい場合、generated-https-server-id.acl ファイルの各行の先頭に # 記号を挿入することによって、ACL が記述された行をコメントにすることができます。

管理サーバーからアクセス制御を作成し、特定のサーバーインスタンスに対して有効に設定し、ほかのサーバーに対しては無効 (デフォルト) のままにしておくことができます。たとえば、管理サーバーからサーバーマネージャページへのアクセスをすべて拒否することができます。デフォルトでは、ほかのサーバーに対して、分散管理は有効に、アクセス制御は無効に設定されます。管理者は管理サーバーを設定することはできませんが、ほかのサーバーにアクセスして設定することはできます。


このアクセス制御は、管理者グループのユーザーに対して、分散管理のために設定されます。管理サーバーはまず、ユーザー (スーパーユーザーを除く) が管理者グループのメンバーであることを確認してから、アクセス制御規則を評価します。


アクセスが拒否された場合の応答

アクセスが拒否された場合、Sun ONE Web Server は「FORBIDDEN. Your client is not allowed access to the restricted object.」というデフォルトメッセージを出力します。別の応答メッセージを選択することもできます。また、アクセス制御オブジェクトごとに異なるメッセージを作成することもできます。

特定の ACL に送信されるメッセージを変更するには、次の手順を実行します。

  1. 「ACL」ページの「Response when denied」リンクをクリックします。
  2. 下のフレームの「Respond with the following」チェックボックスにチェックマークを付けます。
  3. 絶対 URL または相対 URI へのパスを入力し、「Update」をクリックします。
  4. ユーザーにリダイレクト先の URL または URI へのアクセス権があることを確認します。

  5. 「Update」をクリックします。
  6. 上部フレームの「Submit」をクリックし、アクセス制御規則を送信します。


サーバーの一部へのアクセス制御

この節では、Web サーバーとその内容に対して一般的に使用されているアクセス制限について説明します。各制限の手順では、実行する必要のある操作を詳細に説明しています。ただし、「サーバーインスタンスに対するアクセス制御の設定」で説明している手順も、すべて実行する必要があります。

この節で説明する制限を次に示します。

サーバー全体に対するアクセス制限

呼び出されたグループ内のユーザーに対して、サブドメイン内のコンピュータからサーバーへのアクセスを許可したい場合があります。たとえば、ある会社のある部署のサーバーで、ネットワークの特定のサブドメインにあるコンピュータからのアクセスだけをユーザーに対して許可したい場合です。

サーバーインスタンスに対するアクセス制御の設定の節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 編集する ACL ファイルを選択します。
  5. サーバーリソース全体を選択し、「Edit Access Control」をクリックします。
  6. すべてのアクセスを拒否する、新しい規則を追加します。
  7. 特定のグループへのアクセスを許可する、別の新しい規則を追加します。
  8. アクセスを許可するコンピュータのホスト名として、ワイルドカードパターンを入力します。
  9. たとえば、「*.employee.sun.com」と入力します。

  10. 「Continue」チェックボックスのチェックマークを外します。
  11. 変更を送信して、適用します。

ディレクトリ (パス) へのアクセス制限

グループの所有者によって制御されているディレクトリおよびサブディレクトリにある、ファイルやアプリケーションの読み取りまたは実行をグループ内のユーザーに許可することができます。たとえば、プロジェクトマネージャは、参照するプロジェクトチームのステータス情報を更新できます。

サーバーのディレクトリへのアクセスを制限するには、サーバーインスタンスに対するアクセス制御の設定に関する節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 編集する ACL ファイルを選択します。
  5. 「Pick a Resource」セクションを参照して、アクセスを制限するディレクトリを選択します。
  6. サーバーのドキュメントルート内のディレクトリが表示されます。選択すると、「Editing」ドロップダウンリストにディレクトリへの絶対パスが表示されます。


    サーバールート内のすべてのファイルが表示されるようにする場合は、「Options」をクリックし、ディレクトリと「List files」チェックボックスにチェックマークを付けます。


  7. 「Edit Access Control」をクリックします。
  8. 新しい規則を作成し、デフォルト設定をそのまま使用して、すべての場所からのすべてのアクセスを拒否します。
  9. 特定のグループのユーザーに対して、読み取り権と実行権だけを許可する別の新しい規則を作成します。
  10. 3 行目を作成し、特定のユーザーに対してすべてのアクセス権を許可します。
  11. 2 行目と 3 行目の「Continue」チェックボックスのチェックマークを外して、「Update」をクリックします。
  12. 変更を送信して、適用します。

ファイルまたはディレクトリへの絶対パスが docroot ディレクトリに作成されます。ACL ファイルのエントリは、次のようになります。
acl "path=d:¥sun¥suitespot¥docroot1¥sales/";

URI (パス) へのアクセス制限

URI を使用して、Web サーバー上のシングルユーザーのコンテンツへのアクセスを制御することができます。URI は、サーバーのドキュメントルートディレクトリを始点とした、相対的なパスとファイル名です。サーバーのコンテンツのすべて、または一部 の名前 (たとえば、ディスクのボリューム名) を頻繁に変更したり削除したりする場合、URI を使用すると簡単です。また、ほかにドキュメントルートがある場合にも、URI を使用するとアクセス制御を簡単に行えます。

URI へのアクセスを制限するには、サーバーインスタンスに対するアクセス制御の設定に関する節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「ACL name」セクションの「Type」に、アクセスを制限する URI を入力します。
  5. 例 : uri=/my_directory

  6. 「Edit Access Control」をクリックします。
  7. すべてのユーザーに対して読み取りアクセスを許可する、新しい規則を作成します。
  8. ディレクトリの所有者に対してアクセスを許可する、別の規則を作成します。
  9. 1 番目の規則と 2 番目の規則の両方の「Continue」チェックボックスのチェックマークを外します。
  10. 「Submit and Apply your changes」をクリックします。

ドキュメントルートに対して相対的な URI へのパスが作成されます。ACL ファイルのエントリは、次のようになります。

acl "uri=/my_directory";

ファイルタイプに対するアクセス制限

ファイルのタイプに基づいて、サーバーまたは Web サイトへのアクセスを制限することができます。たとえば、特定のユーザーだけに、サーバーで実行されるプログラムの作成を許可することができます。すべてのユーザーがプログラムを実行できますが、作成や削除を実行できるのはグループ内の指定されたユーザーだけです。

アクセスできるファイルタイプを制限するには、サーバーインスタンスに対するアクセス制御の設定に関する節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Pick a resource」セクションで「Wildcard」をクリックし、ワイルドカードパターンを入力します。
  5. 例 : *.cgi

  6. 「Edit Access Control」をクリックします。
  7. すべてのユーザーに対して読み取りアクセスを許可する、新しい規則を作成します。
  8. 指定されたグループだけに読み取りアクセスと削除アクセスを許可する、別の規則を作成します。
  9. 変更を送信して、適用します。

ファイルタイプの制限については、両方の「Continue」チェックボックスのチェックマークを付けたままにします。ファイルが要求されると、サーバーはまず、ACL のファイルタイプを確認します。

Pathcheck 関数は obj.conf 内に作成されます。この関数には、ファイルまたはディレクトリのワイルドカードパターンが含まれる場合あります。ACL ファイルのエントリは、次のようになります。

acl "*.cgi";

時刻に基づくアクセス制限

指定した日の指定した時間に、サーバーに対する読み取りアクセスと削除アクセスを制限することができます。この制限を使用して、ファイルがアクセスされている可能性がある勤務時間中には、ユーザーがファイルを変更したり削除したりできないようにすることができます。

時刻を基にしてアクセスを制限するには、サーバーインスタンスに対するアクセス制御の設定に関する節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Pick a Resource」ドロップダウンリストから「entire server」を選択して、「Edit Access Control」をクリックします。
  5. すべてのユーザーに対して読み取り権と実行権を許可する、新しい規則を作成します。
  6. これは、ユーザーがファイルやディレクトリの追加、更新、または削除を行う場合にはこの規則が適用されず、サーバーは該当する別の規則を検索することを意味します。

  7. すべてのユーザーに対して書き込み権と削除権を拒否する、別の規則を作成します。
  8. 「X」リンクをクリックして、カスタマイズされた式を作成します。
  9. アクセスを許可する曜日と時刻を入力します。
  10. その例を次に示します。

    user = "anyone" and
    dayofweek = "sat,sun" or
    (timeofday >= 1800 and
    timeofday <= 600)

    カスタム式を作成すると、「Unrecognized expressions」メッセージが「Users/Groups」フィールドと「From Host」フィールドに表示されます。

  11. 変更を送信して、適用します。

カスタマイズした式にエラーがあると、エラーメッセージが生成されます。修正してから、もう一度送信してください。

セキュリティに基づくアクセス制限

Sun ONE Web Server 6.1 では、1 つのサーバーインスタンスに SSL を使用する待機ソケットと SSL を使用しない待機ソケットを設定することができます。セキュリティに基づく制限を使用すると、セキュリティ保護されたチャネルを経由して送信する必要のあるリソースを保護できます。

セキュリティに基づいてアクセスを制限するには、サーバーインスタンスに対するアクセス制御の設定に関する節で説明した手順を使用して、次の操作を実行します。

  1. サーバーマネージャを使用して、サーバーインスタンスを選択します。
  2. 「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Pick a Resource」ドロップダウンリストから「entire server」を選択して、「Edit Access Control」をクリックします。
  5. すべてのユーザーに対して読み取り権と実行権を許可する、新しい規則を作成します。
  6. これは、ユーザーがファイルやディレクトリの追加、更新、または削除を行う場合にはこの規則が適用されず、サーバーは該当する別の規則を検索することを意味します。

  7. すべてのユーザーに対して書き込み権と削除権を拒否する、別の規則を作成します。
  8. 「X」リンクをクリックして、カスタマイズされた式を作成します。
  9. ssl="on"」と入力します。
  10. その例を次に示します。

    user = "anyone" and ssl="on"

  11. 変更を送信して、適用します。

カスタマイズした式にエラーがあると、エラーメッセージが生成されます。修正してから、もう一度送信してください。

分散管理によるアクセス制御のセキュリティ保護

ここでは、分散管理を有効にした後で、Sun ONE Web Server 6.1 でアクセス制御でセキュリティを保護するために必要な追加タスクについて説明します。

リソースへのアクセスのセキュリティ保護

generated.https-server-id.acl ファイルの https-server-id オブジェクトタグに指定されている PathCheck 指令の実行順序によって、リソースに対して不適切なアクセス権が与えられてしまうことがあります。これを防止するには、<server-root>/generated.https-server-id.acl をアクセス制御が必要なプログラムグループをコンマで区切って次のように指定します。

allow (all)

user=<username> and program=<program group, program group...>;

上の行の下に、次の行を追加します。

deny absolute (all)

user=<username> and program!=<program group, program group...>;

サーバーインスタンスへのアクセスのセキュリティ保護

サーバーインスタンスへのアクセスを制御するように Sun ONE Web Server 6.1 を設定するには、<server-root>/httpacl/*.https-admserv.acl ファイルを編集して、アクセス制御権限を与えるユーザーを指定します。その例を次に示します。

acl "https-<instance>";

authenticate (user,group) {

database = "default";

method = "basic";

};

deny absolute (all) user != "UserA";

IP ベースのアクセス制御の有効化

アクセス制御エントリが、管理サーバーに関連する ACL ファイル (gen*.https-admserv.acl) の ip 属性を参照する場合、次の手順 1、2 を実行してください。

アクセス制御エントリが、サーバーインスタンスに関連する ACL ファイルの ip 属性を参照する場合は、その ACL について次の手順 1 だけを実行してください。

  1. <server-root>/httpacl/gen*.https-admserv.acl ファイルを次のように編集して、usergroup に加えて、ip を認証リストに追加します。
  2. acl "https-admserv";

    authenticate (user,group,ip) {

    database = "default";

    method = "basic";

    };

  3. 次のアクセス制御エントリを追加します。
  4. deny absolute (all) ip !="ip_for_which_access_is_allowed";

    その例を次に示します。

    acl "https-admserv";

    authenticate (user,group,ip) {

    database = "default";

    method = "basic";

    };

    deny absolute (all) ip !="205.217.243.119";


ダイナミックアクセス制御ファイルの使用

サーバーのすべてのコンテンツが 1 人のユーザーによって管理されることはほとんどありません。このため、Sun ONE Web Server へのアクセス権を与えることなく、一般ユーザーが必要な設定を行えるように、設定オプションのサブセットへのアクセスを許可することが必要な場合があります。設定オプションのサブセットは、ダイナミック設定ファイルに保存されます。

この節で説明する内容を次に示します。

.htaccess ファイルの使用

Sun ONE Web Server は、ダイナミック設定ファイルである .htaccess をサポートします。ユーザーインタフェースから、または設定ファイルを手動で変更することによって、.htaccess ファイルを有効にすることができます。.htaccess をサポートするファイルは、server_root/plugins/htaccess ディレクトリにあります。これらのファイルには、.htaccess ファイルと、.nsconfig ファイルを .htaccess ファイルに変換するためのスクリプトを使用できるようにするプラグインが含まれています。

.htaccess ファイルは、サーバーの標準アクセス制御と組み合わせて使用することができます。標準アクセス制御は、PathCheck 指令の順序に関係なく、必ず .htaccess アクセス制御の前に適用されます。ユーザー-グループ認証が「基本」の場合、ユーザー認証には標準アクセス制御と .htaccess アクセス制御の両方は必要ありません。標準サーバーアクセス制御を経由して SSL クライアント認証を使用でき、.htaccess ファイルを経由して HTTP「基本」認証を要求することもできます。

この節では、次の内容について説明します。

ユーザーインタフェースからの .htaccess の有効化

.htaccess を使用するように Sun ONE Web Server を設定するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、.htaccess を有効にするサーバーインスタンスを選択します。
  2. 画面の一番上にある「Class Manager」リンクをクリックします。
  3. 「Content Mgmt」タブを選択します。
  4. .htaccess Configuration」リンクをクリックします。
  5. 次の方法で、編集するサーバーを選択します。
    • ドロップダウンリストからサーバー全体または特定のサーバーを選択します。
    • 「Browse」をクリックして、編集するディレクトリやファイルを選択します。
    • 「Wildcard」をクリックして、編集するワイルドカードパターンを選択します。
  6. 「Yes」を選択して、.htaccess を有効にします。
  7. htaccess の設定を追加するファイルの名前を入力します。
  8. 「OK」をクリックします。
  9. 完了したら、「Apply」をクリックします。
  10. 「hard start /restart」または「dynamically apply」を選択します。

magnus.conf からの .htaccess の有効化

.htaccess を使用するサーバーを手動で有効にするにはまず、プラグインを読み込んで初期化してから起動するように、サーバーの magnus.conf ファイルを修正する必要があります。

  1. server_root/https-server_name/config ファイルの magnus.conf を開きます。
  2. ほかの Init 指令のあとに、必要な行を追加します。
    • UNIX/Linuxの場合は、次の行を追加します。
    • Init fn="load-modules" funcs="htaccess-init,htaccess-find"
      shlib="
      server_root/plugins/htaccess/htaccess.so" NativeThread="no"
      Init fn="htaccess-init"

    • Windowsの場合は、次の行を追加します。
    • Init fn="load-modules" funcs="htaccess-init,htaccess-find,htaccess-register"
      shlib="
      server_root/plugins/htaccess/htaccess.dll" NativeThread="no"
      Init fn="htaccess-init"

    • HPの場合は、次の行を追加します。
    • Initfn="load-modules" funcs="htaccess-init,htaccess-find,htaccess-register" shlib="<server_root>/plugins/htaccess/htaccess.sl" NativeThread="no"

      Init fn="htaccess-init"

  3. (省略可能) 最後の行を次のように編集します。
  4. Init fn="htaccess-init"[groups-with-users=yes]

  5. 「File」の「Save」をクリックします。
  6. obj.conf を開きます。
  7. オブジェクトの最後の指令として、PathCheck 指令を追加します。
    1. 仮想サーバーによって管理されるすべてのディレクトリに対して .htaccess ファイルの処理を有効にするには、object.conf ファイルのデフォルトオブジェクトに PathCheck 指令を追加します。
    2. <Object name="default">

      ...

      PathCheck fn="htaccess-find"

      </Object>

      .htaccess の処理をオブジェクトの最後の PathCheck 指令にする必要があります。

    3. サーバー上の特定のディレクトリを対象とした .htaccess ファイルの処理を有効にするには、magnus.conf 内の対応する定義に PathCheck 指令を配置します。
  8. .htaccess ファイルに .htaccess 以外の名前を付けるには、次の形式を使用して PathCheck 指令でファイル名を指定する必要があります。
  9. PathCheck fn="htaccess-find" filename="filename"


    次に管理サーバーを使用するとき、手動で修正が行われたことを知らせる警告メッセージが表示されます。「Apply」をクリックすると、変更が有効になります。


それ以降のサーバーへのアクセスは、指定されたディレクトリでの .htaccess によるアクセス制御の対象となります。たとえば、.htaccess ファイルへの書き込みアクセスを制限するには、対象ファイルの設定スタイルを作成し、その設定スタイルに対してアクセス制御を適用します。詳細は、第 17 章「設定スタイルの適用」を参照してください。

既存の .nsconfig ファイルの .htaccess ファイルへの変換

Sun ONE Web Server 6.1 には、旧バージョンで使用していた既存の .nsconfig ファイルを .htaccess ファイルに変換するための htconvert プラグインが組み込まれています。Sun ONE Web Server 6.1 では、.nsconfig ファイルはサポートされなくなりました。このため、これまで .nsconfig ファイルを使用していた場合は、.htaccess ファイルに変換する必要があります。

htconvert が有効になっている場合、pfx2dir 指令と document-root 指令に対して、指定された server.xml ファイルが検索されます。検出された各 .nsconfig ファイルは、.htaccess ファイルに変換されます。設定によっては、複数の obj.conf ファイルを変換できます。


既存の .htaccess ファイルがある場合、htconvert によって htaccess.new ファイルが生成され、警告メッセージが表示されます。.htaccess.htaccess.new がすでに存在している場合、新しいファイルは .htaccess.new.new という名前になります。つまり .new は繰り返し追加されます。


現在、htconvert プラグインは RestrictAccess 指令と RequireAuth 指令、および <Files> ラッパーだけをサポートしています。<Files*> 以外の <Files> がある場合は、警告メッセージが表示され、スクリプトはディレクトリ内のすべてのファイルへのアクセスが制御されるように動作します。

ファイルを変換するには、コマンドプロンプトで、使用しているシステムの Perl へのパス、プラグインスクリプトへのパス、server.xml ファイルへのパスを入力します。その例を次に示します。

すべての .nsconfig ファイルが .htaccess ファイルに変換されますが、変換元のファイルが削除されることはありません。

groups-with-users オプションによって、多数のユーザーをグループとして処理できます。多数のユーザーがグループのメンバーとなっている場合は、次の手順を実行します。

  1. ユーザーファイルの書式を修正して、ユーザーがメンバーとなっているすべてのグループのリストを表示します。
  2. username:password:group1,group2,group3,...groupn

  3. AuthGroupFile 指令を修正して、AuthUserFile と同じファイルを指定します。

また、次のように実行することもできます。

  1. AuthGroupFile 指令全体を削除します。
  2. magnus.conf ファイルの Init fn=htaccess-init 行に、次の内容を追加します。

htaccess-register の使用

htaccess-register は、認証メソッドを独自に作成するための新しい関数です。Apache と同様に、外部認証モジュールを作成し、htaccess-register を使用して .htaccess モジュールに組み込むことができます。server_root/plugins/nsapi/htaccess に 2 つのサンプルモジュールがあります。

外部モジュールを使用すると、1 つまたは複数の新しい指令を作成できます。たとえば、認証のためのユーザーデータベースを指定できます。ただし、指令を <Limit> タグまたは <LimitExcept> タグで囲むことはできません。

.htaccess ファイルの例

次に、.htaccess ファイルの例を示します。

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName mxyzptlk.kawaii.com
AuthUserFile /server_root/mxyz-docs/service.pwd
AuthGroupFile /server_root/mxyz-docs/service.grp

サポートされる .htaccess 指令

このバージョンでは、次の .htaccess 指令がサポートされます。

allow

構文

Allows from host: host は次のいずれかです。

<Limit> または <LimitExcept> で囲む必要はありませんが、通常は囲まれています。

効果

指定したホストに対してアクセスを許可します。通常、<Limit> タグで囲まれています。

deny

構文

Deny from host: host は次のいずれかです。

<Limit> タグまたは <LimitExcept> タグで囲む必要はありませんが、通常は囲まれています。

効果

指定したホストに対してアクセスを拒否します。通常、<Limit> タグで囲まれています。

AuthGroupFile

構文

AuthGroupFile filename: filename は、groupname: user user という形式でグループ定義が含まれるファイルの名前です。

<Limit> タグや <LimitExcept> タグで囲むことはできません。

効果

指定されたグループファイルが、require group 指令で参照されるグループ定義で使用されることを示します。AuthGroupFile 指令で指定されたファイル名が AuthUserFile 指令で指定されたファイル名と同じである場合、このファイルには次の形式でユーザーとグループが含まれると想定されることに注意してください。

username:DES-encrypted-password:comma-separated-list-of-groups

AuthUserFile

構文

AuthUserFile filename: 次のように指定します。

<Limit> タグや <LimitExcept> タグで囲むことはできません。

効果

指定されたユーザーファイルが、require user 指令または require valid-user 指令で参照されるユーザー名で使用されることを示します。

obj.confInit fn=htaccess-init 指令で groups-with-users=yes を使用したり、同じファイル名で AuthGroupFile 指令を指定したりすると、そのファイルが次の形式であると想定されることに注意してください。

username:DES-encrypted-password:comma-separated-list-of-groups

AuthName

構文

AuthName authentication realm: authentication realm は、ユーザー認証の要求に関連付けられる認証領域を指定する文字列です。

<Limit> タグや <LimitExcept> タグで囲むことはできません。

効果

authentication realm 文字列は、通常、クライアント側のユーザー名とパスワードのプロンプトに表示されます。クライアントのユーザー名とのパスワードのキャッシュへの保存に影響を与える場合があります。

AuthType

構文

AuthType Basic: <Limit> タグや <LimitExcept> タグで囲むことはできません。

効果

ユーザー認証メソッドとして、現在サポートされている唯一のメソッドである HTTP 基本認証を指定します。

<Limit>

構文

<Limit method method ...>

allow, deny, order, or require directives

</Limit>

method は GET、POST、PUT などの HTTP メソッドです。ここでは、Web サーバーに対して使用できるすべてのメソッドを使用できます。

効果

指定された HTTP メソッドを使用する要求に対してだけ、タグで囲まれている指令が適用されます。

<LimitExcept>

構文

<LimitExcept method method ...>

allow, deny, order, or require directives

</LimitExcept>

method は GET、POST、PUT などの HTTP メソッドです。ここでは、Web サーバーに対して使用できるすべてのメソッドを使用できます。

効果

指定された HTTP メソッドと一致しないタイプの要求に対してだけ、タグで囲まれている指令が適用されます。

order

構文

Order ordering。ordering は次のいずれかです。

<Limit> または <LimitExcept> で囲む必要はありませんが、通常は囲まれています。

効果

require

構文

<Limit> または <LimitExcept> で囲む必要はありませんが、通常は囲まれています。

効果

.htaccess セキュリティに関する注意事項

デフォルトでは、サーバーによる HTTP PUT のサポートが無効になっています。クラスマネージャの「Content Mgmt」の「Remote File Manipulation」ページを使用して、HTTP PUT を有効にすることができます。.htaccess ファイルが保存されているディレクトリへの PUT アクセスを許可する場合、このファイル自体の置換も許可することになるため、細心の注意が必要です。アクセスを制限することによって、ディレクトリ内のすべてのファイルに対する PUT アクセスを防止することができます。「ディレクトリ (パス) へのアクセス制限」を参照してください。


仮想サーバーへのアクセス制御

Sun ONE Web Server 6.1 のアクセス制御についての情報は、各仮想サーバーの ACL ファイルと、ドキュメントディレクトリの .htaccess ファイルから入手できます。.htaccess システムは iPlanet Web Server 4.x から変更されていません。

server.xml ファイルには、特定の標準 Sun ONE Web Server 6.x ACL ファイルに関連付けられた ID を定義する、1 つまたは複数の ACLFILE タグが含まれています。その例を次に示します。

<ACLFILE id="standard" file="standard.acl">

アクセス制御を使用する仮想サーバーの場合は、「aclids」プロパティに 1 つまたは複数の ACL ファイル ID への参照を作成する必要があります。その例を次に示します。

<VS aclids=都tandardgt;

この設定では、複数の仮想サーバーで同じ ACL ファイルを共有することができます。仮想サーバーに対するユーザー-グループ認証を要求する場合は、その定義に 1 つまたは複数の USERDB タグを追加する必要があります。このような USERDB タグは、ACL ファイル内のデータベース名と dbswitch.conf 内の実際のデータベースを関連付けます。

次の例では、「database」属性のない ACL を dbswitch.conf の「default」データベースにマッピングします。

<VS>

    <USERDB id=電efaultdatabase=電efault>

</VS>

仮想サーバーからデータベースへのアクセス

dbswitch.conf ファイルで、ユーザー認証データベースをグローバルに定義できます。このファイルは、サーバーの起動時に読み込まれます。

dbswitch.conf 内の LDAP URL の baseDN は、データべースへのすべてのアクセスのグローバルルートを定義します。これによって、下位互換が維持されます。最新のインストールでは、baseDN には何も指定されません。

dcsuffixdbswitch.conf 内の LDAP データベースの新しい属性で、Sun ONE LDAP スキーマに従って DC ツリーのルートを定義します。これは、LDAP URL の baseDN に対する相対位置になります。dcsuffix 属性が存在する場合、LDAP データベースは Sun ONE LDAP スキーマに準拠し、動作の一部が変更されます。Sun ONE LDAP スキーマの詳細と例については、『Sun ONE Web Server 6.1 Administrator's Configuration Reference』の第 2 章に記載されている「The Sun ONE LDAP Schema」を参照してください。

仮想サーバーごとに、ディレクトリの 1 つを指定する 1 つまたは複数の USERDB ブロックを定義できます。また、追加情報を定義することもできます。USERDB ブロック ID は、ACL のデータベースパラメータから参照することができます。仮想サーバーに USERDB ブロックがない場合、ユーザーまたはグループを基準にした ACL は失敗します。

USERDB タグは、ACL のデータベース属性と dbswitch.conf の間の間接参照の追加層を定義します。間接参照のこの層では、仮想サーバーの管理者がアクセスするデータベースをサーバー管理者が完全に制御するために必要な保護を追加します。

USERDB の詳細については、『Sun ONE Web Server 6.1 Administrator's Configuration Reference』の第 2 章に記載されている「User Database Selection」を参照してください。

ユーザーインタフェースでの LDAP データベースの指定

dbswitch.conf で 1 つまたは複数のユーザー認証データベースを定義すると、クラスマネージャを使用して、各仮想サーバーが認証のためにどのデータベースを使用するかを設定できるようになります。また、クラスマネージャを使用して、仮想サーバーでの認証のために dbswitch.conf での設定に対して新しく作成したデータベース定義を追加することができます。

LDAP データベースまたは仮想サーバーで使用するデータベースを指定するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、「Virtual Server Class」タブを選択します。
  2. 「Tree View of the Server」のリストから、LDAP データベースを指定したい仮想サーバークラスのリンクをクリックします。
  3. 表示されていない場合は、「Virtual Servers」タブを選択します。
  4. 「ACL Settings」リンクをクリックします。
  5. 「ACL Settings for Virtual Servers」ページが表示されます。

  6. 表示されていない場合は、「Option」列のドロップダウンリストから「Edit」を選択します。
  7. 編集している仮想サーバーの「Database」列でドロップダウンリストからデータベース設定を選択します。
  8. 「OK」をクリックします。
  9. 「Edit ACL Files」ウィンドウを閉じます。
  10. 「Apply」をクリックします。
  11. 「dynamically apply」を選択します。

仮想サーバーのアクセス制御リストの編集

仮想サーバーの ACL は、仮想サーバーがあるサーバーインスタンスに対して作成されます。仮想サーバーの ACL 設定は、サーバーインスタンスに対して作成される ACL 設定のデフォルトとなります。ただし、各仮想サーバーのアクセス制御はクラスマネージャから編集できます。また、このメソッドを使用して、新しく作成された ACL ファイルを仮想サーバーに追加します。

仮想サーバーの ACL 設定を編集するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、「Virtual Server Class」タブを選択します。
  2. 「Tree View of the Server」のリストから、LDAP データベースを指定したい仮想サーバークラスのリンクをクリックします。
  3. 表示されていない場合は、「Virtual Servers」タブを選択します。
  4. 「ACL Settings」リンクをクリックします。
  5. 変更する仮想サーバーの「Option」フィールドのドロップダウンリストから「Edit」または「Delete」を選択します。
  6. 「ACL File」フィールドの「Edit」リンクをクリックすると、使用できる ACL ファイルが表示されます。
  7. 仮想サーバーに追加または削除する 1 つまたは複数の ACL ファイルを選択します。
  8. 仮想サーバーには複数のドキュメントルートが存在する場合があるため、複数の ACL ファイルが存在する可能性があります。

  9. ドロップダウンリストから、ACL リストに関連付けるデータベースを選択します。
  10. (必要に応じて) BaseDN を入力します。
  11. 変更が終わったら、「OK」をクリックします。
  12. 「Apply」をクリックします。
  13. 「dynamically apply」を選択します。


ファイルベースの認証用 ACL の作成

Sun ONE Web Server 6.1 は、ファイルベース認証データベースの使用をサポートしています。このデータベースには、ユーザーとグループに関する情報がテキスト形式のフラットファイルとして格納されます。ACL のフレームワークは、ファイル認証データベースを利用できるように設計されています。


Sun ONE Web Server は、ダイナミックフラットファイルをサポートしていません。フラットファイルデータベースは、サーバーの起動時に読み込まれます。ファイルに加えた変更は、サーバーを再起動した場合にだけ適用されます。


ACL エントリは、database キーワードを使用してユーザーデータベースを参照できます。その例を次に示します。

acl "default";

    authenticate (user) {

...

    database="myfile";

...

};

myfile データベースは、server-root/userdb/dbswitch.conf ファイル内の対応する定義とリンクしている server.xml 内の VSUSERDB 要素中で参照するようにできます。その例を次に示します。

<VS>

...

    <USERDB id="myfile" database="myfiledb">

...

</VS>

server-root/userdb/dbswitch.conf ファイルには、ファイル認証データベースとその設定を定義するエントリが含まれます。その例を次に示します。

directory myfiledb file

myfiledb:syntax keyfile

myfiledb:keyfile /path/to/config/keyfile

次の表を参照してください。

ファイル認証に基づくディレクトリサービス用の ACL の作成

ファイル認証に基づいてディレクトリサービス用の ACL エントリを作成するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、ACL を作成または編集するサーバーインスタンスを選択します。
  2. サーバーマネージャの「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Option」列の下で、ドロップダウンリストから ACL ファイルを選択し、「Edit ACL」をクリックします。
  5. 「Access Control Rules」ページの上部フレームで、編集する ACL の「Users/Groups」リンクをクリックします。
  6. 「User/Group」ページの下部フレームで、「Authentication database」ドロップダウンリストから「keyfile」を選択します。
  7. 「Update」をクリックします。
  8. keyfile ベースのファイル認証データベースに対して ACL を設定すると、次のエントリ例のように、dbswitch.conf ファイルが ACL エントリで更新されます。

    version 3.0;

      acl "default";

      authenticate (user) {

      prompt = "Sun One Web Server 6.1";

      database = "mykeyfile";

      method = "basic";

      };

    deny (all) user = "anyone";

    allow (all) user = "all";

.htaccess 認証に基づくディレクトリサービス用の ACL の作成

Sun ONE Web Server は、.htaccess ベースのフラットファイル認証をサポートしています。これまで .htaccess 認証を使用していた場合は、既存のデータファイルを変更せずに、ファイル認証データベースに移行できます。「.htaccess ファイルの使用」でも説明したように、.htaccess のユーザーとグループのデータは、1 つのファイルに格納することも、2 つのファイル (ユーザーデータ用とグループデータ用) に分割することもできます。ファイル認証データベースでは、両方の形式がサポートされます。

htaccess 認証に基づいてディレクトリサービス用の ACL エントリを作成するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、ACL を作成または編集するサーバーインスタンスを選択します。
  2. サーバーマネージャの「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Option」列の下で、ドロップダウンリストから ACL ファイルを選択し、「Edit ACL」をクリックします。
  5. 「Access Control Rules」ページの上部フレームで、編集する ACL の「Users/Groups」リンクをクリックします。
  6. 「User/Group」ページの下部フレームで、「Authentication database」ドロップダウンリストから「htaccess」を選択します。
  7. 「Update」をクリックします。
  8. htaccess ベースのファイル認証データベースに対して ACL を設定すると、次のエントリ例のように、dbswitch.conf ファイルが ACL エントリで更新されます。

    version 3.0;

    acl "default";

      authenticate (user) {

      prompt = "Sun One Web Server 6.1";

      database = "myhtaccessfile";

      method = "basic";

      };

    deny (all) user = "anyone";

    allow (all) user = "all";

ファイル認証データベースへの既存の .htaccess 情報の移行

既存の .htaccess 情報を Sun ONE Web Server 6.1 のファイル認証データベースに移行するには、次の手順を実行します。

ユーザーファイルの形式は次のとおりです。

#user:password

グループファイルの形式は次のとおりです。

#group1:user1 user2

#group2:user3 user4


メンバー名は、空白文字で区切ります。


ユーザーファイルとグループファイルの名前が同じ場合は、次に示す行の構文で両方のファイルを 1 つにまとめることができます。

#user:password:group1,group2


各列は、コロンで区切ります。


htaccess データベースの例

例 1

#sample userfile  (user/password "j2ee/j2eepwd"  user/password "user1/user1pwd" )

j2ee:9hmjfRwNxvJLU

user1:wvQirF86BsjSk

例 2

#sample group file

staff:j2ee  user1

eng:j2ee

例 3

#sample user/group file (username "j2ee", user password "j2eepwd")

j2ee:9hmjfRwNxvJLU:staff,eng

ダイジェスト認証に基づくディレクトリサービス用の ACL の作成

ファイル認証データベースは、RFC 2617 に規定されているダイジェスト認証での使用に適したファイル形式もサポートしています。ハッシュはパスワードに基づき、レルムは格納されます。プレーンテキストパスワードは維持されません。

digestauth ベースの認証に基づいてディレクトリサービス用の ACL エントリを作成するには、次の手順を実行します。

  1. サーバーマネージャにアクセスし、ACL を作成または編集するサーバーインスタンスを選択します。
  2. サーバーマネージャの「Preferences」タブを選択します。
  3. 「Restrict Access」リンクをクリックします。
  4. 「Option」列の下で、ドロップダウンリストから ACL ファイルを選択し、「Edit ACL」をクリックします。
  5. 「Access Control Rules」ページの上部フレームで、編集する ACL の「Users/Groups」リンクをクリックします。
  6. 「User/Group」ページの下部フレームで、「Authentication database」ドロップダウンリストから「digest」を選択します。
  7. 「Update」をクリックします。
  8. digestauth ベースのファイル認証データベースに対して ACL を設定すると、次のエントリ例のように、dbswitch.conf ファイルが ACL エントリで更新されます。

    version 3.0;

      acl "default";

      authenticate (user) {

      prompt = "filerealm";

      database = "mydigestfile";

      method = "digest";

      };

    deny (all) user = "anyone";

    allow (all) user = "all";



前へ      目次      索引      次へ     


Copyright 2003 Sun Microsystems, Inc. All rights reserved.