WEBの勉強ノート
Loading

会員専用ページに、Apache の Basic 認証を使う

2010 年 1 月 13 日 水曜日

ほとんどのレンタルサーバーでは Basic 認証を GUI で設定できるツールを用意されていると思いますが、そういった
ツールがない環境で設定する機会があったので、メモしておきます。作業はssh で接続して行いました。

設定方法

.htaccess ファイルの作成

[centos@localhost temp]$ vi .htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/www/html/temp/.htpasswd
Require user test

.htpasswd ファイル(パスワードファイル)の作成

[centos@localhost temp]$ htpasswd -c /var/www/html/temp/.htpasswd test
New password:
Re-type new password:
Adding password for user test

以上の手順だけで、ドキュメントルート以下の temp ディレクトリに Basic 認証をかけることができました。

Basic 認証を昨日させているモジュール

Apache 2.1 より前のバージョンでは、mod_auth によって Basic 認証機能が実装されている模様。そのため、Basic 認証を使うには、httpd.conf で mod_auth.so が読み込まれていることが必要。

LoadModule auth_module modules/mod_auth.so

Apahe 2.1 以降では、mod_auth_basic モジュールで実装されているようです。今回は Apache 2.0 を使っているので、こちらは確認していません。モジュールのインストールから始める必要のある環境は、通常の WEB サーバーであれば、ほとんどないのではないかと。

その他必要な設定

Basic 認証の設定を書き込む場所は、Apache の設定ファイルである httpd.conf に直接書くか、該当のディレクトリに .htaccess ファイルを設置する方法の 2通り。.htaccess を使う場合は、httpd.conf に以下の設定が必要です。

AllowOverride AuthConfig

もちろん、AllowOverride All でも。 普段は、httpd.conf を触ることはしないので、.htaccess を設置しました。 httpd.conf で設定を行う場合でも、設定項目は同じです。

使用したディレクティブ

AuthType : ユーザ認証の種類を指定。BasicかDigestを指定。
AuthName : ここで AuthName に指定した文字列が、大部分のブラウザのパスワードダイアログに表示される。
AuthUserFile : 認証に使用するユーザとパスワードの一覧が格納されている、テキストファイルの名前を設定。
Require : 認証に使用するユーザー名を指定。

htpasswd コマンド

パスワードファイルの作成に必要なコマンド。Apache に付属します。以下の構文で実行します。

htpasswd -c Filename username

書式が分かれば手入力でも作成はできるが、通常はこのコマンドを使う。主なオプションは、 以下の通り。

-c : 新しいパスワードファイルを作成。同名のパスワードファイルがすでに存在する場合は、既存の内容が上書きされる。
-n : テスト実行用のオプション。他のオプションなどの構文エラーがないかなどの確認に用いる。-c と一緒に使うことはできない。
-m : パスワードをファイルに書き込む際、MD5 でハッシュした値を書き込みます。
-d : パスワードをファイルに書き込む際、CRYPT でハッシュします(デフォルト)。
-p : パスワードをファイルに書き込む際、ハッシュせずに、プレーンなテキストで書き込みます。
-s : パスワードをファイルに書き込む際、SHA でハッシュします。
-D : ユーザーを削除します。

httpd.conf – ServerName

2009 年 5 月 13 日 水曜日

まだ、テスト環境しか触ったことのない状態なので、httpd.conf の設定がよくわかっていません。今回の ServerName も、適当なものを設定しても動作するため、何のために設定するのか分かっていませんでした。

それが、@IT : 第5回 絶対外せない基本設定とサーバの動作 を読んで、ようやく意味がわかりました。

サーバが返すメッセージのすべてにServerNameディレクティブに指定されたホスト名が使われるということである。

@IT : 第5回 絶対外せない基本設定とサーバの動作 

@IT で取り上げられている例は、http://hogehoge/manual のように最後のスラッシュをとってアクセスした際、サーバーは manual がディレクトリではなくファイルと認識するが、同名のディレクトリがあることを検知して 301 エラーを返し、その後 manual ディレクトリに接続する動作を挙げている。

まずポイントになるのは、Apacheから301番のHTTPエラーが返されているところだ。Apacheは、manualというファイルが存在しないことを確認しているので、本来ならば404番を返すはずである。しかし、manualというディレクトリなら存在することを検出したので301番を返している。

その後、URLの最後にスラッシュを付けてディレクトリへのアクセスを試みている。上記では省略したが、エラーページを表示するHTMLの中にも、最後にスラッシュを付けてアクセスするようメッセージとリンクが書き込まれている。

ところが、Webブラウザはこのエラーページを表示しない。その代わりに、サーバが指定したURLに再度アクセスを試みるのである。ここに第2のポイントがある。注意深く見ると、Apacheが指定したURLには、ServerNameディレクティブに設定されたホスト名が使われている。つまり、「http://cinderella/manual」ではなく「http://hogehoge/manual/」にアクセスするようにとしているのだ。このURLにWebブラウザがアクセスするとどうなるのか。当然ながらそのホスト名は名前解決できないから、Webブラウザはアクセスできない。ややこしい説明になってしまったが、サーバが返すメッセージのすべてにServerNameディレクティブに指定されたホスト名が使われるということである。

結果として、「サーバが返すメッセージのすべてにServerNameディレクティブに指定されたホスト名が使われるということである」 と説明している。