Apache で WebDAV を利用

Windows では Web フォルダ、Macintosh では iDisk というファイル共有を実現したサービスがあります。このサービスを、WebDAV (Web-based Distributed Authoring and Versioning) という HTTP を利用してファイル共有を行なう仕組みを Apache に組み込んで実現してみます。以下の説明は、Solaris 2.6 にサーバーを構築しています。(他の UNIX 環境でもほとんど変わらないはずです。) また、Apache の構築や設定ができることを前提に記述しているので、Apache についての細かい説明は省略しています。

* 必要なもの

Apache オフィシャルページ  http://www.apache.org/dist/httpd/apache_1.3.20.tar.gz
mod_dav モジュール  http://www.webdav.org/mod_dav/mod_dav-1.0.2-1.3.6.tar.gz

* インストール方法

module をダイナミックリンクで利用できるように、Apache を DSO (Dynamic Shared Object) を有効にして作成します。 ほとんどデフォルトのまま構築するので、Apache は /usr/local にインストールされます。
# gzip -dc apache_1.3.20.tar.gz | tar xf -
# cd apache_1.3.20
# ./configure --enable-module=so
# make
# make install

続いて、mod_dav モジュールの作成。 インストールすると、mod_dav.so をロードするように httpd.conf を作り変えてくれます。

# cd ..
# gzip -dc mod_dav-1.0.2-1.3.6.tar.gz | tar xf -
# cd mod_dav-1.0.2-1.3.6
# ./configure
# make
# make install
mkdir -p /usr/local/apache/libexec && /usr/local/apache/bin/apxs -i -a -n dav libdav.so
[activating module `dav' in /usr/local/apache/conf/httpd.conf]
cp libdav.so /usr/local/apache/libexec/libdav.so
chmod 755 /usr/local/apache/libexec/libdav.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new

これで mod_dav は Apache に組み込まれます。インストールすることで、httpd.conf は下記のように libdav.so をロードするように追記されます。

LoadModule dav_module libexec/libdav.so
AddModule mod_dav.c

* 設定ファイル httpd.confの編集と共有フォルダとして公開するフォルダの指定

httpd.conf を編集して、共有フォルダの設定を行います。共有するパスを DAV(http://<server>/DAV/)と設定するには以下の内容を httpd.conf に追加します (最も単純な設定) 。 <Location> ディレクティブを利用していますが、<Directory> ディレクティブでもかまいません。

<IfModule mod_dav.c>
    DAVLockDB var/DAVLock
    DAVMinTimeout 600
    <Location /DAV>
        DAV On
    </Location>
</IfModule>

ファイルの排他制御を考慮するためのロックファイルの指定と、DAV を有効にするパスの指定を記述します。上記のように設定したなら、実際に利用されるディレクトリーを作成しておかなければなりません。以下で、ディレクトリーのオーナーを nobody に設定していますが、これは、httpd.conf の User ディレクティブで指定されたユーザーを指定しなければなりません。

# mkdir /usr/local/apache/var
# chown nobody:nobody /usr/local/apache/var
# chmod 770 /usr/local/apache/var
# mkdir /usr/local/apache/htdocs/DAV
# chown nobody:nobody /usr/local/apache/htdocs/DAV
# chmod 770 /usr/local/apache/htdocs/DAV

あとは、Apache を起動すれば共有フォルダとして http://<server>/DAV/ が利用できるようになります。このままでは、誰でも利用できてしまうので、認証ぐらいさせたいと思うなら Apache のアクセス制御の機構 <Limit>ディレクティブを利用できます。

<IfModule mod_dav.c>
    DAVLockDB var/DAVLock
    DAVMinTimeout 600
    <Location /DAV>
        DAV On
        <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
AuthType Basic
AuthName "WebDAV"
AuthUserFile /usr/local/apache/var/dav_users.pwd
Require valid-user
</Limit> </Location> </IfModule>

認証用のパスワードファイル(/usr/local/apache/var/dav_users.pwd)については、htpasswd コマンドなどを利用して作成すると良い。

また、安全性への配慮として SSL ぐらいは対応させないとグローバルなサーバーとしては利用は控えた方が良いですね。

* 実際に参照してみよう

設定が終わったら、Apache を起動して Windows で Web フォルダを利用してみます。
# /usr/local/apache/bin/apachectl start

サーバー側で Apache が起動できたら Windows で Web フォルダを共有します。ここでは、サーバーが dav.foobar.co.jp で、クライアントが Windows 2000 として説明します。

Windows 2000 上の「マイ ネットワーク」をマウスでダブルクリックし、「ネットワーク プレースの追加」を行います。

DAV

ネットワークプレースの場所(URL)を指定し、「次へ(N)」ボタンをクリックします。

DAV

続いて、ネットワークプレース名(フォルダーとなる名前)を入力し(デフォルトでも良い)、「完了」ボタンを押します。

DAV

マイネットワークの中に Webフォルダが追加されます。(実際には、上記「ネットワークプレースの追加ウィザード」を完了した時点で Webフォルダーが開きます。)

DAV

あとは、通常の Windows のファイル操作同様、Webフォルダーにドラッグアンドドロップでファイルを追加できます。注意事項として、日本語のファイル名は使用できない(Windows NT/2000 上の Apache だったら大丈夫かな?でも、それなら IIS 5.0 を使えば済みますね)。mod_encoding を利用すると良いらしい...

DAV