Apache/HTTPユーザー認証の設定

提供:maruko2 Note.
移動: 案内, 検索

目次


HTTP サーバとブラウザとの間でやりとりされる HTTP 認証には Basic 認証と Digest 認証の2種類ある。

Basic 認証
サーバとブラウザ間で Base64 エンコードした認証情報をやりとりする。
ほとんどのブラウザが対応している。
Digest 認証
サーバとブラウザ間で MD5 アルゴリズムでハッシュ化した認証情報をやりとりする。
未対応のブラウザがある。
IE6 ではバグがある。[1]

HTTP 認証で使用するユーザー情報は、テキスト形式で格納するか、データベース(DBM)形式で格納するか選ぶことができる。(他にも、LDAP や MySQL データベースにユーザー情報を保存することもできる。)

HTTP 認証はリクエストごとにユーザー認証をするため、ユーザー数が多い場合はテキスト形式以外のデータベース形式として保存するほうが早く動作する。

Apache 2.2 から認証関連のモジュールが追加された。(mod_authn_anon など。)

Basic 認証の設定

パスワードファイルの作成

Apache には Basic 認証用のパスワードファイルを作成するコマンドとして htpasswdhtdbm がある。

htpasswd コマンドでパスワードファイルを作成する

新規にパスワードファイルを作成する場合 -c オプションを付け、次のようにコマンドを実行する。

$ htpasswd -c /etc/httpd/conf.d/Userlist Username
New password: パスワード
Re-type new password: パスワード
Adding password for user Username

ユーザーを追加する場合は -c オプションを付けない。(パスワードを変更する場合も同じ。)

$ htpasswd /etc/httpd/conf.d/Userlist OtherUser

ユーザーとパスワードをワンライナーで追加するには -b オプションを付ける。

$ htpasswd -b /etc/httpd/conf.d/Userlist Username Password

ユーザーをパスワードリストから削除するには -D オプションを付ける。

$ htpasswd -D /etc/httpd/conf.d/Userlist Username
Deleting password for user Username

htdbm コマンドでデータベース形式のパスワードファイルを作成する

新規にパスワードファイルを作成する場合 -c オプションを付け、次のようにコマンドを実行する。

$ htdbm -c /etc/httpd/conf.d/UserDB Username
Enter password        : パスワード
Re-type password      : パスワード
Database /etc/httpd/conf.d/UserDB created.

例えば、htdbm コマンドで UserDB という名前のパスワードファイルを作成すると、UserDB.dir と UserDB.pag という2つのファイルが作成される。 htdbm で作成したパスワードファイルを指定するには、UserDB.dir や UserDB.pag と指定せず、.dir や .pag の拡張子を除いた UserDB と記述する。

ユーザーを追加する場合は -c オプションを付けない。(パスワードを変更する場合も同じ。)

$ htdbm /etc/httpd/conf.d/UserDB OtherUser

ユーザーとパスワードをワンライナーで追加するには -b オプションを付ける。

$ htdbm -b /etc/httpd/conf.d/UserDB Username

ユーザーをパスワードデータベースから削除するには -x オプションを付ける。

$ htdbm -x /etc/httpd/conf.d/UserDB Username

ユーザーの一覧を見るには -l オプションを付ける。

$ htdbm -l /etc/httpd/conf.d/UserDB

httpd.conf の設定

例えば /var/www/html/member ディレクトリにアクセスする時に認証が必要なようにするには、次のように httpd.conf に記述する。パスワードファイルの指定方法が、テキスト形式なのかデータベース形式なのかで異なる。 記述後 apache を再起動すれば有効になる。

htpasswd コマンドで作成したパスワードファイルの場合

<Directory "/var/www/html/member">
	AuthName "Member Only"
	AuthType Basic
	AuthUserFile /etc/httpd/conf.d/Userlist
	Require valid-user
</Directory>

htdbm コマンドで作成したパスワードファイルの場合

htdbm で作成したパスワードファイルを指定するには、.dir や .pag の拡張子を除いたファイル名を指定する。

<Directory "/var/www/html/member">
	AuthName "Member Only"
	AuthType basic
	AuthBasicProvider dbm
	AuthDBMUserFile /etc/httpd/conf.d/UserDB
	Require valid-user
</Directory>

HTTP 認証ディレクティブ(Basic 認証関連)

AuthName
AuthName "Member only"
認証が必要な領域の名前 Realm(レルム)を指定する。
同じホスト名のサーバであれば、同じ名前の Realm を異なるディレクトリに指定しても一度の認証だけで済むようになる。
AuthType
AuthType "Basic"
ユーザー認証の種類を指定する。
Basic か Digest のみ。
AuthBasicProvider
AuthBasicProvider dbm
Basic ユーザー認証で使用するパスワードファイルがテキスト形式なのかデータベース形式なのか指定する。
デフォルトは On なので、AuthBasicProvider を指定しない場合はテキスト形式のパスワードファイルを指定することになる。
AuthUserFile
AuthUserFile /etc/httpd/conf.d/Userlist
htpasswd で作成したテキスト形式のパスワードファイルを指定する。
AuthDBMUserFile
AuthDBMUserFile /etc/httpd/conf.d/UserDB
htdbm で作成した DBM 形式のパスワードファイルを指定する。
AuthGroupFile
AuthGroupFile /etc/httpd/conf.d/Grouplist
認証させるユーザーグループの一覧が書かれたファイルを指定する。
AuthUserFile に書かれたユーザーをグループ化する。
ユーザーグループファイルの内容例:
group_name: user1 user2 user3
group_name2: ore dare sore
Require
Require user Foo Bar
Require group Group1 Group2
Require valid-user
認証させるユーザーあるいはグループを選択する。
valid-user にすると、パスワードファイルに書かれている全てのユーザを許可する。
Satisfy
Satisfy Any
All か Any のどちらか。
Allow(アクセス制限)と Require(ユーザー認証)の両方が使われている場合に、両方とも満たすようにするか(All, デフォルト)、どちらかを満たせばよいか(Any)を指定する。

ユーザー認証とアクセス制限と組み合わせる(Satisfy の使用例)

ユーザー認証とアクセス制限を組み合わせる場合、Satisfy ディレクティブを使う。

ユーザー認証とアクセス制限のいずれかを満たせばアクセスを許可するようにするには、Satisfy Any と記述する。

Require valid-user
Order Deny,Allow
Deny from all
Allow from 192.168.0
Satisfy Any

この例の場合では、

ユーザー認証とアクセス制限のいずれも満たすようにするには、Satisfy All とするか、Satisfy ディレクティブを記述しないようにする。 (Satisfy ディレクティブはデフォルトでは All になっているため。)

脚注

  1. Digest認証 クライアント対応状況 http://x68000.q-e-d.net/~68user/net/http-auth-2.html#7

Apache 関連のページ

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数