lighttpd 資料一覧

ユーザ認証

2007/9/19更新

対応バージョン: 1.4.18

認証方式

ユーザ認証は以下の2種類がサポートされている。

ベーシック認証
ダイジェスト認証

また、それぞれの認証方式は複数のバックエンドに対応している。

ベーシック認証

プレーンテキスト
Apache htpasswd方式
Apache htdigest方式

(*) reply attackへの対応が完全ではない。

LDAP

ダイジェスト認証

プレーンテキスト
Apache htdigest方式

以上をふまえてlighttpd.confへの具体的な設定方法を説明する。

モジュール定義

server.modules = (
                   :
                  "mod_auth",
                   :
                 )

デバッグモード

auth.debug = <設定値>

設定値

0

デバッグモードOFF

1

デバッグモードON(auth-okログのみ出力)

2

デバッグモードON(詳細ログを出力)

バックエンドタイプ

auth.backend = "<設定値>"

設定値

plain
htpasswd
htdigest
ldap

バックエンド毎設定

バックエンドの種類により、それぞれ以下の設定を追加する。

plain

auth.backend.plain.userfile = "<パスワードファイル>"

パスワードファイルは1行につき1アカウント情報を以下のフォーマットで設定する。

<アカウント>:<パスワード(平文)>

htpasswd

auth.backend.htpasswd.userfile = "<パスワードファイル>"

パスワードファイルは1行につき1アカウント情報を以下のフォーマットで設定する。

<アカウント>:<パスワード(htpasswdにて生成)>

パスワードファイルは以下の方法で生成する。

% htpasswd [-c] <パスワードファイル> <アカウント>
New password: ***** ← パスワード
Re-type new password: ***** ← パスワード
-c (create)

新規にパスワードファイルを作成する場合のオプション

htdigest

auth.backend.htdigest.userfile = "<パスワードファイル>"

パスワードファイルは1行につき1アカウント情報を以下のフォーマットで設定する。

<アカウント>:<Realm>:<パスワードを含むMD5値(htdigestにて生成)>
とはこのアカウントに紐付けるサービス名のような意味で、任意の文字列を指定してよい。またこの文字列は後述のauth.requireにて認証エリアを指定する際のRealm名としても使用し、ブラウザの認証ダイアログにも表示される。

パスワードファイルは以下の方法で生成する。

% htdigest [-c] <パスワードファイル> <Realm> <アカウント>
Adding password for neo in realm <Realm>.
New password: ***** ← パスワード
Re-type new password: ***** ← パスワード

パスワードはアカウント情報(1行分)全体をMD5で生成したダイジェスト値なので以下のようにして生成してもよい。

% echo -n "<アカウント>:<Realm>:<パスワード(平文)>" | md5sum | cut -b -32
8440869e50d27992146e9a4d87ea1a83

% echo "<アカウント>:<Realm>:<上記の文字列> >> <パスワードファイル>

ldap

まず、LDAPサーバへの接続情報を設定する。

auth.backend.ldap.hostname = "<LDAPサーバ>"
auth.backend.ldap.base-dn  = "<ベースDN>"
auth.backend.ldap.filter   = "(uid=<LDAPサーバ接続アカウント>)"

TLS(SSL)接続をする場合、以下の設定も追加する。

auth.backend.ldap.starttls = "enable"
auth.backend.ldap.ca-file  = "<LDAPサーバのCA証明書ファイル>"

認証エリア設定

認証を必要とするエリアを認証方法とともに設定する。

auth.require = ( "<認証エリア>" =>
                 (
                   "method"  => "<認証方法>",
                   "realm"   => "<Realm>",
                   "require" => "<許可アカウント>"
                 ),
                 :
                 必要数分
                 :

認証エリア

対象となるエリア(パス)

認証方法

以下のいずれか

basic

ベーシック認証

digest

ダイジェスト認証

Realm

認証ダイアログに表示されるサービス名
ダイジェスト認証の場合はパスワードファイル内のとも比較される

許可アカウント

以下のいずれか

valid-user

パスワードファイル全てのアカウントが対象

user=<アカウント>|user=<アカウント>...

パスワードファイル中の指定したアカウントのみ対象

「|」区切りで複数指定可能

例)

auth.require = ( "/pub/" =>
                 (
                   "method"  => "basic",
                   "realm"   => "download archive",
                   "require" => "valid-user"
                 ),
                 "/manager" =>
                 (
                   "method"  => "digest",
                   "realm"   => "manager area",
                   "require" => "user=manager1|user=manager2"
                 )
               )