さて、これでリモートからのアクセスが可能になったのはいいんだけども、ぶっちゃけいちいち新規利用ユーザが増えるたびにhtpasswdでユーザを追加しないといけないのはめんどくさい。
じゃあLDAP使えばいいじゃない、という話でmod_ldapを利用することに。
ところが、aptitude search mod_ldapとかしても出てこない。
とりあえずapacheのモジュールディレクトリを眺めてると、authnz_ldapとかいうのが入ってるみたい。
ということでこれを使う。
いくらか試行錯誤して、とりあえずLDAP登録ユーザの認証はできるようになった。
が、ゲストアカウントを作りたいっていうのがあり、そこをどうするかで悩んだ。
結論として、Limitディレクティブを使えば解決ということになった。
とりあえず、ログを眺めて発行されるHTTPメソッドをうだうだ眺めてみた。
PROPFIND ファイル一覧表示
GET ダウンロード
MKCOL ディレクトリ作成
PUT ファイル作成
PROPPATCH ファイル変更
DELETE 削除
LOCK ロック
UNLOCK ロック解除
MOVE 移動
OPTIONS 発行可能なコマンド表示
たぶんこんな感じっぽい。
ということで、読み込み可能なだけなユーザはGET PROPFIND OPTIONSだけでいいっぽいだろうということになった。
それらをふまえた設定が以下のようなかんじ。
# for file server
<IfModule mod_ssl.c>
<VirtualHost 192.168.1.x:443>
ServerName xxx.waterblue.net:443
SSLEngine onDocumentRoot /mnt/fileserver
<Location />
DAV on
SSLRequireSSL
AuthType Basic
AuthName “waterblue file server”
AuthBasicProvider ldap
AuthLDAPURL “ldap://192.168.1.x/ou=People,dc=waterblue,dc=net”
AuthLDAPRemoteUserIsDN offOptions FollowSymLinks
Require ldap-user “hoge”
Require ldap-user “fuge”<Limit GET PROPFIND OPTIONS>
Require ldap-user “poge”
</Limit>
</Location>
<Location /incoming>
Require valid-user
</Location>
</VirtualHost>
</IfModule>
AuthBasicProviderをldapで指定してやれば、 AuthLDAPURLで指定したLDAPサーバに認証情報を取りに行く。
AuthLDAPURLは、ldap://LDAPサーバ/検索ドメイン?検索キー?サブツリーチェック?フィルタな感じ。
検索キーとかはデフォルトだと?uid?sub?(ObjectClass=*)みたいなかんじだった。
その辺は各自自分の都合のいいように変えましょう。
久々にがんばった。