連載
» 2001年10月23日 00時00分 公開

ApacheによるWebサーバ構築(10):ユーザー認証によるアクセス制限(ベーシック認証編) (1/2)

前回はIP認証を用いたアクセス制限方法を紹介した。今回は、パスワードなどの入力を要求するユーザー認証について解説しよう。ユーザーをグループ化すれば複雑な認証体系にも対応できる。

[一志達也,TIS株式会社]

ユーザー認証とは

 前回「IP認証によるアクセス制限のテクニック」の予告どおり、今回は「ユーザー認証」について解説する。ユーザー認証は、Webサイトへのアクセスに対してユーザー名とパスワードの入力を求めるアクセス制御方法である。入力されたユーザー名とパスワードが、あらかじめ登録されたものと一致すればアクセスを許可し、要求どおりのページを表示する。

 前回紹介した「IP認証」は、アクセスしてきたコンピュータのIPアドレスを認識し、許可されたIPアドレスと一致するかどうかを確認する方法だった。これがアクセスするコンピュータを限定する方法であるのに対し、今回のユーザー認証は人間を限定する。重要なポイントは、どちらも確実な方法ではないというところにある。

 ユーザー認証は、ユーザー名とパスワードが漏れてしまったら意味がないし、IP認証はなりすましやコンピュータ自体の不正使用を心配しなければならない。従って、IP認証とユーザー認証を併用するのが望ましい。

ユーザー認証の注意点

 すでにお分かりいただいていると思うが、Webサイトのユーザー認証に用いるユーザーと、サーバ上のOSユーザーとはまったく無関係である。サーバのOSユーザーとして登録されていても、ユーザー認証に用いるファイルやデータベースに登録されていなければ、そのユーザーはWebサイトにアクセスできない。もちろん、同じユーザー名で登録されていても、パスワードは異なる可能性がある。

 こうした勘違いにも注意しなくてはならないのだが、その使い方にも注意を払わなくてはならない。一度ユーザー認証を通過すると、Webブラウザを閉じるまでその情報が有効になっているという点である。

 ユーザー認証で送信したユーザー名とパスワードは、Webブラウザが記憶している。従って、たとえほかのサイトへ移動したとしても、Webブラウザを終了するまでは再度認証を受けることがない。Webブラウザを起動したまま離席したりすると、本来ならユーザー認証で拒否されるべき人がWebサイトにアクセスしてしまう可能性がある。

ユーザー認証の種類

 ユーザー認証には、ユーザーの管理方法やユーザー名/パスワードの転送方法によってさらに方法を分類することができる。

ベーシック認証とダイジェスト認証

 「ベーシック認証」は、最も標準的なユーザー認証方法である。この設定が行われたディレクトリやファイルにアクセスすると、画面のようなダイアログが表示される。この認証を用いるには、アクセスを許可するユーザーのリストを作成しなくてはならない(設定方法は後述)。

ユーザー認証が使われているページにアクセスしようとすると、ユーザー名とパスワードの入力を促すダイアログが表示される

 認証用ダイアログを表示させるには、Webブラウザ側の対応が必要になる。現在一般的に使われているWebブラウザであれば、対応していないということはまずあり得ない。ただし、入力されたユーザー名とパスワードは暗号化されることなく平文でサーバに送信される。つまり、通信を盗聴されればユーザー名やパスワードが盗まれてしまうということである。

 そこで、サーバへ送信するユーザー名とパスワードを暗号化する「ダイジェスト認証」と呼ばれる方法が用意されている。ダイジェスト認証は、HTTP 1.1の機能としてRFC 2069(http://www2.rosenet.ne.jp/~jigsaw/W3C/HTTP/spec/rfc2069.txt)で定義されている。ダイジェスト認証では、ユーザー名とパスワードをMD5で暗号化するため盗聴による漏えいを防ぐことが可能だ。

 だが、ダイジェスト認証を使うにはWebブラウザ側もこれに対応する必要がある。ところが、現時点でダイジェスト認証に対応したWebブラウザは事実上存在しない()。従って、ダイジェスト認証が用いられることはごくまれで、一般的にはベーシック認証が利用されている。

:以前は米Spygrass社のWebブラウザが唯一対応していたのだが、このWebブラウザはいつの間にか消滅してしまった。


データベース認証

 ベーシック認証では、アクセスを許可するユーザーのリストはテキストファイルで管理する。アクセスを許可するユーザーの数が少なければ、このような管理方法でも困ることはないだろう。しかし、多くのユーザーを管理する場合、ファイルで管理する方法は手間が掛かって仕方ない。

 そこで考え出された方法が、データベースに登録されたユーザーの情報を利用する「データベース認証」である。データベースを使えば、ユーザー情報のメンテナンスは容易かつ確実に行うことが可能になるからだ。

 Apacheのデータベース認証に利用できるデータベースは多岐にわたる。Berkeley DB(mod_auth_db)、PostgreSQL(mod_auth_pgsql)、MySQL(mod_auth_mysql)など、Linuxで広く利用されているフリーのデータベースはすべて利用できるようになっているから安心だ。ただし、データベースごとにモジュール(括弧内に表記)が異なるため、利用するデータベースに対応するモジュールを組み込まなくてはならない。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。