【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

第10回 ユーザー認証によるアクセス制限(ベーシック認証編)

一志 達也<ichishi@pochi.tis.co.jp>
TIS株式会社
2001/10/23

ベーシック認証の設定

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

 ベーシック認証を行うには、ユーザー認証に利用するファイル(パスワードファイル)を作成し、ユーザーを登録するところから始める。ユーザー登録には、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プログラムを使うとしても危険すぎて現実的ではない。

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

2/2

Index
ApacheによるWebサーバ構築
  ユーザー認証とは
 ユーザー認証の注意点
  ユーザー認証の種類
 ベーシック認証とダイジェスト認証
 データベース認証
ベーシック認証の設定
 パスワードファイルの作成
 グループファイルの作成
 設定ファイルの編集
  次回はデータベース認証

連載 ApacheによるWebサーバ構築


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています