WebDAVとは?#

'HTTP Extensions for Web Distributed Authoring and Versioning'の略で、 RFC4918によって規定されています。簡単に言うとHTTPを使ったファイル共有のプロトコルです。下位ではHTTPを利用しているため可用性が高いのが特徴です。
Apacheでも従来から実装されています。

コンパイル#

Apache2.2でWebDAVを利用するためには以下のモジュールが必要になります。
  • mod_dav
ただし、コンパイルの結果生成される設定ファイルがダイジェスト認証を前提としているためこれも有効になるようにしておきます。(設定ファイルを変更してベーシック認証を使う場合これらは不要です。)
必要なモジュールを有効にするためのコンパイルは次です。
$ ./configure --enable-modules="so dav auth_digest authn_file authz_user authz_owner"
$ make
$ make install
この設定では、デフォルトフォルダである '/usr/local/apache2' にインストールされます。インストールフォルダを換えたい場合は '--prefix=/好きなフォルダ' をconfigureに追加します。

httpd-dav.confの設定例#

上記の手順でコンパイルをすると、/usr/local/apache2/conf/extra/httpd-dav.conf が生成されます。中身は次の通りです。
#
# Distributed authoring and versioning (WebDAV)
#
# Required modules: mod_dav, mod_dav_fs, mod_setenvif, mod_alias
#                   mod_auth_digest, mod_authn_file
#

# The following example gives DAV write access to a directory called
# "uploads" under the ServerRoot directory.
#
# The User/Group specified in httpd.conf needs to have write permissions
# on the directory where the DavLockDB is placed and on any directory where
# "Dav On" is specified.

DavLockDB "/usr/local/apache2/var/DavLock"

Alias /uploads "/usr/local/apache2/uploads"

<Directory "/usr/local/apache2/uploads">
    Dav On

    Order Allow,Deny
    Allow from all

    AuthType Digest
    AuthName DAV-upload

    # You can use the htdigest program to create the password database:
    #   htdigest -c "/usr/local/apache2/user.passwd" DAV-upload admin
    AuthUserFile "/usr/local/apache2/user.passwd"
    AuthDigestProvider file

    # Allow universal read-access, but writes are restricted
    # to the admin user.
    <LimitExcept GET OPTIONS>
        require user admin
    </LimitExcept>
</Directory>

#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash.  This fixes a
# problem with several clients that do not appropriately handle
# redirects for folders with DAV methods.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
WebDAV関連のディレクティブは次の2つだけです。

Dav#

WebDAVの利用を宣言します。"On"という値を記述することで有効になります。

DavLockDB#

ロックデータベースファイルを指定します。ここで指定したフォルダ(上記例では/usr/local/apache2/var/)は、Apache実行ユーザ(デフォルトではdaemon)で読み書きできるようにパーミッションを設定しておく必要があります。
稼働すると、"DavLock.dir"と"DavLock.pag"の2つのファイルが生成されます。

その他の関連ディレクティブには次のものがあります。

<LimitExcept>#

サイトへのアクセスをさらに制限するためにLimitExceptを利用できます。
上記例では、HTTPのGETとOPTION以外のメソッドが使えるユーザを'admin'だけに限定しています。この結果、ファイルをアップロードできるのはadminだけになります。しかしこのディレクティブの使い方には注意が必要です。
デフォルトで生成されるhttpd-dav.confのコメント読むと「adminユーザだけに書き込みを限定し、一般ユーザには読み取りのみ許可する」と書いてありますが、私が試した限りでは少しややこしい動きになりました。
  • ブラウザからアクセスすると認証ダイアログが表示されずに誰でも閲覧可能。
  • DAV専用クライアントからアクセスするとadminユーザでしかログインできなくなる。
  • クライアントがWindowsの場合、net useコマンドによる接続もDAV専用クライアントと同じである。
そのためこのディレクティブを使わず次のように設定し、認証されたユーザ全員が読み書き出来る前提で運用する事を私はお薦めします。
Require valid-user

httpd.confの設定#

httpd-dav.conf をインクルード(Include)している行のコメントをはずします。
# Distributed authoring and versioning (WebDAV)
Include conf/extra/httpd-dav.conf

設定後、'service httpd restart' などでApacheを再起動します。

FYI: Windows7からダイジェスト認証でログインするには?#

net use コマンド#

一番簡単なのはこれです。コマンドプロンプトから次のように入力すると、エクスプローラから「Wドライブ」でアクセス出来るようになります。ドライブレターは適宜換えてください。

net use w: http://サイトURL
(ユーザ名とパスワードの入力を求められるので入れる)

ネットワークドライブの割り当て#

「スタートメニュー」→「コンピュータ」で右ボタンメニューを出し、「ネットワークドライブの割り当て」を選んでhttp://サイトURL を入力します。認証ダイアログが表示されるのでユーザ名とパスワードを入力します。

うまく接続できなかった時は?#

私のPCでは発生しなかったのですが、Windows7からうまくつながらないことがあるそうです。レジストリの設定によってSSL以外の認証を許さなくなっていることが理由とのことです。その場合は次のレジストリの値を「2」に設定してください。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters
BasicAuthLevel
ちなみに私のPCでの上記値は1でしたがダイジェスト認証ですんなりつながりました。そのため値2は試していません。

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。
« This page (revision-10) was last changed on 07-5-2011 23:02 by ytp