Apache/HTTPユーザー認証の設定
目次 |
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 認証用のパスワードファイルを作成するコマンドとして htpasswd と htdbm がある。
- htpasswd コマンドは、テキスト形式のパスワードファイルを作成することができる。
- htdbm コマンドは、データベース形式(DBM形式)のパスワードファイルを作成することができる。
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 認証関連)
- HTTP 認証は、以下のディレクティブを組み合わせて設定する。
- これらディレクティブは <Directory> <Location> <File> <Proxy> の各コンテナの中、および .htaccess ファイルで使用することができる。
- 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
この例の場合では、
- 192.168.0.0/24 のネットワークからはユーザー認証無しにアクセスを許可する。
- 192.168.0.0/24 のネットワーク以外からは、ユーザー認証すればアクセスを許可する。
ユーザー認証とアクセス制限のいずれも満たすようにするには、Satisfy All とするか、Satisfy ディレクティブを記述しないようにする。 (Satisfy ディレクティブはデフォルトでは All になっているため。)
脚注
- ↑ Digest認証 クライアント対応状況 http://x68000.q-e-d.net/~68user/net/http-auth-2.html#7
Apache 関連のページ
- Apache/HTTP TRACE の無効化 . . カテゴリ: Apache | セキュリティ
- Apache/SSL自己証明書の作成とmod sslの設定 . . カテゴリ: Apache | セキュリティ
- Apache/WebDAVの設定 . . カテゴリ: Apache | ファイルサーバ
- Apache/アクセス制御 . . カテゴリ: Apache | アクセス制御
- Apache/バーチャルホストのログをリモートのrsyslogに集約する . . カテゴリ: Apache | syslog
- Apache/リバースプロキシ . . カテゴリ: Apache
- Apache/ログのローテーション . . カテゴリ: Apache
- Let's EncryptのSSLサーバー証明書を、使用するサーバーとは別のマシンで作成する . . カテゴリ: Apache | セキュリティ
- ModSecurity のインストール . . カテゴリ: Apache | Webアプリ | セキュリティ
- RT Request Tracker を CentOS 5 にインストールする . . カテゴリ: Apache | CentOS | Webアプリ | メール
- WAF-FLE(ModSecurity Console)のインストールとセットアップ . . カテゴリ: Apache | Webアプリ | セキュリティ
- eAccelerator をインストールする . . カテゴリ: Apache | Webアプリ
- ベリサイン SSL サーバ証明書取得から apache mod ssl 設定までの流れ . . カテゴリ: Apache | セキュリティ