Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache モジュール mod_dav

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

説明: | 分散オーサリングとバージョン管理 (WebDAV) 機能
ステータス: | Extension
モジュール識別子: | dav_module
ソースファイル: | mod_dav.c

### 概要

このモジュールはクラス 1 とクラス 2 の WebDAV ('ウェブベースの分散オーサリングとバージョン管理') 機能を Apache に提供します。 この HTTP プロトコルの拡張により、リモートのウェブサーバ上にある リソースやコレクションを 作成、移動、複製、削除できるようになります。

### トピック

- Enabling WebDAV
- セキュリティの問題
- 複雑な設定

### ディレクティブ

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### 参照

- `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`
コンテキスト: | ディレクトリ
ステータス: | Extension
モジュール: | mod_dav

与えられたコンテナで WebDAV HTTP メソッドが使えるようにするには 次のようにします。

    <Location /foo>
        Dav On
    </Location>

`On` という指定は実際には `mod_dav_fs` で提供されているデフォルトのプロバイダ、`filesystem` へのエイリアスになっています。一度あるロケーションで DAV を有効にした後は、そのサブロケーションで無効化することはできない ということに注意してください。完全な設定例は上記のセクション をご覧下さい。

サーバのセキュリティが確保できるまで WebDAV を有効にしないでください。 そうしなければ誰でもそのサーバでファイルを配布することができるように なってしまいます。

## DavDepthInfinity ディレクティブ

説明: | PROPFIND, Depth: Infinity リクエストを許可します
構文: | `DavDepthInfinity on|off`
デフォルト: | `DavDepthInfinity off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ
ステータス: | Extension
モジュール: | mod_dav

'Depth: Infinity' を含んでいる `PROPFIND` リクエストを処理できるようにするには、 `DavDepthInfinity` ディレクティブを使います。このタイプのリクエストは denial-of-service アタックとなりうるので、 デフォルトでは許可されていません。

## DavMinTimeout ディレクティブ

説明: | サーバが DAV リソースのロックを維持する最小時間です。
構文: | `DavMinTimeout seconds`
デフォルト: | `DavMinTimeout 0`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ
ステータス: | Extension
モジュール: | mod_dav

クライアントが DAV リソースロックを要求した場合、 ロックがサーバによって自動的に解除されるまでの時間を 同時に指定することができます。この値は単なるリクエストであって、 サーバはこれを無視することもできますし、 任意の値をクライアントに通知することもできます。

クライアントに戻すロックタイムアウトの最小時間を、 秒で、指定するために `DavMinTimeout` ディレクティブを使います。 マイクロソフトのウェブフォルダのデフォルトでは 120 秒ですが； ネットワークの遅延のせいでクライアントがロックを失うのを減らすために、 `DavMinTimeout` を使って これをもっと大きな値 (例えば 600 秒) に上書きできます。

### 例

    <Location /MSWord>
        DavMinTimeout 600
    </Location>