Basic認証を用いたアクセス制御UNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、Basic認証を用いたアクセス制御の方法について解説します。

» 2008年09月26日 08時00分 公開
[ITmedia]

インターネット公開用のWebサーバを運用しています。そこで、パートナー用ページを作成することになり、ユーザーのアクセス制限が可能なページを作りたいと考えています。Apacheのみで実行できる制御方法を教えてください。WebサーバはApache 1.3.29をインストールしています。


Apacheでは、Basic認証やホストに基づいたグループ承認といった方法を利用してアクセス制御を行えます。質問にあるような、外部公開サーバのパートナー用ページの場合には、Basic認証を使用するといいでしょう。

Basic認証の設定方法

 Basic認証では、特定のディレクトリやファイルに対し、IDおよびパスワードの入力を求めるユーザーの認証を実施できます。認証がかかっているファイルにアクセスすると、IDとパスワードの入力を求めるダイアログが表示されます。ディレクトリに対して制限をかけると、その配下のすべてのディレクトリおよびファイルにアクセスした際に認証が発生します。

 ここでは、パートナー用ページを/usr/local/apache/htdocs/partner配下に作成し、このディレクトリ内のファイルへのアクセスを、管理者とパートナーのみに制限する方法を説明します。

httpd.confの設定

 httpd.confにリスト1の設定を追記します。AuthUserFileとAuthGroupFileは、認証情報が登録されるファイルですので、HTTPアクセスで参照されないよう、DocumentRootに設定したディレクトリ(初期設定は/usr/local/apache/htdocs)より上位に配置する必要があります。


<Directory "/usr/local/apache/htdocs/partner">
AuthType Basic             ←ユーザー認証の種類
AuthName "Partner Only"
↑認証領域の名前。ここで記述した文字列は認証ダイアログに表示される
AuthUserFile /usr/local/apache/conf/.htpasswd
↑認証に使用するIDおよびパスワードの登録ファイル
AuthGroupFile /usr/local/apache/conf/.htgroup
↑グループ設定ファイル。ユーザーをグループ化しない場合はこの行を記述しない
Require group admins partner
↑認証後アクセスを許可されるユーザーの指定※
</Directory>

※ユーザー指定の際の書式 Require valid-user :認証ファイルに登録されたすべてのユーザーを指定 Require user user1 user2 :ユーザー指定(user1、user2) Require group group1 group2 :グループ指定(group1、group2に属するユーザー)
リスト1 httpd.confに追記する設定内容

認証ユーザーファイルの作成

 リスト1のAuthUserFileで指定した認証ユーザーの登録ファイル(ここでは/usr/local/apache/conf/.htpasswd)を作成します。この認証ユーザーファイルは、ユーザーIDとパスワード情報を格納するもので、パスワード情報は暗号化されたものを登録する必要があります。このため、エディタなどで直接ファイルを編集することはできず、htpasswdコマンドを使用してパスワード情報を作成します。htpasswdコマンドは、Apacheのパッケージに標準で含まれているコマンドで、/usr/local/apache/bin/htpasswdとして存在します。

 それでは、IDをuser1、パスワードをuser1としてユーザーを登録してみましょう(実行例1)。「-c」オプションは、ユーザー登録ファイルの新規作成を行います。次のユーザー登録からは、「-c」オプションをつけずにコマンドを実行します。ユーザー登録ファイル(/usr/local/apache/conf/.htpasswd)にはリスト2のようにIDおよびパスワード情報が格納されます。


・最初のユーザーの場合
# /usr/local/apache/bin/htpasswd -c /usr/local/apache/conf/.htpasswd user1
New password:         ←user1と入力(入力した情報は表示されない)
Re-type new password: ←user1と入力(入力した情報は表示されない)
Adding password for user user1
・2人目以降のユーザーの場合
# /usr/local/apache/bin/htpasswd /usr/local/apache/conf/.htpasswd user2

実行例1 ユーザーの登録方法

admin1:bu11suDItf5gA
admin2:E6MuWZGoDUWW2
user1:K.Bdbvw5wL1f.
user2:oentzHLq84q6I

リスト2 ユーザー登録ファイル(/usr/local/apache/conf/.htpasswd)内のIDおよびパスワード情報

グループファイルの作成

 ユーザーの登録数が多い場合、ユーザーをグループに登録し、グループごとにアクセスの可否を制御すると便利です。またユーザーは、複数のグループに所属させることもできます。ここではリスト2の情報を基に、パートナーページにアクセス可能なグループadminsとpartnersを作成してみます。/usr/local/apache/conf/.htgroupファイルを新規作成し、それぞれのグループに次のようにユーザーを登録します。


admins:admin1 admin2
partners:user1

 複数のユーザーを登録する場合は、スペースで区切ります。ここでApacheを再起動すると、パートナー用ページを参照する際に認証が発生するようになります。この設定では、管理者(ユーザーadmin1、ユーザーadmin2)と、パートナー(ユーザーuser1)のみが、認証を通過後パートナー用ページを参照できます。

 ユーザーuser2は、認証ユーザーとしてリスト2に登録されていますが、上述したグループファイルでアクセスを許可されているどのグループにも所属していません。そのため、正しいIDとパスワードを入力してもパートナー用ページを参照することはできません。認証ユーザーやグループ設定の追加・変更を行った際は、デーモンの再起動は必要ありません。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