ユーザーディレクトリ詳解

 WWWサーバーApacheでユーザーディレクトリの設定を行う場合、どのような機能をユーザーに許可するかと言う点に十分注意を払わなくてはいけません。無闇に何もかも許可してしまうと、不具合の原因になるばかりでなく、WWWサーバー全体の動作に悪影響を及ぼす事態も招きかねません。

ユーザーディレクトリの設定内容(デフォルト)

 httpd.confの中のユーザーディレクトリの設定部分をここに抜き出して見ます。ここでの「*」マークは、「どのユーザーでも可」と言う事を意味します。

<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNOEXEC
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

AllowOverride

 サーバーがディレクトリ内にアクセスコントロールファイル(デフォルトでは.htaccess)を見つけた時、そこに記述してあるディレクティブのうちどれを有効にするかを指定します。<override>オプションで有効にされた(アクセスコントロールファイル内の)ディレクティブは、<Directory>〜</Directory>で行われる設定を上書き(override)し、新しい設定が有効になります。

◆FileInfo・・・ドキュメントタイプを制御するディレクティブを有効にします。対応するディレクティブは、AddEncoding、AddLanguage、AddType、DefaultType、LanguagePriorityの5つです。

◆AuthConfig・・・認証に関するディレクティブを有効にします。対応するディレクティブは、AuthDBMGroupFile、AuthDBMUserFile、AuthGroupFile、AuthName、AuthType、AuthUserFileの6つです。

◆Limit・・・サーバーへのアクセスを制御するディレクティブを有効にします。対応するディレクティブは、allow、deny、orderの3つです。

Options

 指定したディレクトリとそのサブディレクトリに対して、制御オプションを追加・変更・削除します。

◆MultiViews・・・Content negotiated MultiViewsを許可します。これはクライアントから届けられたHTTPリクエストの付加情報に合わせて、(ファイルのURLは同じでも)内容の異なるコンテンツをクライアントに配送する為の仕組みです。又、リクエスト中のURLが不完全である場合に、サーバー側で適切なコンテンツを選択して配送する事も出来ます。

◆Indexes・・・もしディレクトリに対するURLがリクエストされ、そのディレクトリにインデックスファイル(index.htmlなど)が存在しない場合、ディレクトリリストを表示します。

◆SymLinksIfOwnerMatch・・・シンボリックリンクとリンク先ファイルの所有者が一致する場合のみリンクをたどる事を許可します。

◆IncludesNOEXEC・・・SSI機能を許可しますが、#execコマンドによるSSIスクリプトの実行と、#includeによるテキスト挿入を無効にします。セキュリティを重視したいサーバーの場合、このオプションの指定がお勧めです。全ての機能を許可したい場合は、「NOEXEC」を除けます。

Order

 orderディレクティブは、allowディレクティブ(指定するホストからのアクセスを許可する)とdenyディレクティブ(指定するホストからのアクセスを拒否する)の双方が記述された時に、それぞれ評価される順番を指定します。

◆deny,allow・・・まずdenyディレクティブが適用され、続けてallowディレクティブを適用してdenyディレクティブの内容を上書きします。デフォルトです。

◆allow,deny・・・まずallowディレクティブが適用され、続けてdenyディレクティブを適用してallowディレクティブの内容を上書きします。

注意点

 実際のサーバー運用において、ユーザーにCGIの使用を許可する場合、その該当ディレクトリ/home/*/public_html/cgi-binなどにおいてOptions指定でIndexesを許可するのはお勧めではありません。何故なら、cgi-binディレクトリ内にインデックスファイルを置いていない場合、そのファイル構成が丸見えになってしまうからです。尚、CGI許可の為のOptions指定は「ExecCGI」です。