■Apacheで認証をしたい。
[概 要]
Apacheで、サーバ上の特定ディレクトリをパスワード保護するために認証をしたい。
[対 策]
Apacheでは2つの認証方式があり、LinuxでもWindowsでも対応可能である。
認証方式にはBasic認証とDigest認証の二つがあり、その違いは以下のとおりである。
- Basic認証
Basic認証は、対応しているブラウザも多く導入しやすいが、認証情報には一般的にはプレインテキストを
MIME エンコードしたものが使用されるので、パケットを盗聴されると簡単にデコードできてしまうという欠点がある。但し、MD5での暗号化も可能であり、全くセキュリティに弱いというわけではない。
- Digest認証
HTTP/1.1対応のブラウザでのみ利用可能であり、主要なブラウザは対応している。但し相手の問題なので不特定の場合は、Basic認証+SSLのほうが無難である。認証情報はMD5で暗号化され、チャレンジ・レスポンス型で認証されるので、セッション開設ごとに値が変わるので暗号解読が困難となり、パケット盗聴されても解読はかなり困難である。
認証は、.htaccessというファイルを認証をしたいディレクトリに置くことで行うが、そのディレクトリ配下の全てのアクセスに対して有効となるので、ディレクトリ構造を意識してコンテンツを作成する必要がある。.htaccessファイルは、httpd.confのデフォルトで「AccessFileName
.htaccess」がコメントアウト、つまり有効になっており使用できるが、デフォルトで使用できるのは、ユーザディレクトリ配下だけである。具体的には、http://www.aconus.com/~oyaji/test/aaa.htmlのようにユーザ毎に~付きでアクセスするときだけが有効になっている。
http://www.aconus.com/~oyaji/test/aaa.htmlのようにユーザ毎に~付きでアクセスするときだけです。この場合、(C:)/apache2/htdocs/oyaji/public_html/test配下に.htaccessを置けば、test以下で有効になる。
http://www.aconus.com/oyaji/test/aaa.htmlのようにユーザ毎に~無しやドキュメントルート配下で使用したい場合は、httpd.confのそれぞれのDirectoryディレクティブのAllowOverrideディレクティブを編集する必要がある。これらは、デフォルトではAllowOverrideは「none」になっており.htaccessは無効になっているので、下記のように、noneを消して必要な設定を記述する。認証だけなら、AuthConfigだけを記述すればよい。(詳しくはApacheのドキュメントを参照のこと。)
・FileInfo : ファイル関係の制御
・AuthConfig : 認証関係
・Limit : アクセス制御
[例] ドキュメントルート以下で認証する場合。
<Directory "C:/Apache2/htdocs">
(snip)
AllowOverride AuthConfig
(snip)
</Directory>
注: 実際には、mod_authモジュールが有効になっていないと上記設定を行うとエラーとなってApacheが起動できない。しかし、このモジュールは基本モジュールのためデフォルトで使用できるようになっている。もし、起動できなくなった場合(DSOモジュールで組み込む場合しか考えられない)は、モジュールが組み込まれるようになっているか確認すること。具体的には、「LoadModule
auth_module modules/mod_auth.so」行がアンコメント(行頭に#がない状態)されているか確認する。
■Basic認証の設定方法
Basic認証は、.htaccessと.htpasswd(適当な名称で良いが一般的には.htpasswd。.htで始めればユーザディレクトリにも設置可。)ファイルで行う。
- .htaccessの作成
エディタで下記内容を作成し、.htaccessというファイル名でBaisc認証したいフォルダに置く。AuthNameは認証画面の領域というところに表示される内容で、日本語もOK。AuthUserFile
では、下で作成する.htpasswdファイルのパス(ここではWindowsの例のみ記載)を書く。
AuthType Basic
AuthName "このページは、Webmaster専用です。"
AuthUserFile c:/apache2/.htpasswd
require valid-user
- .htpasswdの作成
エディタで、ユーザ名:パスワードとPlain Textで書いても良いが、ここでは、少し高度にパスワードをmd5で暗号化する。
[Windowsの場合]
apacheのbinフォルダの中に、htpasswd.exeというコマンドがあるので、コマンドプロンプトで、下記のように入力すればmd5で暗号化された.htpasswdが作成できる。下記は、ユーザoyajiの登録を行うもので、apacheがc:\apache2にインストールされていて、.htpasswdをc:\apache2配下に作成するものとした例である。.htpasswdはどこにおいてもいいが、ユーザがアクセスできないところに置くほうが良い。(Apacheでは設定を変更していない限り、「.ht」で始まるファイルはWebからはアクセスできないので、ユーザディレクトリ配下に置いても良いが・・・。)二人目からは、cオプション(ファイルの新規作成)なしで、-mだけでやる。
c:\> c:\apache2\bin\htpasswd -mc c:\apache2\.htpasswd oyaji
New password: ********
Re-type password: ********
Adding password for user oyaji |
[Linuxの場合]
基本的にWindowsと全く同じである。
# /usr/local/apache2/bin/htpasswd -mc /usr/local/apache2/.htpasswd oyaji
New password: ********
Re-type password: ********
Adding password for user oyaji |
■Digest認証の設定方法
Digest認証は、.htaccessと.htpasswd_dig(適当な名称。.htで始めればユーザディレクトリにも設置可。)ファイルで行う。
- mod_auth_digestモジュールのインストールと設定
Basic認証で使用するmod_authモジュールは基本モジュールであるが、mod_auth_digestモジュールは拡張モジュールなので意識してインストールする必要がある。とはいっても、Windows版はHunterのものを含め組み込みでコンパイルされており(デフォルトではロディングされないのでDSOモジュールのローディング設定は必要)、RedHat標準のものも設定のみである。唯一、インストールが必要なのはLinuxでソースからコンパイルする場合だけである。configure時に以下のオピションを選択してコンパイルすればよい。以下はバイナリ組込みの例であるが、DSOモジュールとして組込む場合は、[
]内の=sharedを付加してコンパイルすればよい。
./confugure --enable-auth_digest[=shared]
DSOモジュール組込みの場合は、httpd.confの「LoadModule auth_digest_module
modules/mod_auth_digest.so 」行をアンコメントする。バイナリ組込みの場合は特に設定は不要である。
- .htaccessの作成
エディタで下記内容を作成し、.htaccessというファイル名でDigest認証したいフォルダに置く。AuthNameは認証画面で、「realmに使用するユーザ名およびパスワードを入力してください」と表現されるので、変な日本語にならないように表示内容は考えたほうが良い。AuthUserFile
では、下で作成する.htpasswd_digファイルのパス(ここではWindowsの例のみ記載)を書く。
AuthType Digest
AuthName realm
AuthDigestFile c:/apache2/.htpasswd_dig
require valid-user
- .htpasswdの作成
Digest認証用の .htpasswd (ユーザ名、パスワードの登録。登録例では.htpasswd_digとした。)の作成は、Apacheのコマンドを使って行う。
[Windowsの場合]
apacheのbinフォルダの中に、htdigest.exeというコマンドがあるので、コマンドプロンプトで、下記のように入力すれば
.htpasswd が作成できる。下記は、ユーザoyajiの登録を行うもので、apacheがc:\apache2にインストールされていて、.htpasswdをc:\apache2配下に作成するものとした例である。.htpasswdはどこにおいてもいいが、ユーザがアクセスできないところに置くほうが良い。(Apacheでは設定を変更していない限り、「.ht」で始まるファイルはWebからはアクセスできないので、ユーザディレクトリ配下に置いても良いが・・・。)
二人目からは、cオプション(ファイルの新規作成)なしで実行すればよい。
[書式] htdigest -c passwdfile realm user
realmは文字どおり領域であるが、Baisc認証と異なり、画面上は、「realmに使用するユーザ名およびパスワードを入力してください」と表現されるので、変な日本語にならないよう、表示内容は考えたほうが良い。(実際には、ここの設定ではなく、.htaccessのAuthNameに記述されたrealmが表示される)
なお。ここではpasswdfileは、.htpasswd_digとしている。
c:\> c:\apache2\bin\htdigest -c c:\apache2\.htpasswd_dig realm oyaji
New password: ********
Re-type password: ********
Adding password for user oyaji |
[Linuxの場合]
基本的にWindowsと全く同じである。
# /usr/local/apache2/bin/htdigest -c /usr/local/apache2/.htpasswd_dig realm
oyaji
New password: ********
Re-type password: ********
Adding password for user oyaji |
Top Pageへ 戻る