連載
» 2001年10月23日 00時00分 UPDATE

ApacheによるWebサーバ構築(10):ユーザー認証によるアクセス制限(ベーシック認証編) (2/2)

[一志達也,TIS株式会社]
前のページへ 1|2       

ベーシック認証の設定

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

 ベーシック認証を行うには、ユーザー認証に利用するファイル(パスワードファイル)を作成し、ユーザーを登録するところから始める。ユーザー登録には、Apacheに含まれる「htpasswd」プログラムを利用する。このプログラムは、apachectlなどと同じく、Apacheをインストールしたディレクトリ(/usr/local/apacheなど)のbinの中に保存されている。

 htpasswdにオプションパラメータ「-c」を付けて実行すれば、パスワードファイルが新規に作成される。ここでのポイントは、パスワードファイルを作成するディレクトリやファイルの名前は自由に決定できること。パスワードファイルは、システムの中で複数個作成・管理できるということである。後述するが、認証に使用するパスワードファイルは自由に設定できる。従って、複数のパスワードファイル(例えば部門別など)を作成し、認証を行うディレクトリ別に利用するファイルを切り替えるような運用も可能なのだ。

 話が少し横道にそれてしまったが、まずは1つパスワードファイルを作成してみよう。通常、こうしたコマンドはrootユーザーで実行する。その構文は以下のとおりである。

# htpasswd -c /usr/local/apache/.htpasswd 
ichishi
New password:
Re-type new password:
Adding password for user ichishi

 このように、パスワードファイル名と最初に作成するユーザーの名前を指定してhtpasswdプログラムを実行する。前述のとおり、-cを付けることでファイルが新規に作成される。

 パスワードファイルを保存するディレクトリは自由に決めて構わないが、Webサイトとして公開していないディレクトリにすることをお勧めする。なぜならば、公開しているディレクトリを指定すると、その内容を読み取られる可能性があるからだ。もちろん、正確にURLで指定しなければ読み取られることはないが、わざわざ自ら弱点を作ることもない。

 また、ファイル名は前述の実行例のように、先頭に「.」(ピリオド)を付けることをお勧めする。これは隠しファイルにすることを意味し、ファイルの存在を容易に悟られないようにする効果が得られる。

 パスワードファイルを作成したら、念のために権限(パーミッション)を確認しておこう。設定にもよるが、デフォルトのApacheはnobodyユーザーで実行される。作成したパスワードファイルは、Apacheを実行するユーザーで読み取れなければならない。ファイルの権限を確認し、644もしくは444に設定しておくこと。すべてのユーザーに対する読み取り権限さえあれば、ファイルのオーナーはだれでも構わない。

 次に、でき上がったファイルの内容を確認してみよう。ここでは、「ichishi」というユーザーを登録したから、ファイルの内容は以下のようになっている。

ichishi:s33Gaxq46QEWU

 ユーザー名とともに、暗号化されたパスワードが記録されている。暗号化されているから、読み取られたからといってすぐにログインできるようになるわけではないが、やはり危険であることは意識しておきたい。

 後は、このファイルに必要なだけユーザーを追加する。追加するときは、htpasswdを-cオプションを付けずに実行する。-cを付けるとファイルの内容が上書きされてしまうので注意していただきたい。

 なお、すでに作成したユーザーのパスワードだけを変更する場合にもhtpasswdを使用する。既存のユーザーを指定して実行した場合、パスワードだけが更新される。

# htpasswd /usr/local/apache/.htpasswd 
guest
New password:
Re-type new password:
Adding password for user guest

グループファイルの作成

 ユーザーを追加し、パスワードファイルが以下のような状態になったとしよう。

