Apache2でDigest認証を設定する

 Apacheは伝統的にユーザー認証でもって指定の公開ディレクトリを保護する機能をもっていましたが、最近ではパスワードが平文で流れるBasic認証に対してパスワードを暗号化したDigest認証が一般的になってきました。(しかし、実際にはそのコンテンツ自体がPerlやphpに読み込まれる仕掛けになっているなど、スクリプト操作でもってコンテンツを保護するという技術が数多くあります。)ここではDigest認証の設定方法を紹介します。

設定の準備

1. モジュールがインストールされているか確認
 デフォルトでDigest認証モジュールはインストールされていますが一応確認しておきます。
# ls -l /etc/apache2/mods-available/auth*
...
-rw-r--r-- 1 root root 74 2009-11-14 06:58 auth_digest.load
...
というファイルが存在していたらDigest認証が利用できます。

2. Digest認証モジュールの有効化
 ApacheのデフォルトではDigest認証が無効になっています。モジュールを有効にしてDigest認証を利用できる状態にします。以下のコマンドを実行するだけです。
# a2enmod auth_digest
これでDigest認証が利用できる状態になります。

3. パスワードファイルの設定
 Digest認証ではユーザー名とパスワードをセットにしたファイルを読み込んで認証します。そのパスワードファイルを保存するディレクトリを作成します。ここでは/etc/apache2/authというディレクトリを作成します。(オーナーはrootに設定し、その他のユーザーが読み込めないようにしてください。もっともスーパーユーザーで作成した場合はオーナーがrootになりますが...。)
# mkdir /etc/apache2/auth

認証ユーザーを登録する

4. ユーザーとパスワードを登録する
 次にユーザー名とパスワードのセットを新規で作成したディレクトリ内に設定します。ユーザー名とパスワードを登録するにはhtdigestコマンドを使います。このコマンドはユーザー名と領域名(※)、またパスワードの暗号化を行ってくれます。はじめて登録を行う場合にはまだファイルが存在していないので-cオプションを使います。-cオプションではパスワードファイル名を指定します。ここではdigest_passwdに指定しています。次回からはすでにファイルが存在しているので-cオプションなしで実行できます。このコマンドはカレントディレクトリに移動してから行います。
# cd /etc/apache2/digest_passwd
(例)ユーザー名::user 領域名:: AuthPage パスワード::123456
初回は、
# htdigest -c digest_passwd AuthPage user ←ファイル名、領域名、ユーザー名を入力
Adding password for omnioo in realm auth_page.
New password: 123456 ←パスワードを入力(本来非表示)
Re-type new password:123456 ←再度パスワードを入力(本来非表示)
次回以降(user2を登録する場合)は、
# htdigest digest_passwd AuthPage user2
※領域名とは、認証する際に表示される名前です。認証の種類を特定する名前という意味でとらえてよいと思います。任意の文字を設定できますので便宜適当に設定します。

5. 作成したファイルの確認
 作成したファイルの確認をします。
# cat /etc/apache2/auth/digest_passwd
omnioo:auth_page:17ddaf1s4f965e4883a365d50aa98944
作成したユーザー名、領域名、暗号化されたパスワードが記載されているはずです。

認証ディレクトリの設定

6. 設定ファイルを作成する
 登録したユーザーがユーザー名とパスワードを利用して保護されたディレクトリにアクセスできるように設定します。ここではわかりやすいようにconf.d以下に新たに設定ファイルを新規作成します。例としてauth_digest_confというファイルを新規で作成します。vimなどエディタを立ち上げます。(vimやviの使い方は割愛)
# vim /etc/apache2/conf.d/auth_digest_conf

7. 設定ファイルを編集する
 以下のように設定します。
<Directory /home/user/public_html/auth_dir>
    AuthType Digest ←認証の種類(ここではDigestを設定)
    AuthName "AuthPage" ←設定した領域名を設定
    AuthUserFile /etc/apache2/auth/digest_passwd ←パスワードファイルのパスを設定
    Require valid-user ←登録したユーザーが認証できるようにする設定(ここではvalid-userを設定)
</Directory>
設定が終了したらApacheを再起動します。
# /etc/init.d/apache2 restart

8. 保護されたファイルにアクセスする。
/home/user/public_html/auth_dirにアクセスして設定が反映されているか確認します。(あらかじめ、
/home/user/public_html/auth_dir/index.htmlなどのファイルを作成しておきます。)パスワードを要求する画面が表示されますので、先ほど登録したユーザー名とパスワードを入力ます。

digest_auth.jpg