… apache ユーザディレクトリの設定についての参考資料

Apache UserDir の設定

■ apache ユーザディレクトリの設定について
#
#<Directory /home/*/public_html>
#    AllowOverride FileInfo AuthConfig Limit
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    <Limit GET POST OPTIONS>
#        Order allow,deny
#        Allow from all
#    </Limit>
#    <LimitExcept GET POST OPTIONS>
#        Order deny,allow
#        Deny from all
#    </LimitExcept>
#</Directory>

apache2 でユーザディレクトリを有効にする場合、デフォルトでは上記の設定となっています。
html のように <> で括った部分をディレクティブと呼び、デフォルト設定では以下のように設定されています。

■ Directory ディレクティブ
⇒引数で指定するディレクトリの制御を行うための宣言
ここでは AllowOverride によってディレクトリ内の設定を .htaccess ファイルで上書きすることを許可しています。
ただし、すべての項目を許可するわけではなく以下の3項目のみが上書きできます。
● FileInfo
ドキュメントタイプを制御するディレクティブ、ドキュメントのメタデータを制御するディレクティブと mod_actions の Action ディレクティブの使用を許可します。

● AuthConfig
認証に関するディレクティブの使用を許可します。

● Limit
ホストへのアクセス制御を行うためのディレクティブの使用を許可します。
また、ディレクトリ機能オプションをあらわす Options では以下の設定が有効になります。
・ MultiViews
mod_negotiation による コンテントネゴシエーション された "MultiViews" を許可します。
これは異なる国からの UA がアクセスしてきたような場合、それぞれの国語でコンテンツを用意しておき、言語ごとに対応するコンテンツを返したいような場合に使用されます。

・ Indexes
DirectoryIndex で指定したファイル (例えば、index.html) が ディレクトリ内になければ、エラーコンテンツを表示せずディレクトリ内の一覧を整形して返します。

・ SymLinksIfOwnerMatch
リンク先のファイルまたはディレクトリが、 シンボリックリンクの所有ユーザ ID と同じ場合にのみシンボリックリンクをたどれるようにします。

・ IncludesNoExec
SSI は有効になりますが、#exec コマンド と #exec CGI は無効になります。
ただし、#include virtual により、ScriptAlias されたディレクトリで CGI を実行することは可能です。


■ Limit ディレクティブ ⇒引数で指定したメソッドの制御を行うための宣言
Limit ディレクティブ内ではネットワーク単位での http メソッドに対するアクセス制御が行われます。
ここで制御可能なメソッドは GET POST OPTIONS になります。
● GET
コンテンツの取得用メソッド。最も一般的で広く使われます。

● POST
掲示板など、ユーザ側からサーバへ書き込みが必要な場合に使われるメソッドです。

● OPTIONS
サーバがどのようなメソッドを使えるか問い合わせるためのメソッドです。


★ アクセス制御の優先順位について
Limit ディレクティブおよび LimitExcept ディレクティブではアクセス制御には、優先順位が付けられています。
# Order allow,deny
# Allow from all
Order はアクセス制御を評価する順番をあらわしています。
ここでは allow(許可)が先に評価され、deny(拒否)が後に評価されます。
このため、Allow from all は「すべての IP アドレス範囲からのアクセスを許可する」の意になります。
すなわち、デフォルトのアクセス制御ではすべてのアドレスからの GET と POST および OPTIONS を許可しています。

■ LimitExcept ディレクティブ
⇒引数で指定した「以外の」メソッドの制御を行うための宣言
Limit ディレクティブ内ではネットワーク単位での http メソッドに対するアクセス制御が行われます。
ここで制約を受けるのは Limit にて宣言された GET POST OPTIONS 「以外の」メソッドになります。
ここでのアクセス制御の優先順位は以下のように設定されています。
# Order deny,allow
# Deny from all
したがってここでは GET POST OPTIONS 以外のメソッドは、すべてのアドレス範囲から許可しない設定となります。


以上、簡単に述べてみました。詳細については、本家Apacheの<LimitExcept> ディレクティブをどうぞ。