apache 標準の認証モジュールでは、ディレクトリ毎の個別の指定が面倒なので、URI からユーザー名を抽出して、そのユーザーのみ許可するという認証モジュールを作ってみました。
動機は、mod_dav でのユーザーごとの設定をいかに楽にするか…というものなので、かなり手抜きな実装となっています。
ここ からソースを取ってきて、
apxs -c mod_auth_userdir.c apxs -i mod_auth_userdir.so
で、コンパイル&インストールができます。 ただ、apxs -i は期待通りの動作をしないこともあるので、その場合は mod_auth_userdir.so を apache のモジュールディレクトリにコピーしてください。
実際に使うには、apache へのモジュールの登録が必要となります。httpd.conf などに、
LoadModule userdir_auth_module modules/mod_auth_userdir.so AddModule mod_auth_userdir.c
という設定を追加し(パスは調整のこと)、リスタートできればインストール完了です。
アクセス制御をさせるには、<Directory> や <Location> ブロック中で、
AuthUserFile /home/httpd/var/dav_passwd AuthName "DAV access passwd" AuthType Basic AuthUserdir On AuthUserdirMatch "^/dav/([^/]+)/" <Limit PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Require userdir-owner </Limit>
というように指定します。 この場合、/dav/iwama/ や /dav/kazuhiko/ という URI へアクセスがあった場合、iwama や kazuhiko でログインしている場合のみ、PUT/POST でのアクセスができます。
実際の設定例としては、こちらのサンプル をご覧ください。
まずは、コンセプトを実装した段階なので、動作に怪しい部分もありますし、期待通りの制限をかけるにはちょっとコツがいるのですが、ユーザーのディレクトリ毎に、Require user iwama などと書いていくよりかは楽かな…と。
ユーザー認証部は他のモジュール任せで、ユーザーIDのチェック部分のみの実装ですので、いろいろと応用できるのではないかと(勝手に)思っています。改良のアイデア、募集します。
Presented by Kazuhiko Iwama.