mod_dav
分散オーサリングとバージョン管理
(WebDAV) 機能
Extension
mod_dav.c
dav_module
このモジュールはクラス 1 とクラス 2 の
WebDAV
('ウェブベースの分散オーサリングとバージョン管理')
機能を Apache に提供します。
この HTTP プロトコルの拡張により、リモートのウェブサーバ上にある
リソースやコレクションを
作成、移動、複製、削除できるようになります。
DavLockDB
LimitXMLRequestBody
WebDAV Resources
Enabling WebDAV
mod_dav を有効にするには、httpd.conf
ファイル中のコンテナに次を加えます:
Dav On
これは DAV ファイルシステムプロバイダを有効にします。DAV
ファイルシステムプロバイダは mod_dav_fs
モジュールで実装されています。ですから、このモジュールはコンパイル時に
サーバに組み込まれているか、あるいは
LoadModule
を使用して実行時にロードされている必要があります。
さらに、DAV ロックデータベースの場所が
DavLockDB ディレクティブを使って
httd.conf
ファイルのグローバルセクションに指定されている
必要があります。
DavLockDB /usr/local/apache2/var/DavLock
ロックデータベースファイルのあるディレクトリは Apache が実行されている
User と Group に書き込み権限がある必要があります。
Limit
節を Location
ディレクティブ内部に追加して、DAV が有効な場所への
アクセスを制限することもできます。DAV クライアントが
一度のリクエストで送信できる最大バイト数を指定したいときは、
LimitXMLRequestBody
ディレクティブを使用する必要があります。「通常の」
LimitRequestBody
ディレクティブは DAV リクエストに対しては効力を持ちません。
完全な例
DavLockDB /usr/local/apache2/var/DavLock
<Directory /usr/local/apache2/htdocs/foo>
Require all granted
Dav On
AuthType Basic
AuthName DAV
AuthUserFile user.passwd
<LimitExcept GET POST OPTIONS>
Require user admin
</LimitExcept>
</Directory>
セキュリティの問題
DAV のアクセスメソッドは遠隔クライアントがサーバのファイルを
操作することを可能にしますので、 mod_dav を使用する
前に、サーバが安全であることを特に注意して確認しなければなりません。
サーバ上の DAV が使用可能になっている場所はすべて認証で保護してください。
HTTP 基本認証の使用は推奨できません。少なくとも
mod_auth_digest モジュールで提供される HTTP
ダイジェスト認証を用いるべきです。WebDAV クライアントのほとんどは
この認証方法に対応しています。代わりに、SSL が
有効なコネクションを通した基本認証を使うこともできます。
mod_dav がファイルを操作できるようにするためには、
管理下のディレクトリとファイルとに Apache が実行されている User と Group で書き込み可能である必要があります。
新しく作成されるファイルもこの User
と Group に所有される
ことになります。この理由から、そのアカウントへのアクセスを制御することは
重要です。DAV リポジトリは Apache 専用のものだとみなされています。
Apache 以外の方法でファイルを修正すること (例えば FTP やファイルシステム
用のツールなどを使って) は許可されていません。
mod_dav はいろいろな種類のサービス拒否攻撃にさらされる
かもしれません。LimitXMLRequestBody ディレクティブを使うと
大きな DAV リクエストを解析するときに消費されるメモリの量を制限することが
できます。DavDepthInfinity ディレクティブは
PROPFIND
リクエストが巨大リポジトリで大量のメモリを消費するのを
防ぐことができます。他のサービス拒否攻撃には単純に使用可能なディスク領域を
多くの大きなファイルで埋めてしまうんものがあります。これを直接防ぐ方法は
Apache にはありませんので、信用できないユーザに DAV アクセスを提供するのは
避けた方が良いでしょう。
複雑な設定
よくある要求に、mod_dav を使って動的なファイル
(PHP スクリプト、CGI スクリプトなど) を操作したいというものがあります。
これの実現は、GET
リクエストはスクリプトの内容をダウンロードさせる
代わりに、スクリプトを常に実行させてしまうので難しくなっています。
これを回避する方法には、二つの違う URL を同じコンテンツにマップし、
一つはスクリプトを実行させ、もう一つはダウンロードさせたり、DAV から
操作されたりするように設定するというものがあります。
Alias /phparea /home/gstein/php_files
Alias /php-source /home/gstein/php_files
<Location /php-source>
Dav On
ForceType text/plain
</Location>
この設定により、http://example.com/phparea
を PHP スクリプトの
出力をアクセスするために使うことができ、
http://example.com/php-source
を DAV クライアントによる
が操作のために使うことができます。
Dav
WebDAV HTTP メソッドを有効にします
Dav On|Off|provider-name
Dav Off
directory
与えられたコンテナで WebDAV HTTP メソッドが使えるようにするには
次のようにします。
<Location /foo>
Dav On
</Location>
On
という指定は実際には mod_dav_fs
で提供されているデフォルトのプロバイダ、filesystem
へのエイリアスになっています。一度あるロケーションで DAV
を有効にした後は、そのサブロケーションで無効化することはできない
ということに注意してください。完全な設定例は上記のセクション をご覧下さい。
サーバのセキュリティが確保できるまで WebDAV を有効にしないでください。
そうしなければ誰でもそのサーバでファイルを配布することができるように
なってしまいます。
DavMinTimeout
サーバが DAV リソースのロックを維持する最小時間です。
DavMinTimeout seconds
DavMinTimeout 0
server configvirtual host
directory
クライアントが DAV リソースロックを要求した場合、
ロックがサーバによって自動的に解除されるまでの時間を
同時に指定することができます。この値は単なるリクエストであって、
サーバはこれを無視することもできますし、
任意の値をクライアントに通知することもできます。
クライアントに戻すロックタイムアウトの最小時間を、
秒で、指定するために DavMinTimeout
ディレクティブを使います。
マイクロソフトのウェブフォルダのデフォルトでは 120 秒ですが;
ネットワークの遅延のせいでクライアントがロックを失うのを減らすために、
DavMinTimeout を使って
これをもっと大きな値 (例えば 600 秒) に上書きできます。
例
<Location /MSWord>
DavMinTimeout 600
</Location>
DavDepthInfinity
PROPFIND, Depth: Infinity リクエストを許可します
DavDepthInfinity on|off
DavDepthInfinity off
server configvirtual host
directory
'Depth: Infinity' を含んでいる
PROPFIND
リクエストを処理できるようにするには、
DavDepthInfinity
ディレクティブを使います。このタイプのリクエストは
denial-of-service アタックとなりうるので、
デフォルトでは許可されていません。