もともとユーザ認証が無いページに認証を追加する
ログイン画面がないページだけど、ユーザ認証させたいようなときってありますよね。これを実現してみたいと思います。方法は2種類あります。
- htpasswdという平文認証を用いるパターン
- htdigestというMD5暗号化認証を用いるパターン
htpasswdだとネット上を平文でパスワードが流れるため、結構危険です。これはいやなので、MD5ダイジェスト認証を用いる方法で行ってみます。
まずパスワードファイルを作る。
パスワードファイルを作ってみましょう。このパスワードは、基本的にapacheからアクセスできるコンテンツの中に入れるのはセキュリティ上好ましくないので、/etc/apache2に下においてみます。
# htdigest2 -c /etc/apache2/userpasswd "User Only" testuser (パスワードファイルを新たに作成する場合) # htdigest2 /etc/apache2/userpasswd "User Only" testuser (すでにあるパスワードファイルに、エントリを追加する場合) Adding password for a in realm User Only. New password: パスワード Re-type new password: パスワード
これでtestuserさんのパスワードがこのファイルに設定されました。で、このパスワードファイルの情報を使って認証させたいページを、先ほど登場したhttp://foo.bar.com/boardにしたいとします。
apacheの設定を変更する
ここで、/etc/apache2/conf/commonapache2.confを開きます。
<Directory /home/var/www/localhost/htdocs/board> Options -Indexes FollowSymLinks MultiViews AllowOverride All SSLRequireSSL ←SSLしかゆるしません(一つ前の設定が残ってるのね) AuthType Digest ←MD5ダイジェスト認証を要求 AuthName "User Only" ポップアップするパスワード入力窓に表示させるメッセージ AuthDigestFile /etc/apache2/userpasswd ←パスワードファイルの指定 require valid-user ←パスワードファイルに記述されている全てのユーザが参照できる <IfModule mod_access.c> Order deny,allow Allow from all </IfModule> </Directory>
で、apacheを再起動します
# /etc/init.d/apache2 restart
この設定ですと、http://foo.bar.com/boardだとForbiddenですね。https://foo.bar.com/boardだと、パスワード入力窓がポップアップします。ユーザ名、パスワードを入力してOKだと画面が参照できます。NGだと、アクセスがはじかれますよね?これで完成っす♪
Page Info | |
---|---|
Page Name : | htdigestを使用してパスワード認証させてみる |
Page aliases : | None |
Page owner : | maruo |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 5674,
today: 1,
yesterday: 0
Princeps date: 2009-08-19 (Wed) 01:12:17
Last-modified: 2010-05-05 (Wed) 20:02:30 (JST) (5270d) by maruo