1.概要
特定ページへのアクセス制限を実現する仕組み.Basic認証とDigest認証がある.
Basic認証とDigest認証の違いとして,サーバ/クライアント間の認証情報の処理が違う.
Basic認証の場合,ユーザIDとパスワードがBase64エンコードされた状態でやりとりが行われる.よって,盗聴された場合に簡単に複合されてしまうため,セキュリティレベルが低いことが欠点であると言える.
Digest認証の場合,その場限りで利用されるランダムな文字列とハッシュデータおよびユーザ名を利用しているため,Basic認証よりセキュリティレベルが向上している.
2.設定方法
設定の基本的な流れとして,
1.アクセス制限をかける場所の指定
2.パスワードの生成
3.認証に関する設定
の順で行う.
2-1.場所の指定
apacheの設定ファイル中にセクションで認証するパスおよび設定を記述するか,認証するディレクトリに.htaccessファイルを設置するかの2種類となる.
apacheの設定ファイルにおいてデフォルトで,認証に関するファイルはhtaccessというファイル名を利用するという設定になっているが,変更が可能である.
.htaccessファイルを利用する場合[AllowOverride]ディレクティブで許可する必要がある.デフォルトでは
DocummentRoot "/var/www/html"
<Directory "/var/www/html">
~~~~~(省略)~~~~~
AllowOverride None
~~~~~(省略)~~~~~
</Directory>
となっているため,AuthConfigに変更する必要がある.よくAllにすれば良いという情報があるが,最小限の権限付与とする場合は,認証に関する設定のみ上書きを許可すれば良い.
扱わないのにも関わらず他の設定も上書きを許可してしまうと無駄である.
2-2.パスワードの生成
Basic認証とDigest認証の場合では,パスワード生成に利用するコマンドが違う.
Basic認証の場合はhtpasswd,Digest認証の場合はhtdigestコマンドを利用する.
htpasswd
htpasswd -c /var/www/html/auth/basicpass hoge
# -c オプションはパスワードファイルを新規作成するオプション
# hoge はユーザー名
htdigest
htdigest -c /var/www/auth/.digestusers "auth area" hoge
# -c オプションはパスワードファイルを新規作成するオプション
# "auth area" はrealm
# hoge はユーザー名
2-3.認証に関する設定
パスワードファイルの場所や,認証単位(指定したユーザのみ,指定したグループに属するユーザのみ,IDが存在する人全て)等を指定する.
指定したユーザのみ許可する
<Directory "/var/www/html">
AuthType Basic
AuthName "Auth Area"
AuthUserFile /var/www/auth/.authlist
Require user hoge1 hoge2 hoge3
</Directory>
指定したグループに属するユーザのみ許可する
<Directory "/var/www/html">
AuthType Basic
AuthName "Auth Area"
AuthGroupFile /var/www/auth/.grouplist
AuthUserFile /var/www/auth/.authlist
Require group 501
</Directory>
パスワードファイルに存在するIDを全て許可する
<Directory "/var/www/html">
AuthType Basic
AuthName "Auth Area"
AuthUserFile /var/www/auth/.authlist
Require valid-user
</Directory>
3.設定に関する詳細
各ディレクティブには,選択肢がありその中身を記載する.
3-1.AuthTypeディレクティブ
認証方式を指定するディレクティブである.
構文: AuthType Basic|Digest
Basic認証はmod_auth_basicにて実装されており,Digest認証はmod_auth_digestで実装されている.
Basic認証の場合,ユーザIDとパスワードがbase64エンコードされているため暗号化が脆弱である.
Digest認証の場合,ほとんどの場合がMD5によるハッシュデータを用いるが仕組み上,Basic認証より強固になっている.
3-2.AuthNameディレクティブ
レルム(認証領域)を指定するディレクティブである.
構文:AuthName auth-domain
ディレクトリに対する認可領域(レルム[realm])の名前を指定する.
ただ単純にユーザにどのユーザIDとパスワードを入力すればいいのか等を記述する場合が多い.
3-3.AuthUserFileディレクティブ
ユーザIDとパスワードが記載されているファイルを指定するディレクティブである.
構文:AuthUserFile passwordfile-path
htpasswdコマンドにて作成した,ユーザIDとパスワードが記載されているファイルを指定する
3-4.AuthGroupFileディレクティブ
グループ単位での認証時に利用する,グループとユーザIDの関係性が記載されたファイルを指定するディレクティブである.
構文:AuthGroupFile passwordfile-path
htpasswdコマンドにて作成した,グループ名とユーザIDおよびパスワードが記載されているファイルを指定する
3-5.Requireディレクティブ
認証する単位を指定するディレクティブである.また,許可するユーザID,グループ名も指定する.
構文:Require user user-name ...
指定したユーザIDのみ許可する
構文:Require group group-name ...
指定したグループに所属するユーザのみ許可する
構文:Require valid-user
全ての認証されたユーザを許可する
4.参考文献
http://httpd.apache.org/docs/2.2/howto/auth.html
http://ja.wikipedia.org/wiki/Basic認証
http://ja.wikipedia.org/wiki/Digest認証
http://x68000.q-e-d.net/~68user/net/http-auth-2.html