Basic認証を使ったアクセス制限を行う
Apache ではユーザーに対して Basic 認証を行い、認証が通ったユーザーだけにディレクトリやファイルに対するアクセスを許可することができます。ここでは Basic 認証を使ったアクセス制限を行う手順について解説します。
(Last modified: )
Basic認証の方式を設定する
Apache で Basic 認証を行うには次のディレクティブを設定する必要があります。
AuthType 認証方式 AuthName 認証領域 AuthBasicProvider 認証プロバイダ AuthUserFile パスワードファイル
AuthType ディレクティブでは認証方式を選択します。設定可能な値は None, Basic, Digest, Form の 4 つで今回は Basic 認証を使用するので Basic を指定します。
AuthName ディレクティブでは認証領域を選択します。一度認証が通ったあと同じ認証領域の名前が設定されている Basic 認証が必要なページへアクセスしたときに認証が不要となります。またここで設定された値が認証用のダイアログに表示されます(ただし Chrome では表示されませんでした)。
AuthBasicProvider ディレクティブでは認証プロバイダを選択します。デフォルトは file となっており今回のようにパスワードファイルを使用する場合は設定は不要です。 dbm 形式のパスワードファイルを使用する場合は dbm を指定してください。他に dbd や ldap が指定できます。
AuthUserFile ディレクティブでは使用するパスワードファイルを指定します。絶対パスまたは ServerRoot からの相対パスで指定します。
AuthType 、 AuthName 、 AuthBasicProvider 、 AuthUserFile の 4 つのディレクティブが記述できる場所は Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride AuthConfig が設定されている必要があります。
※ Basic 認証で使用するパスワードファイルを事前に作成しておいてください。作成方法については「Basic認証用のユーザーを作成する(htpasswdコマンド)」を参照されてください。
パスワードファイルは c:/pg/Apache24/password/ ディレクトリの中に passwords という名前でファイルを作成しました。ユーザーを一人追加してあります。
今回は次のような記述を行います。
AuthType Basic AuthName "Private Directory" AuthBasicProvider file AuthUserFile c:/pg/Apache24/password/passwords
Basic 認証を行う対象のディレクトリまたはファイルに対して上記の設定を記述します。今回はドキュメントルートの下の private ディレクトリに対して設定します。
httpd.conf ファイルを開き次のような記述を行いました。
<Directory "c:/pg/Apache24/htdocs/private"> AuthType Basic AuthName "Private Directory" AuthBasicProvider file AuthUserFile c:/pg/Apache24/password/passwords </Directory>
アクセスを許可するユーザーを指定する
Basic 認証を使ったユーザー認証は、パスワードファイルに記述されているユーザーであればどのユーザーでも認証が可能です。対象のディレクトリやファイルへのアクセスをどの認証を通ったユーザーに許可するのかを最後に追加します。
特定のユーザーにだけ許可する場合には、次の書式を使用します。
Require user ユーザーA [ユーザーB] ...
許可するユーザーを一人または複数記述していきます。例えば suzuki と yamada にアクセスを許可する場合には次のように記述します。
<Directory "c:/pg/Apache24/htdocs/private">
AuthType Basic
AuthName "Private Directory"
AuthBasicProvider file
AuthUserFile c:/pg/Apache24/password/passwords
Require user suzuki yamada
</Directory>
認証を通ったすべてのユーザーに許可する場合には、次の書式を使用します。
Require valid-user
実際には次のように記述します。
<Directory "c:/pg/Apache24/htdocs/private">
AuthType Basic
AuthName "Private Directory"
AuthBasicProvider file
AuthUserFile c:/pg/Apache24/password/passwords
Require valid-user
</Directory>
※ Require ディレクティブでユーザーを指定してアクセスを許可する書式について詳しくは「ユーザーまたはグループを指定して許可する(Require user/Require group/Require valid-user)」を参照されてください。
実際にBasic認証を行う
それでは実際に Basic 認証を設定して試してみます。今回は登録されているユーザーの中で suzuki にだけアクセスを許可します。 httpd.conf で設定を行う場合は次の設定をいずれかの場所に記述してください。
<Directory "c:/pg/Apache24/htdocs/private"> AuthType Basic AuthName "Private Directory" AuthBasicProvider file AuthUserFile c:/pg/Apache24/password/passwords Require user suzuki </Directory>
もし .htaccess ファイルを使用する場合は、 .htaccess ファイルに次の設定を記述したあと .htaccess ファイルをアクセス制限を行うディレクトリに設置してください。
AuthType Basic AuthName "Private Directory" AuthBasicProvider file AuthUserFile c:/pg/Apache24/password/passwords Require user suzuki
Apache を再起動したあと、対象のディレクトリ内にある Web ページへブラウザからアクセスします。
http://localhost/private/
すると次のような認証ダイアログが表示されます。
アクセスの許可が与えられている suzuki でログインします。ユーザー名とパスワードを入力し「ログイン」をクリックしてください。
アクセス制限された Web ページを閲覧することができました。
なおユーザーとしては登録されていてもアクセス許可が与えられていないユーザーでログインした場合、再び認証ダイアログの画面が表示されます。
-- --
Basic 認証を使ったアクセス制限を行う手順について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。