AllowOverride について

潟若若菴遵

[Apache]

はじめに

多分このページを読むより、Apache 本家のマニュアルを読んだ方が正確で、役に立つこと請け合いです。

http://httpd.apache.org/docs/2.2/ja/mod/core.html#allowoverride

http://httpd.apache.org/docs/2.2/howto/htaccess.html

にきっと欲しい情報があると思います。というか、以下は、上記マニュアルをまんま写している箇所もあります。もし、下記に怪しい記述があれば、上記サイトのマニュアルで確認してください。

概要

.htaccess(AccessFileNameディレクティブで指定。他の名前に変更されている可能性もあり)があった場合に、上書き設定できるディレクティブについて記載します。

この設定は、なんの役に立つの?

設定変更の際に、Apache の再起動なく、設定変更が可能になります。また、サーバ管理者の手を煩わせずに、許可された範囲で、ユーザが自由に設定変更可能なので、利便性を求めて、利用されるケースが多いようです。ただし、ユーザがアクセスする毎に、各ディレクトリに、.htaccessが存在しているかどうかをチェックするため、ある程度パフィマンスが犠牲になります。また、.htaccess の設定内容によっては、さらにパフォーマンスが劣化する場合があります。許可すべきディレクティブについては、よく吟味した方がよいと思います。

設定

コンテキストが「ディレクトリ」となっていますが、実際はディレクトリセクションでのみ有効なので、<Directory></Directory> 内での指定は OK ですが、<Location></Location> などでは指定できません。

AuthConfig

マニュアルによると

認証に関するディレクティブの使用を許可する (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, 
AuthName, AuthType, AuthUserFile, Require など)。

とあります。基本的には、ユーザに認証の設定だけを許したい際に、明示的に指定します。ただし、Apache にauth_module などが組み込まれていないと、そもそも認証機能は使えないので、注意が必要です。

設定例:

AllowOverride AuthConfig

FileInfo

マニュアルによると

ドキュメントタイプを制御するディレクティブ (DefaultType, ErrorDocument, ForceType, LanguagePriority,
SetHandler, SetInputFilter, SetOutputFilter, mod_mime の Add* と Remove* ディレクティブなど)、 
ドキュメントのメタデータを制御するディレクティブ (Header, RequestHeader, SetEnvIf, SetEnvIfNoCase,
BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName), mod_rewrite の
ディレクティブ RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule) と mod_actions
の Action ディレクティブの使用を許可する。

とあります。

よく、Wiki やCMSで動的に出力されているページの URL を静的に見せるために、RewriteEngine を利用する場合がありますが、その機能を利用するには、この FileInfo が許可されている必要があります。

Indexes

マニュアルによると

ディレクトリインデックスを制御するためのディレクティブの使用を許可する (AddDescription, AddIcon, 
AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName,
IndexIgnore, IndexOptions, ReadmeName など)。

とあります。

index.html を置かずに、ディレクトリ内のファイル一覧を Apache の機能を使って表示させたい、といった場合には、この機能が許可されている必要があります。

Limit

マニュアルによると

ホストへのアクセス制御を行うためのディレクティブの使用を許可する (Allow, Deny, Order).
Options[=Option,...]
特定のディレクトリにおける機能を指定するためのディレクティブの使用を許可する (Options と XBitHack)。
Options で設定するオプション を、(空白を含めない) コンマ区切りのリストにして等号の後に続けること
で 設定できます。 

とあります。

設定例:

AllowOverride AuthConfig Limit

設定例

簡単な設定例です。大文字、小文字、スペースなどに気を付けてください。また設定後は、期待通りに動作しているか、かならずチェックをお願いします。

ディレクトリ以下に基本認証を掛ける

AllowOverride All

もしくは

AllowOverride AuthConfig

が指定されている必要があります。

  • .htaccess 設定例

以下の内容の、.htaccess を、認証を掛けたいディレクトリに設定しましょう。認証は、設置したディレクトリだけではなく、その下のサブディレクトリ以下も同様に認証が掛かります。もし、そのサブディレクトリに、.htaccess があれば、そちらの設定で上書きされます。

AuthType Basic
AuthName "Staff Only"
AuthUserFile "/hogehoge/.htpasswd"
Require valid-user

.htpasswd は、Apache のコンテンツとして見える必要はありません。極力 DocumentRoot 以下には配置しないようにしましょう。大抵は

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

という設定が入っていて、アクセスできないかとは思いますが、上記の設定が、誤って消されてしまった場合のフェールセーフという意味でも、是非。

関連:htpasswdコマンドの使い方

ディレクトリ以下に基本認証を掛けるが、特定のIPアドレスからのアクセスには制限を掛けない

AllowOverride All

もしくは

AllowOverride AuthConfig Limit

が指定されている必要があります。

AuthType Basic
AuthName "Staff Only"
AuthUserFile "/hogehoge/.htpasswd"
Require valid-user
Order Deny,Allow
Deny from all
Allow from 192.168.1.1
Allow from 2001:db8::a00:20ff:fea7:ccea
Satisfy Any 

上記の例では、192.168.1.1(IPv4アドレス) もしくは 2001:db8::a00:20ff:fea7:ccea(IPv6アドレス) からのアクセスでは、パスワードは聞かれず、ページが閲覧できます。他のアドレスからは、ID/パスワードが必要です。

ちなみに、ネットワーク単位で制御する場合は

Allow from 2001:db8::/64

とかになります。2001::db8/64 ではうまく行きません。