Apache認証ディレクティブとは

  • httpd.conf(または .htaccess)で、特定ディレクトリにアクセス制限をかけるためのディレクティブ群
  • BASIC認証・ダイジェスト認証の2パターンがある

ディレクティブ一覧

ディレクティブ説明
AuthType認証方式を指定
BASIC認証の場合は Basic
ダイジェスト認証の場合は Digest
AuthName認証領域名(realm)を指定
ここで指定した文字列は認証要求時にブラウザに送信され、画面に表示される
AuthUserFile作成したパスワードファイル名を指定
AuthGroupFile作成したグループファイル名を指定
Require認証済みユーザのうち、リソースへのアクセスを許可するユーザまたは所属グループを指定
・ユーザの場合 Require user <ユーザ名> <ユーザ名> …
・グループの場合 Require group <グループ名> <グループ名> …
・認証済み全員 Require valid-user

BASIC認証 と ダイジェスト認証 の違い

項目BASIC認証ダイジェスト認証
AuthTypeBasicDigest
担当モジュールmod_auth_basicmod_auth_digest
パスワードの送信Base64 エンコードのみ(暗号化ではない)MD5 ハッシュによるチャレンジ/レスポンス
パスワードファイル作成htpasswdhtdigest
安全性低い(盗聴で平文同然) → HTTPS必須BASICより高いが現在は脆弱とされる

ポイント:BASIC認証はパスワードを「暗号化」しているわけではなく、Base64でエンコードしているだけ。デコードすれば平文が見えるため、必ずHTTPSと併用する。

モジュールの2段構成:BASIC認証の mod_auth_basic は認証「方式」を担う窓口で、実際に htpasswd ファイルと照合するのは認証プロバイダ mod_authn_file。つまり BASIC は mod_auth_basic(方式)+ mod_authn_file(ファイル照合) の2段。一方ダイジェストの mod_auth_digest はプロバイダを内蔵し単体で完結する。

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

BASIC認証(htpasswd)

# 新規作成(-c)。2回目以降は -c を付けない(付けるとファイルが上書きされる)
htpasswd -c /etc/httpd/conf/.htpasswd user1

# ユーザ追加・パスワード変更(-c なし)
htpasswd /etc/httpd/conf/.htpasswd user2

# ユーザ削除(-D)
htpasswd -D /etc/httpd/conf/.htpasswd user2

htpasswd の3点セット:-c(新規作成・既存ファイルは上書きで全消し)/オプションなし(追加・パスワード変更)/-D(ユーザ削除)。

ダイジェスト認証(htdigest)

# realm(=AuthName と一致させる)を引数に取るのが特徴
htdigest -c /etc/httpd/conf/.htdigest "Restricted Area" user1

注意:htdigestrealm名 を引数に取る。この realm は AuthName の値と一致させる必要がある

設定例

BASIC認証

<Directory "/var/www/html/secret">
    AuthType Basic
    AuthName "Restricted Area"
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
</Directory>

ダイジェスト認証

<Directory "/var/www/html/secret">
    AuthType Digest
    AuthName "Restricted Area"
    AuthUserFile /etc/httpd/conf/.htdigest
    Require valid-user
</Directory>

AuthName "Restricted Area"htdigest 実行時の realm を一致させること。