Basic認証の設定


戻る

Basic認証の概要

Basic認証とは、Webサーバ上の特定のファイルへのアクセスに対しパスワードを要求する仕組みの一つです。非常に単純な仕組のためどのWebブラウザでもサポートしていますが、暗号化せずにパスワードを送ってしまうために経路上のホストで読まれるというセキュリティ上の弱点もあります。このセキュリティ上の弱点は、SSLを使うと回避することができます。SSLで暗号化せずにBasic認証を使うのは、パスワードが知られてもそれほど困らないケースに限定するべきです。

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

Basic認証の設定をおこなうにはまず、アクセスを許可するユーザ名とパスワードの組のリストを書き込んだパスワードファイルを作成します。これはesehttpd付属のesepasswdコマンドで作ることができます。esepasswdコマンドは、
  /usr/local/sbin/esepasswd
  /usr/sbin/esepasswd
のいずれかの場所にあります(インストール方法によって異なります)。たとえばファイルpasswordにユーザfooのパスワードを書き込むには、
  $ /usr/local/sbin/esepasswd -c password foo
  New password:********
  Re-type new password:********
あるいは
  $ /usr/local/sbin/esepasswd -c -m password foo
  New password:***********
  Re-type new password:***********
のようにします。『-m』オプションを使うと暗号化にMD5を利用するようになります(GNU libcを使っているOSでのみ利用できます)。パスワードの入力が促されますので同じパスワードを2回入力します。パスワードが一致していればpasswordというファイルが作成されるはずです。コマンド行の『-c』はファイルを新規に作ることを指示するオプションで、すでに存在するファイルにパスワードを書き込む場合はこれを付ける必要はありません。一つのファイルに複数のユーザとパスワードを書き込むこともできます。『-m』を付けなかった場合はパスワードの長さは最大で8文字で、それ以上の部分は無視されます。『-m』を付けた場合の長さには制限はありません。

esehttpdの設定ファイル

パスワードファイルを作成したら、esehttpdの設定ファイルに次のような内容を書き加えます。
  <Directory /usr/local/lib/esehttpd/www/html/bar/>
  AuthUserFile /usr/local/lib/esehttpd/conf/password
  AuthName "TEST"
  Require user foo
  </Directory>
この例はディレクトリ/usr/local/lib/esehttpd/www/html/bar/に対し、パスワードを読み込むファイルとして/usr/local/lib/esehttpd/conf/passwordを指定し、ユーザfooの正しいパスワードをクライアントが示した場合にのみアクセスを許可するように設定しています。AuthNameに指定されている文字列は、Webブラウザでユーザ名とパスワードの入力を促すダイアログのタイトルに使われます。Require行には
  Require user foo bar baz
  Require valid-user
の二つの書き方があり、前者はfoo, bar, bazのユーザにアクセスを許可し、後者はpasswordファイルに書かれている全てのユーザにアクセスを許可します。もちろんいずれもパスワードが正しくなければアクセスは許可されません。ディレクトリ全体でなく特定のファイルにだけBasic認証を設定したい時にはRequire行を<FilesMatch>セクションに書きます。詳細は設定ファイルのディレクティブ一覧を参照してください。

セキュリティ

通常のHTTP接続でBasic認証によるパスワードの送信をすると、通信経路でパケット監視することによって簡単に生パスワードが見えてしまいます。盗聴されたくないならHTTPS接続でのみBasic認証のパスワードを送るようにするべきです。HTTPSとHTTPの両方で接続できるように設定したサーバでBasic認証を使う際、まちがってHTTP接続の時にパスワードを送信してしまうのを避けるために、esehttpdにはAuthRequireSSLオプションが用意されています。
  <Directory /usr/local/lib/esehttpd/www/html/bar/>
  AuthUserFile /usr/local/lib/esehttpd/conf/password
  AuthRequireSSL On
  ...
  </Directory>
のように設定しておけば、HTTP接続の時はBasic認証を使わずにリクエストを拒否するようになります。
戻る
Akira Higuchi