mod_auth_userdir

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 へアクセスがあった場合、iwamakazuhiko でログインしている場合のみ、PUT/POST でのアクセスができます。

実際の設定例としては、こちらのサンプル をご覧ください。

終わりに

まずは、コンセプトを実装した段階なので、動作に怪しい部分もありますし、期待通りの制限をかけるにはちょっとコツがいるのですが、ユーザーのディレクトリ毎に、Require user iwama などと書いていくよりかは楽かな…と。

ユーザー認証部は他のモジュール任せで、ユーザーIDのチェック部分のみの実装ですので、いろいろと応用できるのではないかと(勝手に)思っています。改良のアイデア、募集します。


Presented by Kazuhiko Iwama.