Web鯖で特定の人間だけに見せたい領域がある場合パスワード認証をかけるわけだが、昔ならBasic認証を使ってパスワードをかけるようだが、安全ではないので変わりにDigest認証を使うらしい。
以下、その方法。
まず、対象のディレクトリに対する設定。
やり方は二種類あって、「設定ファイルに直接書き込む方法」と「.htaccessを使う方法」があります。
公開されているディレクトリが絶対パスが「/www」で、認証をかけたいディレクトリが「/www/test」だった場合を想定。
以下、設定ファイルを使う場合。
<Directory "/www/test"> AuthType Digest AuthName "private zone" AuthDigestDomain /test/ AuthUserFile /etc/apache2/.htdigest Require valid-user </Directory>
以下、.htaccessを使う場合。
対象のディレクトリに.htaccessを作って書き込む。
AuthType Digest AuthName "private zone" AuthDigestDomain /test/ AuthUserFile /etc/apache2/.htdigest Require valid-user
AuthNameは領域を示す文字列で、認証を求めたユーザのダイアログに表示されたり、保護する範囲(後述)を決めたりする。
AuthUserFileは認証するユーザが書かれたファイルで、コマンドで作成する。
このファイルは何処にでも置けるので、外部から見えない位置に置いておくのが良い。
Requireはアクセスできるユーザを指定する事が出来ます。
「user hoge」を指定した場合は、ユーザhogeのみがアクセス出来るようになり、「valid-user」の場合はAuthUserFileに書かれているユーザ全てがアクセス出来るようになる(「group hoge」という指定もあるが、説明が増えるのでここでは省く)。
AuthDigestDomainは対象ディレクトリを指定する所だと思うが、省略しても動く謎の設定。
説明を読んだ感じでは、保護するディレクトリのルートは最低でも指定した方が良いらしい(指定しないと、無駄なヘッダーのやり取りが発生したりする)。
他のホストと認証を共有したりする時も使用するそうだが、使う事も無いと思うので保護するルートディレクトリのみを書いておけばよいだろう。
認証するユーザを作成します。
htdigestというコマンドを使用して作成します。
ファイルの作成する場所は「/etc/apache2/.htdigest」で、領域は「private zone」、ユーザ名は「hoge」を例とします。
# htdigest -c /etc/apache2/.htdigest "private zone" hoge
新規作成時のみオプション「-c」を付けてください。
ここで領域が出てきましたが、このユーザ(hoge)が認証に成功した場合、ここで指定された領域(private zone)と設定ファイルのAuthNameで書かれた領域が一致したディレクトリは、認証の有効期限(ブラウザ終了とか)が続く限り認証作業を省略してアクセスする事が出来ます。
これを使えば細かく制御が出来そうです。