信頼できるデータベースは?
ある保護領域で何種類かの認証データベースを組み合わせて使いたいときはどうすればいいのだろうか? 最初の認証
で使うデータベースや、最初の認証に失敗したときに次に使うデータベースを Apache に知らせる方法は?
その答えは、認証データベースの信頼度に関係がある。任意制御モジュールには、
AuthAuthoritative のような名前の指示子があり、その名前はモジュール毎に違う。たとえば
AuthDBAuthoritative、AutDBMAuthoritative、あるいは
Anonymous_Authoritative など。
あるモジュールが信頼できるとみなされている場合、Apache がモジュールから「この人物は知らない」という応答
を得たら、さらに他のデータベースを調べることはしない。モジュールが信頼できないものである場合は、サー
バーは続けて他のモジュールを認証に使うことができる。
注:
実際はサーバー自身によって決定されるわけではない。各モジュールは自分が信頼できるかどうかを知っており
(*Authoritative 指示子の設定の有無による)、認証に失敗した場合はサーバーへ停止/継続の信号 (そ
れぞれ HTTP_UNAUTHORIZED と DECLINED) を返す。
デフォルトではユーザーが設定を変えないかぎり、モジュールは自身を信頼できるとみなすことが多い。後悔より
は安全を選ぶ考え方に基づいているわけだ。この設定を明示的に行うには
AuthAuthoritative On という行を追加する。あるいは、
AuthAuthoritative Off と設定すれば責任を分担するようにできる (各モジュールに合った指示
子を使おう!)。
Htpasswd、Htdigest、Dbmmanage ユーティリティ
これら 3 つのユーティリティは一般ユーザーが使えるツールだ。自分の Web ディレクトリ用のアクセス制御ファイル
を作成できるが、実行するには管理者である必要はない。ドキュメントは Apache のインストール時に
man/man1 サブディレクトリに収められており、次のようなコマンドで読むことができる。
% man /usr/local/web/apache/man/man1/htpasswd.1
このシリーズ記事のはじめに書いた前提事項に従えば、これら 3 つのアプリケーションは
/usr/local/web/apache/bin/ ディレクトリにあり、man ページのソースは
/usr/local/web/apache/man/man1/ にある。
htpasswd アプリケーションは、mod_auth モジュールの使用時にテキストベースの
認証データベースを作成、管理するために使われる。コマンドラインからユーザー名とオプションを入力すると、標準
入力からパスワードの入力 (確認のため 2 回) を受け付け、ユーザー名と暗号化されたパスワードが指定したテキスト
ファイルに保存される。Apache サーバーが認証用の証明情報を受け取ると、その中のパスワードは、認証データベース
へパスワードを保存する際に使用されたのと同じアルゴリズムで暗号化され、暗号化されたパスワード同士が比較され
る。実際の平文のパスワードはシステム上には残らないのだ。
htpasswd コマンドの文法は次のとおり。
htpasswd [options] pwfile username [password]
コマンドラインで次のようなアルゴリズム用フラグを指定すると、htpasswd コマンドで様々なアル
ゴリズムを使ってパスワードを暗号化することができる。
-m
- パスワードの暗号化に、Apache 独自の改良 MD5 ハッシュ アルゴリズムが用いられる。この方式
で暗号化されたパスワードは他のアプリケーションでは利用できないが、それらはバージョン 1.3.9 以降のすべて
の Apache で利用できる。したがって、Linux で使用中の
.htpasswd ファイルを AIX 、
Solaris、Windows へ持っていき、それぞれの環境で変更を加えることなく使うことができる。これは Windows と
TPF プラットフォームではデフォルトのアルゴリズムだ。
-d
- システムの
crypt() ライブラリ ルーチンを使ってパスワードを暗号化する。暗
号化されたパスワードは、システムのユーザー ファイルに保存されているパスワードと同じ程度に安全となるが、おそ
らく他のシステムへ持っていくと使えないだろう。
-s
- Netscape サーバーで利用されている SHA アルゴリズムを使ってパスワードを暗号化する。これ
はサーバー間でパスワードファイルを移動させるときに役に立つ。
使用される暗号化アルゴリズムはファイル中の各エントリ毎に適用されるので、1 つのファイル中に異なる方法で暗
号化されたパスワードを含むことも可能だ。
htpasswd ツールでは、暗号化の制御以外にも次の 2 つのフラグが指定できる。
-b
- パスワードを
stdin から読み込む代わりにコマンドラインから読み込むようにす
る。このフラグは主に Windows 環境の管理者向けだが、非対話環境 (ユーザーに CGI スクリプトでパスワードの変更
を許可するなど) でスクリプトベースのパスワード管理が可能になるので、他のプラットフォームでも役に立つだろう
。しかし、パスワードがコマンドライン上に平文で現れるため、ps コマンドの出力から他のユーザーに
パスワードを見られる可能性がある。デフォルトで実行した時のようにパスワードを 2 回入力することもないので、正
しいパスワードを入力したかどうかも確認できない。このオプションは注意して使おう。
-c
- デフォルトでは、
htpasswd は pwfile 認証データベース
ファイルがすでにあるという前提で、そのファイルを更新する。新しいファイルを作成したり、既存のファイルを完全
に上書きするには、コマンドラインで -c フラグを使うとよい。
htdigest および dbmmanage ツールも
/usr/local/web/apache/bin/ ディレクトリにあり、htpasswd アプリケーションと同
じような機能を持つ。htdigest はダイジェスト認証で用いられるテキスト データベースを管理するた
めのもので、dbmmanage は DB、DBM、GDBM、そして NDBM データベース形式をサポートしている。
dbmmanage は Perl スクリプトなので、使用するにはシステムに Perl インタプリタ (バージョン 5
以降) がインストールされている必要がある。
次は
認証データベースの保管場所
>>