ブラウザであるページにアクセスした場合に、ユーザ名とパスワードで認証を求められるページの設定方法です。
Apacheの設定で、basic認証とdigest認証の2通りの設定方法を説明します。
なお、以下は CentOS6 での設定です。
Ubuntuでは /etc/httpd/conf/httpd.conf の代わりに /etc/apache2/sites-available/ 下のファイルにて設定して下さい。
basic認証の場合
認証用ユーザを作成します。
パスワード入力を求められるので、設定するパスワードを入力します。
なお、はじめてパスワードファイルを作成する場合は、-c オプションを指定します。2回目以降は -c 無しで実行して下さい。
htpasswd [-c] パスワードファイル ユーザ名
例えば始めてパスワードファイルを作成する場合で、ユーザ test1 を作成す場合は次のように -c 付きで実行します。
htpasswd -c /etc/httpd/.htpasswd test1
既にパスワードファイルが存在している場合は、-cは付けずに実行します。
htpasswd /etc/httpd/.htpasswd test2
認証用ユーザを作成したら、Apacheの設定を行います。
サンプルとして、認証が必要なページの URL は
http://localhost/auth-basic/
のような、auth-basic 以下とします。
ディレクトリ auth-basic を作成します。
mkdir -p /var/www/html/auth-basic
/etc/httpd/conf/httpd.conf に設定を追加します。
<Directory "/var/www/html/auth-basic"> AuthType Basic AuthName レルム名 AuthUserFile パスワードファイル Require valid-user または Require user ユーザ1 ユーザ2 ... </Directory>
AuthType
Basic認証の場合は、AuthType に Basic を指定します
AuthName
レルム名を指定します。レルム名はユーザが任意に決めます。
レルム名の詳細は後ほど説明します。
また、レルム名はブラウザでのユーザ名/パスワード入力ダイアログに表示されます。
ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に該当する表示です。
AuthUserFile
認証用ユーザの作成時に指定したパスワードファイルを記述します。
Require
valid-user を指定すると、認証ユーザはパスワードファイルに設定されている全ユーザが対象になります。
user に続けてスペース区切りでユーザを列挙すると、(パスワードファイルに設定されている中から)指定されたユーザのみ認証の対象となります。
例えば、パスワードファイルに設定されている全ユーザを認証する場合は以下のようになります。
<Directory "/var/www/html/auth-basic"> AuthType Basic AuthName "Protected Area" AuthUserFile /etc/httpd/.htpasswd Require valid-user </Directory>
ユーザ test1 , test2 のみ認証する場合は以下のようになります。
Directory "/var/www/html/auth-basic" AuthType Basic AuthName "Protected Area" AuthUserFile /etc/httpd/.htpasswd Require user test1 test2 </Directory>
最後に Apache に設定ファイルを読み込ませます。
/etc/init.d/httpd reload
これでWEBサーバ上で http://localhost/auth-basic/ にアクセスすると、次のようなダイアログが出てID/パスワードを要求されるようになります。
digest認証の場合
認証用ユーザを作成します。
パスワード入力を求められるので、設定するパスワードを入力します。
なお、はじめて作成する場合は、-c オプションを指定します。2回目以降は -c 無しで実行して下さい。
htdigest [-c] パスワードファイル レルム名 ユーザ名
レルム名はユーザが任意に決めます。
レルム名の詳細は後ほど説明します。
また、レルム名は、ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX の箇所に表示されます。
なお、レルム名に空白を含む場合は、”で括って指定して下さい。
例えば始めてパスワードファイルを作成する場合で、ユーザ test1 を作成す場合は次のように -c 付きで実行します。
htdigest -c /etc/httpd/.htdigest 'Protected Area' test1
既にパスワードファイルが存在している場合は、-cは付けずに実行します。
htdigest /etc/httpd/.htdigest 'Protected Area' test2
認証用ユーザを作成したら、Apacheの設定を行います。
サンプルとして、認証が必要なページの URL は
http://localhost/auth-digest/
のような、auth-digest 以下とします。
ディレクトリ auth-digest を作成します。
mkdir -p /var/www/html/auth-digest
/etc/httpd/conf/httpd.conf に設定を追加します。
<Directory "/var/www/html/auth-digest"> AuthType Digest AuthName レルム名 AuthUserFile パスワードファイル Require valid-user または Require user ユーザ1 ユーザ2 ... </Directory>
AuthType
Digest認証の場合は、AuthType に Digest を指定します
AuthName
レルム名を指定します。レルム名はパスワードファイル作成時に指定したものと同じものを指定して下さい。
レルム名の詳細は後ほど説明します。
また、レルム名はブラウザでのユーザ名/パスワード入力ダイアログに表示されます。
ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に該当する表示です。
AuthUserFile
認証用ユーザの作成時に指定したパスワードファイルを記述します。
Require
valid-user を指定すると、認証ユーザはパスワードファイルに設定されている全ユーザが対象になります。
user に続けてスペース区切りでユーザを列挙すると、(パスワードファイルに設定されている中から)指定されたユーザのみ認証の対象となります。
例えば、パスワードファイルに設定されている全ユーザを認証する場合は以下のようになります。
<Directory "/var/www/html/auth-digest"> AuthType Digest AuthName "Protected Area" AuthUserFile /etc/httpd/.htdigest Require valid-user </Directory>
ユーザ test1 , test2 のみ認証する場合は以下のようになります。
Directory "/var/www/html/auth-digest" AuthType Digest AuthName "Protected Area" AuthUserFile /etc/httpd/.htdigest Require user test1 test2 </Directory>
最後に Apache に設定ファイルを読み込ませます。
/etc/init.d/httpd reload
これでWEBサーバ上で http://localhost/auth-basic/ にアクセスすると、次のようなダイアログが出てID/パスワードを要求されるようになります。
レルム名について
レルム名は認証領域を示す名前です。
あるレルム名が設定された認証領域で一旦ユーザ名/パスワードで認証された後は、同じレルム名の認証領域へのアクセスでは、再度ユーザ名/パスワードは聞かれなくなります。
例えば /etc/httpd/conf/httpd.conf で次のように設定したとします。
<Directory "/var/www/html/auth-digest1"> AuthType Digest AuthName "APPLE" AuthUserFile /etc/httpd/.htdigest Require valid-user </Directory> <Directory "/var/www/html/auth-digest2"> AuthType Digest AuthName "APPLE" AuthUserFile /etc/httpd/.htdigest Require valid-user </Directory> <Directory "/var/www/html/auth-digest3"> AuthType Digest AuthName "ORANGE" AuthUserFile /etc/httpd/.htdigest Require valid-user </Directory>
auth-digest1 と auth-digest2 はレルム名(AuthNameで指定)が “APPLE” で同じです。
従って、auth-digest1 で一度ユーザ名/パスワードで認証されると、auth-digest2 へのアクセスでは、再度ユーザ名/パスワードを聞かれること無くアクセス出来ます。
一方、auth-digest1 と auth-digest3 では、レルム名(AuthNameで指定)が “APPLE” と “ORANGE” で異なります。
この場合は、auth-digest1 で一度ユーザ名/パスワードで認証しても、auth-digest3 へのアクセスで再度ユーザ名/パスワードが聞かれます。
このように、認証領域は Directoryディレクティブで指定するディレクトリ単位では無く、レルム単位となります。
レルム名は、ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に表示されますが、単なる表示内容ではないことに注意して下さい。
参考
Apache/ベーシック認証の設定 – ウェブ関連技術調査
ベーシック認証を設定する(AuthType) – アクセス制限 – Apache入門
@IT:Apacheでユーザー認証を行うには(Basic認証編)
@IT:Apacheでユーザー認証を行うには(Digest認証編)
PasswordBasicAuth – Httpd Wiki
htdigest – manage user files for digest authentication – Apache HTTP Server
mod_auth_digest – Apache HTTP Server
認証、承認、アクセス制御 – Apache HTTP サーバ
コメント