■Apacheで認証をしたい。

[概 要]

Apacheで、サーバ上の特定ディレクトリをパスワード保護するために認証をしたい。

[対 策]

Apacheでは2つの認証方式があり、LinuxでもWindowsでも対応可能である。
認証方式にはBasic認証とDigest認証の二つがあり、その違いは以下のとおりである。
  1. Basic認証

    Basic認証は、対応しているブラウザも多く導入しやすいが、認証情報には一般的にはプレインテキストを MIME エンコードしたものが使用されるので、パケットを盗聴されると簡単にデコードできてしまうという欠点がある。但し、MD5での暗号化も可能であり、全くセキュリティに弱いというわけではない。

  2. 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で始めればユーザディレクトリにも設置可。)ファイルで行う。


  1. .htaccessの作成

    エディタで下記内容を作成し、.htaccessというファイル名でBaisc認証したいフォルダに置く。AuthNameは認証画面の領域というところに表示される内容で、日本語もOK。AuthUserFile では、下で作成する.htpasswdファイルのパス(ここではWindowsの例のみ記載)を書く。

     AuthType Basic
     AuthName "このページは、Webmaster専用です。"
     AuthUserFile c:/apache2/.htpasswd
     require valid-user

  2. .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で始めればユーザディレクトリにも設置可。)ファイルで行う。


  1. 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 」行をアンコメントする。バイナリ組込みの場合は特に設定は不要である。

  2. .htaccessの作成

    エディタで下記内容を作成し、.htaccessというファイル名でDigest認証したいフォルダに置く。AuthNameは認証画面で、「realmに使用するユーザ名およびパスワードを入力してください」と表現されるので、変な日本語にならないように表示内容は考えたほうが良い。AuthUserFile では、下で作成する.htpasswd_digファイルのパス(ここではWindowsの例のみ記載)を書く。

     AuthType Digest
     AuthName realm
     AuthDigestFile c:/apache2/.htpasswd_dig
     require valid-user

  3. .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へ     戻る