グループにユーザーを追加しグループ単位でアクセス制限を行う

Apache では Basic 認証などを使ってユーザーの認証を行ったあと、すべてのユーザーにアクセスを許可するか、許可するユーザーをすべて列挙してアクセスを許可することができますが、ユーザーの数が多くなってくると管理が大変です。そこでグループを必要なだけ作成し、グループにユーザーを登録しておくことでグループ単位でアクセスの許可を行うことができるます。ここでは Apache でグループを作成し、グループ単位でアクセス制限を行う手順について解説します。

(Last modified: )

グループファイルを作成する

最初にグループファイルを作成します。グループファイル作成用のコマンドは用意されていないので、テキストエディタを使って作成します。グループファイルには次のような設定を記述します。

グループ名1: ユーザー名A [ユーザー名B] ...
グループ名2: ユーザー名C [ユーザー名D] ...
・・・

任意のグループ名を記述したあと、コロン(:)のあとにグループに追加するユーザーの名前をスペースで区切って列挙します。 1 つのファイルで複数のグループを記述することができます。また複数のグループに同じユーザーが含まれていても構いません。

ユーザー名はパスワードファイルなどで作成したユーザー名です。(パスワードファイルを使って Apache で使用するユーザーを作成する方法は「Basic認証用のユーザーを作成する(htpasswdコマンド)」を参照してください)。

今回は次のようにしました。

Staff: suzuki yamada
Admin: suzuki

作成したファイルを任意の場所に保存してください。場所はどこでもいいのですが、ドキュメントルート以下ではなくドキュメントルートと同じ階層かさらに上位の階層にディレクトリを作成して保管します。今回はドキュメントルートである htdocs と同じ階層に作成済でパスワードファイルが保存されている password というディレクトリに保存しました。ファイル名は groups としました。

グループファイルを作成する(1)

グループを使ったBasic認証の設定をする

今回は Basic 認証を使ってユーザーを認証したあと、グループに対してアクセスの許可を設定してみます。グループに対してアクセスの許可を与える場合も、基本的な設定はユーザーに対してアクセスの許可を与える場合と設定は同じです。対象となるディレクトリに対して次のような設定を行います。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Basic
  AuthName "Private Directory"
  AuthBasicProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
</Directory>

※ 詳しい説明については「Basic認証を使ったアクセス制限を行う」を参照されてください。

グループを利用する場合は AuthGroupFile ディレクティブを追加します。 AuthGroupFile ディレクティブでは使用するグループファイルを指定します。絶対パスまたは ServerRoot からの相対パスで指定します。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Basic
  AuthName "Private Directory"
  AuthBasicProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
  AuthGroupFile D:/pg/Apache/Apache24/password/groups
</Directory>

AuthGroupFile ディレクティブが記述できる場所は Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride AuthConfig が設定されている必要があります。

これで設定は完了です。

アクセスを許可するグループを指定する

Basic 認証を使ったユーザー認証は、パスワードファイルに記述されているユーザーであればどのユーザーでも認証が可能です。対象のディレクトリやファイルへのアクセスをどの認証を通ったグループに許可するのかを最後に追加します。

グループにアクセスを許可する場合には、次の書式を使用します。

Require group グループA [グループB] ...

許可するグループを一つまたは複数記述していきます。例えば Staff と Admin にアクセスを許可する場合には次のように記述します。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Basic
  AuthName "Private Directory"
  AuthBasicProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
  AuthGroupFile D:/pg/Apache/Apache24/password/groups
  Require group Staff Admin
</Directory>

※ Require ディレクティブでグループを指定してアクセスを許可する書式について詳しくは「ユーザーまたはグループを指定して許可する(Require user/Require group/Require valid-user)」を参照されてください。

実際にBasic認証を行う

それでは実際に Basic 認証を設定して試してみます。今回は登録されているグループの中で Admin にだけアクセスを許可します。 httpd.conf で設定を行う場合は次の設定をいずれかの場所に記述してください。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Basic
  AuthName "Private Directory"
  AuthBasicProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
  AuthGroupFile D:/pg/Apache/Apache24/password/groups
  Require group Admin
</Directory>

.htaccess ファイルを使用する場合は、 .htaccess ファイルに次の設定を記述したあと .htaccess ファイルをアクセス制限を行うディレクトリに設置してください。

AuthType Basic
AuthName "Private Directory"
AuthBasicProvider file
AuthUserFile D:/pg/Apache/Apache24/password/passwords
AuthGroupFile D:/pg/Apache/Apache24/password/groups
Require group Admin

Apache を再起動したあと、対象のディレクトリ内にある Web ページへブラウザからアクセスします。すると次のような認証ダイアログが表示されます。

実際にBasic認証を行う(1)

アクセスの許可が与えられている suzuki でログインします。ユーザー名とパスワードを入力し「ログイン」をクリックしてください。

実際にBasic認証を行う(2)

ログインしたユーザーはアクセスが許可された Admin グループのユーザーのため、アクセス制限された Web ページを閲覧することができました。

実際にBasic認証を行う(3)

-- --

Apache でグループを作成し、グループ単位でアクセス制限を行う手順について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。