Apacheのアクセス制限について

2005.05.30

(1) .htaccessによるアクセス制限
(2)サーバ主設定ファイルhttpd.confによるアクセス制限
(3).htaccessのメリットとデメッリト
(4)ディレクトリ名、ファイル名によるアクセス制限

(1) .htaccessによるアクセス制限
1、始めにサーバ主設定ファイルhttpd.confを編集しなければなりません。
場所は
/etc/httpd/httpd.conf    (Mac OSX)
/etc/httpd/conf/httpd.conf (fedora core2)
エディタでファイルを開きます。
% vi /etc/httpd/conf/httpd.conf
(注意)Mac OSXでは重要なファイルを操作するためにはroot権限を持っていなくてはなりません。root権限を得る方法はsudoコマンドを使います。
% sudu vi /etc/httpd/httpd.conf
パスワードを聞かれるので自分のパスワードを入力してください。

その中から

# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None

の部分を探して下記のように編集してください。
AllowOverride None

AllowOverride AuthConfig FileInfo Limit

上部では.htaccessファイルを使用するさいの権限を与えています。意味は以下の通り。

AuthConfig 認証に関するディレクティブの使用を許可する
FileInfo ドキュメントタイプを制御するためのディレクティブの使用を許可する
Limit ホストへのアクセス制御を行うためのディレクティブの使用を許可する

(注意)httpd.confを編集するときは必ずバックアップをとってからにしてください。間違った設定をしてしまうとApacheが動かなくなってしまいます。

httpd.confを編集したらApacheを再起動しなければなりません。
% /etc/init.d/httpd restart(fedora core2)
% sudo /usr/sbin/apachectl restart(Mac OSX)

2、パスワードの設定をします。(以下、ユーザ名:miyakyo、パスワード:studentsで設定をすることにします。)パスワードの設定ファイル名は任意でいいのですがここでは.htpasswdという名前で保存することにします。また保存する場所も任意です。(セキュリティの関係上ページを公開するディレクトリに保存するのはよくないと思います。ちなみに公開するディレクトリ(DocumentRoot)は /var/www/html です。)ここでは /var/www 
に保存することにします。

% cd /var/www
% htpasswd -c .htpasswd miyakyo
New password: (パスワードを聞かれるのでstudentsと入力)
Re-type new password: (もう一度入力)
Adding password for user miyakyo

これでユーザ名とパスワードが入ったファイルができました。試しにファイルをみてみましょう。

% cat .htpasswd
miyakyo:0p2ENhINdMwZ2(←暗号化されている)

パスワードの設定は以上です。

3、.htaccessを作成してアクセス制限をかけます。ここでは /var/www/html/narumi というディレクトリにアクセス制限をかけることにします。
% vi /var/www/html/narumi/.htaccess
AuthUserFile /var/www/.htpasswd
AuthName "Restricted Access Area"
AuthType Basic
Satisfy any
order deny,allow
deny from all
require user miyakyo

保存して終了します。早速アクセス制限をかけたページにアクセスしてみましょう。

ユーザ名とパスワードを入力してページが表示されたらアクセス制限が正しくできています。

(2)サーバ主設定ファイルhttpd.confによるアクセス制限
(1)で.htaccesssによるアクセス制限をしました。それと同じことをhttpd.confを編集することで実現できます。エディタでhttpd.confを開きます。
% vi /etc/httpd/conf/httpd.conf
以下の部分を探してください。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride AuthConfig FileInfo Limit(←(1)で編集した箇所)

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>

この下に以下の行を追加することと(1)で.htaccessファイルを作成することは同義です。
<Directory "/var/www/html/narumi">
AuthUserFile /var/www/.htpasswd
AuthName "Restricted Access Area"
AuthType Basic
Satisfy any
order deny,allow
deny from all
require user miyakyo
</Directory>

アクセス制限は.htaccessとhttpd.confと二通りあることがわかりました。

(3).htaccessのメリットとデメッリト

メリット .htaccessの使用はディレクトリの設定を行いたいけれど、サーバシステムのroot権限をもっていないという場合に便利です。具体的にはISP上にホームページを公開している場合などです。この場合サーバ管理はISPが行っているので、ユーザにはサーバを設定する権限はありません。
デメリット Apacheは各ディレクトリで.htaccessファイルを探します。なのでディレクトリを参照する度に.htaccessを読み込むのでパフォーマンスの低下が生じます。一方、httpd.confに書き込んだ方はApacheを起動した際に一回だけ読み込むだけでよいのです。
デメリット サーバ管理者の知らないところでユーザが設定を変更することはセキュリティの低下が生じます。

通常、.htaccessは表示されません。サーバの引っ越しなどをするときに、ファイルだけ移動して.htaccessファイルを見落としてしまうと、以前はアクセス制限がかかっていたページが新しいサーバでは制限がかからなくなってしまうことがあります。(実際にこのようなことがあったそうです。)その点、httpd.confに設定を書き込めば、引き継ぎ時に設定を変更するだけで比較的スムーズにサーバの移行ができると考えられます。

以上より、できるかぎりhttpd.confを編集してアクセス制限をする方向で進めていこうと思います。もしユーザに.htaccessによる設定をさせたくない場合は(1)で編集した箇所を
AllowOverride AuthConfig FileInfo Limit

AllowOverride None
に編集し直して下さい。そうすると.htaccessによる制限はできなくなります。

(4)ディレクトリ名、ファイル名によるアクセス制限
上記ではディレク毎にアクセス制限をしてきましたが、今回はディレクトリ名やファイル名でアクセス制限をします。(ここではアクセス制限をしたいディレクリやファイルに_onlyをつけることによってアクセス制限がかかるようにする設定で話を進めていきます。例 miyakyo_only miyakyo_only.html等)
エディタでhttpd.confを開きます。
% vi /etc/httpd/conf/httpd.conf
以下の部分を探してください。
「チルダ」が正常に表示できない場合があります。文中の ̄は「チルダ」(<shift>+<へ>キー)に直して読んで下さい。

# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files  ̄ "^¥.ht">
Order allow,deny
Deny from all
</Files>

上記の下に以下の行を追加してください。

<DirectoryMatch ".*_[Oo][Nn][Ll][Yy]">
AuthUserFile /var/www/.htpasswd
AuthName "Restricted Access Area"
AuthType Basic
Satisfy any
order deny,allow
deny from all
require user miyakyo
</DirectoryMatch>

<Files  ̄ "^.*_[Oo][Nn][Ll][Yy]¥.*">
AuthUserFile /var/www/.htpasswd
AuthName "Restricted Access Area"
AuthType Basic
Satisfy any
order deny,allow
deny from all
require user miyakyo
</Files>

保存して終了します。上部はディレクトリ名に[ _only ]がある場合(narumi_only、miyakyo_ONLY等)にアクセス制限をかけることを意味しています。下部はファイル名に[ _only ]がある場合(narumi_only.html、guest_only.cgi等)にアクセス制限をかけることを意味しています。

httpd.confを編集したらApacheを再起動しなければなりません。
% /etc/init.d/httpd restart(fedora core2)
% sudo /usr/sbin/apachectl restart(Mac OSX)

これで設定の完了です。

TOP

参考:http://httpd.apache.org/docs-2.1/ja/