Web サーバーで公開しているファイルやディレクトリを不正なアクセスから保護するためにクライアントからのアクセスをホスト名や IP アドレスに基づいて適切に制限することができます。アクセス制御の設定は、mod_authz_host モジュールで提供される Allow、Deny、Order ディレクティブ、および Core モジュールで提供される AllowOverride、Option ディレクティブと、<Directory>、<Location>、<Files> などのディレクティブとを組み合わせることにより設定を行います。/etc/httpd/conf/httpd.conf には以下の記述があり、mod_authz_host はデフォルトで読み込まれています。
LoadModule authz_host_module modules/mod_authz_host.so |
以下では、アクセス制御に関連するディレクティブを解説します。これらのディレクティブを、<Directory>、<Location>、<Files>、<Limit> などのディレクティブの中に指定することで、特定のディレクトリやファイルに対するアクセス要求を制御することができます。
サーバーの動作を制御するためのオプションを指定します。指定可能なオプションは以下の通りです。
表 9-5. Options ディレクティブ
| option | 意味 |
|---|---|
| None | すべてのオプションを無効にします。 |
| All | MultiViews を除いたすべてのオプションを有効にします。 |
| Indexes | DirectoryIndex ディレクティブに指定されたファイルがない場合、ディレクトリをインデックスリストで表示します。 |
| ExecCGI | CGI の実行を許可します。 |
| Includes | SSI の実行を許可します。 |
| IncludesNOEXEC | SSI の実行は許可しますが、#exec コマンドや CGI スクリプトの #include は禁止します。 |
| FollowSymLinks | シンボリックリンクを許可します。 |
| SymLinksIfOwnerMatch | シンボリックリンクとリンク先のファイルの所有者が一致した場合だけシンボリックリンクを許可します。 |
| MultiViews | MultiViews を許可します。MultiViews とは、クライアントの Web ブラウザに言語設定がされている場合に、異なる Web ページを表示させる機能です。 |
+ や - の符号は、親ディレクトリの設定を変更するときに使用します。+ の符号は親ディレクトリの設定に追加され、- の符号は親ディレクトリの設定から削除されます。符号の指定がない場合は、指定したオプションで親ディレクトリの設定を置き換えます。例えば、以下のように指定されている場合、/var/www/html/data の下では ExecCGI は許可されますが、/var/www/html/data/list の下では拒否されます。その代わり、Indexes が許可されています。
<Directory /var/www/html/data>
Options ExecCGI
</Directory>
<Directory /var/www/html/data/list>
Options -ExecCGI +Indexes
</Directory> |
Order ディレクティブでは、後述する Allow ディレクティブと Deny ディレクティブを組み合わせたアクセス制御設定を行った場合に、どの順番でこれらのディレクティブを適用するのかを指定します。ordering には以下の値が指定可能です。
表 9-6. Order ディレクティブ
| ordering | 意味 |
|---|---|
| allow,deny | Allow ディレクティブが最初にチェックされます。もし、Allow ディレクティブの指定でアクセスが許可されると、Deny ディレクティブはチェックされません。Allow ディレクティブで許可されなかった場合は、Deny ディレクティブがチェックされ、Deny ディレクティブの指定とマッチすれば、アクセスは拒否されます。最終的にどちらのディレクティブにもマッチしなかった場合には、アクセスは許可されます。 |
| deny,allow | Deny ディレクティブが最初にチェックされます。もし、Deny ディレクティブの指定でアクセスが拒否されると、Allow ディレクティブはチェックされません。Deny ディレクティブで拒否されなかった場合は、Allow ディレクティブがチェックされ、Allow ディレクティブの指定とマッチすれば、アクセスは許可されます。最終的にどちらのディレクティブにもマッチしなかった場合には、アクセスは拒否されます。 |
| mutual-failure | Allow ディレクティブと Deny ディレクティブの両方を満たすホストからのアクセスを許可します。 |
アクセスを許可するホストを指定します。指定可能なオプションは以下の通りです。
表 9-7. Allow ディレクティブ
| all | 全てのホストからのアクセスを許可します。 |
| host | ドメイン名(exaple.com)、完全な IP アドレス(10.1.2.3)、IP アドレスの一部(10.1)、ネットワーク/サブネットマスク(10.1.0.0/255.255.0.0)、ネットワーク/サブネットマスクのビット数(10.1.0.0/16)を指定することができ、指定されたホストからのアクセスを許可します。 |
| env=env-variable | mod_setenvif モジュールにより提供される機能を利用してクライアントのリクエスト属性から環境変数を設定することができます。この環境変数を指定して、例えばブラウザの種類や Referer などの HTTP リクエストヘッダなど条件にマッチした場合に環境変数を定義します。ここで指定した環境変数が存在するときアクセスを許可します。 |
アクセスを拒否するホストを指定します。指定可能なオプションは以下の通りです。
表 9-8. Deny ディレクティブ
| all | 全てのアクセスを拒否します。 |
| host | ドメイン名(exaple.com)、完全な IP アドレス(10.1.2.3)、IP アドレスの一部(10.1)、ネットワーク/サブネットマスク(10.1.0.0/255.255.0.0)、ネットワーク/サブネットマスクのビット数(10.1.0.0/16)を指定することができ、指定されたホストからのアクセスを拒否します。 |
| env=env-variable | mod_setenvif モジュールにより提供される機能を利用してクライアントのリクエスト属性から環境変数を設定することができます。この環境変数を指定して、例えばブラウザの種類や Referer などの HTTP リクエストヘッダなど条件にマッチした場合に環境変数を定義します。ここで指定した環境変数が存在するときアクセスを拒否します。 |
.htaccess ファイルによるアクセス権限の上書き許可を指定します。指定可能な値は以下の通りです。
表 9-9. Apache - AllowOverrideディレクティブ
| All | .htaccess のすべての設定を許可します。(規定値) |
| None | .htaccess ファイルによる設定の上書きを拒否します。つまりファイルが存在しても参照しません。 |
| AuthConfig | 認証に関するディレクティブの使用を許可します。 |
| FileInfo | ドキュメントタイプに関するディレクティブの使用を許可します。 |
| Indexes | リスト表示に関するディレクティブの使用を許可します。 |
| Limit | アクセス制御に関するディレクティブの使用を許可します。 |
| Options | 対象ディレクトリのみを制御する Options と XBitHack ディレクティブの使用を許可します。 |
以下では、アクセス制御に関連するディレクティブを使用した設定例を紹介します。
以下の例は、/var/www/html ディレクトリに対するアクセス制御を設定しています。このディレクトリは、Turbolinux 11 Server の Apache で DocumentRoot として指定されているディレクトリです。デフォルトの /etc/httpd/conf/httpd.conf では以下のように Option ディレクティブにより、Indexes、FollowSymLinks のみが有効に設定されています。
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory> |
以下の例では、http://fully-qualified-domain-name/~turbolinux という URL に対するすべてのアクセスを禁止しています。
<Location /~turbolinux>
Deny from all
</Location> |
以下の例では .ht で始まるファイルへのアクセスを禁止しています。
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files> |
<Limit> ディレクティブを使用すると、HTTP リクエストに含まれる POST や GET など、特定のメソッドに対するアクセス制御を指定することができます。以下の例では、/var/www/cgi-bin2 ディレクトリへの POST ができなくなります。
<Directory /var/www/cgi-bin2>
<Limit POST>
Order deny,allow
Deny from All
</Limit>
</Directory> |
前述のように、<Directory> ディレクティブを使用して、特定のディレクトリに対するアクセス制御を指定することができます。しかし、/etc/httpd/conf/httpd.conf を編集できない一般ユーザーが自分の公開ディレクトリに対してアクセス制御を設定したい場合もあります。このようなときに使用できるのが、.htaccess ファイルです。システム管理者により /etc/httpd/conf/httpd.conf の AllowOverride ディレクティブで上書きを許可されているとき、ユーザー自身が該当のディレクトリ直下に .htaccess ファイルを作成し、/etc/httpd/conf/httpd.conf のアクセス制限設定を上書きすることができます。また、システム管理者は、ユーザーの指定する .htaccess ファイルに上書きを許可する内容を制限できますので、ユーザーの設定がすべて優先されるわけではありません。システム管理者は、セキュリティを考慮し、AllowOverride ディレクティブでユーザーが設定できるディレクティブを適切に制限しておく必要があります。
![]() | .htaccess というアクセス制御用ファイルの名前は AccessFileName ディレクティブで設定されます。Turbolinux 11 Server の /etc/httpd/conf/httpd.conf には、初期設定で .htaccess が指定されています。 |
例えば、/var/www/html/secret ディレクトリ以下へのアクセスは組織内部(example.com)にあるホストからのみ許可したい場合、/etc/httpd/conf/httpd.conf には、以下のような設定を記述します。
<directory /var/www/html/secret>
AllowOverride None
order deny,allow
deny from all
allow from .example.com
</directory> |
.htaccess ファイルで設定する場合は以下のように指定します。
最初に httpd.conf ファイルの AllowOverride ディレクティブで .htaccess ファイルが存在する場合の処理を指定します。以下の例では、アクセス制御に関する設定を有効にする Limit だけを指定しています。
<directory /var/www/html/secret>
AllowOverride Limit
</directory> |
次に、以下の .htaccess ファイルを /var/www/html/secret ディレクトリに配置します。
order deny,allow deny from all allow from .example.com |