lighttpdでWebDAV + LDAPを利用する。¶
結論を言うとユーザの権限をフラットにしておく場合には使えます。が、ユーザの権限をグループ毎に分ける場合には、LDAPのグループ、というかグループでの認証には未対応なのでApacheを使うと良いでしょう。
lighttpdの設定。¶
WebDAV + LDAPを使う方法だけとりあえず記録しておきました。
/etc/lighttpd/lighttpd.conf¶
diff --git a/lighttpd/lighttpd.conf b/lighttpd/lighttpd.conf
index 32eb9d5..d605901 100644
--- a/lighttpd/lighttpd.conf
+++ b/lighttpd/lighttpd.conf
@@ -31,3 +31,16 @@ compress.filetype = ( "application/x-javascript", "
text/css", "text/ht
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
+
+$HTTP["host"] == "hoge.example.org" {
+ server.document-root = "/var/www/"
+ alias.url = ( "/dav" => "/var/www/dav" )
+ $HTTP["url"] =~ "^/dav($|/)" {
+ webdav.activate = "enable"
+ webdav.is-readonly = "disable"
+ webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.
db"
+ auth.require = ( "" => ( "method" => "basic",
+ "realm" => "hoge",
+ "require" => "valid-user" ) )
+ }
+}
webdav.activateをenableでWebDAVを有効に
webdav.is-readonlyをdisableで書き込み可に
webdav.sqlite-db-nameにWebDAV用のロックファイルを指定
auth.requireでLDAPのBASIC認証の認証方式を指定
/etc/lighttpd/conf-available/05-auth.conf¶
diff --git a/lighttpd/conf-available/05-auth.conf b/lighttpd/conf-available/05-auth.conf
index 5d896e3..4323034 100644
--- a/lighttpd/conf-available/05-auth.conf
+++ b/lighttpd/conf-available/05-auth.conf
@@ -2,13 +2,13 @@
server.modules += ( "mod_auth" )
-# auth.backend = "plain"
+auth.backend = "ldap"
# auth.backend.plain.userfile = "lighttpd.user"
# auth.backend.plain.groupfile = "lighttpd.group"
-# auth.backend.ldap.hostname = "localhost"
-# auth.backend.ldap.base-dn = "dc=my-domain,dc=com"
-# auth.backend.ldap.filter = "(uid=$)"
+auth.backend.ldap.hostname = "ldapserver"
+auth.backend.ldap.base-dn = "o=hoge,dc=example,dc=org"
+auth.backend.ldap.filter = "(uid=$)"
# auth.require = ( "/server-status" =>
# (
auth.backendで認証方法をLDAPに指定
auth.backend.ldap.hostnameにLDAPサーバのホスト名またはIPアドレスを指定
auth.backend.ldap.base-dnにLDAPのbase DNを指定
auth.backend.ldap.filterにLDAPのユーザ認証用に(uid=$)をフィルター指定
モジュールの有効化¶
DebianのlighttpdはApacheと同様、利用できる設定(conf-available/)と有効になっている設定(conf-enable/)があるので、WebDAVとLDAPの認証を有効にするためには、/usr/sbin/lighty-enable-modコマンドを使用します。
$ sudo lighty-enable-mod auth
Available modules: auth accesslog cgi evasive evhost expire fastcgi flv-streaming no-www \
proxy rrdtool simple-vhost ssi ssl status userdir usertrack webdav fastcgi-php debian-doc
Already enabled modules:
Enabling auth: ok
Run /etc/init.d/lighttpd force-reload to enable changes
$ sudo lighty-enable-mod webdav
Available modules: auth accesslog cgi evasive evhost expire fastcgi flv-streaming no-www \
proxy rrdtool simple-vhost ssi ssl status userdir usertrack webdav fastcgi-php debian-doc
Already enabled modules: auth
Enabling webdav: ok
Run /etc/init.d/lighttpd force-reload to enable changes
lighttpdでグループでの認証が未対応な理由。¶
lighttpd.confのauth.requireのパラメータのrequireにgroupとしても、下記のログがでます。
2011-07-14 16:11:11: (http_auth.c.402) group ... (not implemented)
2011-07-14 16:11:11: (http_auth.c.416) nothing matched
2011-07-14 16:11:11: (http_auth.c.888) rules didn't match
え、”note implemented”って…。
Sidのlighttpd 1.4.29のソースコード(src/http_auth.c)を見ると、
/* the part before the = is user|group|host */
k = r;
k_len = eq - r;
v = eq + 1;
v_len = r_len - k_len - 1;
if (k_len == 4) {
if (0 == strncmp(k, "user", k_len)) {
if (username &&
username_len == v_len &&
0 == strncmp(username, v, v_len)) {
return 0;
}
} else if (0 == strncmp(k, "host", k_len)) {
log_error_write(srv, __FILE__, __LINE__, "s", "host ... (not implemented)");
} else {
log_error_write(srv, __FILE__, __LINE__, "s", "unknown key");
return -1;
}
} else if (k_len == 5) {
if (0 == strncmp(k, "group", k_len)) {
log_error_write(srv, __FILE__, __LINE__, "s", "group ... (not implemented)");
} else {
log_error_write(srv, __FILE__, __LINE__, "ss", "unknown key", k);
return -1;
}
と、ユーザ認証しか対応していないのでした。ググってみると、過去にも同じような話がありました。
http://redmine.lighttpd.net/issues/1817
LDAP-Group support for HTTP-Authentication Support for using ldap DN in auth-require, example:
auth.require = (
"/" => (
"method" => "basic",
"realm" => "test lighty auth",
"require" => "group=cn=coolguys,ou=groups,dc=foo,dc=org|user=admin|group=cn=group2,ou=groups,dc=foo,dc=org"
)
)
Patch also available at `http://danielbond.org/patches/lighttpd-http_auth.c-ldap_group.diff <http://redmine.lighttpd.net/attachments/download/678/lighttpd-http_auth.c-ldap_group.diff>`_
これに対応するパッチ も添付されているのですが、最初に投稿されてから2年以上も経っているのに未だマージされていません。
というわけで、lightyにこだわる理由も特にないので、結局今回はApacheで行うことにしました。