ichishi:s33Gaxq46QEWU
guest:n5i.VSkqBbVWk
yamamoto:alcQzciyFcGh6
yano:YQikAesFK2vXc
shibata:uxW2pkKgJevQ6
shigematsu:Zjn8dkVfGEKsk
yoshida:dnZWeTDyFWt1Q
tanaka:BvrSJlQpsllu2

 このようにユーザーが増えてくるとユーザーをグループ化して、あるグループにだけアクセス権を与え、ほかのユーザーには権利を与えたくない、そうしたニーズも出てくるだろう。特に、イントラネットなどでは職務権限に応じたアクセス権の設定が求められる。

 グループを作るには、以下のようなファイルを作成する。

manager:yamamoto yano
leader:ichishi shibata
member:shigematsu yoshida tanaka
guest:guest

 グループ名と「:」(コロン)に続いて、そのグループに所属させるユーザーをスペースで区切って列挙する。

グループ名:ユーザー名 ユーザー名 ユーザー名……

 グループに所属するユーザーの数に制限はないし、1人のユーザーを複数のグループに所属させても構わない。部署単位や役職単位などに応じて柔軟な設定が可能だ。

 グループファイルのファイル名や保存場所は何でも構わないが、パスワードファイルと同じディレクトリに「.groups」などのファイル名で保存するといいだろう()。

:先頭に「.」を付ける理由は前述のとおり。


設定ファイルの編集

 作成したパスワードファイルとグループファイルを使って、実際にアクセス制限を設定してみよう。

 IP認証と同じく、設定はhttpd.conf(Apacheの設定ファイル)か.htaccess(ディレクトリ別のアクセス制限設定ファイル)に制限を書き加える。まずはhttpd.confを例に、/usr/local/apache/htdocs/ディレクトリへのアクセス制限を設定してみよう。

<Directory "/usr/local/apache/htdocs/">
AuthUserFile    /usr/local/apache/.htpasswd
AuthGroupFile   /dev/null
AuthName        "Please 
Enter Your Password"
AuthType        Basic
Require valid-user
</Directory>

 <Directory>〜</Directory>は、前回も説明したようにあるディレクトリに対する設定が記述されるディレクティブである。ここではアクセス制限の部分を抜粋しているが、実際にはほかの設定も記述されている。制限内容はおおよそ想像がつくと思うが、個別に解説していくことにする。

  • AuthUserFile
     作成済みのパスワードファイルを指定する。複数のパスワードファイルが存在する場合は、この認証設定で利用したいものを指定する。
  • AuthGroupFile
     作成済みのグループファイルを指定する。利用しない場合は、この例のように「/dev/null」を指定しておけばよい。
  • AuthName
     認証画面に表示されるメッセージと思えばよい。
  • AuthType
     認証方式の指定。ベーシック認証なら「Basic」、ダイジェスト認証なら「Digest」と指定する。
  • Require
     この制限で、アクセスを許可するユーザーやグループを指定する。「valid-user」とは、パスワードファイルに含まれるすべてのユーザーに許可することを意味する。個別に指定する場合には、アクセスを許可するユーザー名やグループ名をスペースで区切って指定する。

 前回も紹介したとおり、.htaccessを使う場合も記述内容はまったく同じだ。ただし、<Directory>〜</Directory>は必要なく、純粋に設定内容だけを記述する。httpd.confと.htaccessの記述方法の違いについては、前回を参照していただきたい。

 また、httpd.confを書き換えた場合はApacheを再起動しないと設定が有効にならない。.htaccessは、再起動しなくても内容が反映される。この点にも注意しておいてほしい。

次回はデータベース認証

 以上で、IP認証とベーシック認証を併用してアクセス制限を設けることが可能になった。しかし、ユーザーのリストを管理するのは面倒だし、パスワードの変更にいちいちコマンドを必要とするのもうっとうしい。何より、ユーザー自身にパスワードを変更させるため、CGIプログラムを使うとしても危険すぎて現実的ではない。

 こうした問題を解決するには、「データベース認証」を利用するのが最も効果的な方法である。次回はデータベース認証について、じっくりと解説することにする。


前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。