Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_dav

Описание: Функциональность распределённой разработки и управления версиями (WebDAV)
Статус: Расширение
Идентификатор модуля: dav_module
Исходный файл: mod_dav.c

Краткое описание

Этот модуль предоставляет Apache функциональность WebDAV («разработка и управление версиями через Интернет») классов 1 и 2. Это расширение протокола HTTP позволяет создавать, перемещать, копировать и удалять ресурсы и коллекции на удалённом веб-сервере.

Включение WebDAV

Чтобы включить mod_dav, добавьте следующий блок в контейнер в файле httpd.conf:

Dav On

Это включает поставщик файловой системы DAV, реализованный модулем mod_dav_fs. Поэтому этот модуль должен быть скомпилирован в сервер или загружен во время выполнения с помощью директивы LoadModule.

Кроме того, в глобальном разделе файла httpd.conf с помощью директивы DavLockDB необходимо указать расположение базы данных блокировок DAV:

DavLockDB /usr/local/apache2/var/DavLock

Каталог, содержащий файл базы данных блокировок, должен быть доступен для записи пользователю User и группе Group, от имени которых работает Apache.

Возможно, вы захотите добавить условие <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. Следует использовать как минимум дайджест-аутентификацию HTTP, предоставляемую модулем mod_auth_digest. Почти все клиенты WebDAV поддерживают этот метод аутентификации. Альтернативный вариант — базовая аутентификация через соединение с включённым SSL.

Чтобы mod_dav мог управлять файлами, ему необходим доступ на запись к каталогам и файлам под его контролем от имени пользователя User и группы Group, под которыми работает Apache. Создаваемые файлы также будут принадлежать этому пользователю 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

Описание: Включение методов HTTP WebDAV
Синтаксис:
Dav On|Off|provider-name
Значение по умолчанию:
Dav Off
Контекст: каталог
Статус: Расширение
Модуль: mod_dav

Используйте директиву Dav, чтобы включить методы HTTP WebDAV для указанного контейнера:

<Location "/foo">
    Dav On
</Location>

Значение On фактически является псевдонимом поставщика по умолчанию filesystem, обслуживаемого модулем mod_dav_fs. Обратите внимание: если вы включили DAV для какого-либо расположения, его нельзя отключить для вложенных расположений. Полный пример конфигурации см. в разделе выше.

Не включайте WebDAV, пока не обеспечите безопасность своего сервера. В противном случае любой сможет распространять файлы в вашей системе.

Директива DavBasePath

Описание: Настройка корневого пути репозитория
Синтаксис:
DavBasePath root-path
Значение по умолчанию: None
Контекст: каталог
Статус: Расширение
Модуль: mod_dav
Совместимость: Доступно начиная с версии 2.4.58

Если репозиторий DAV настроен с использованием сопоставления с регулярным выражением (например, LocationMatch), то mod_dav не сможет определить корень репозитория только по имени пути. Сторонние поставщики (например, mod_dav_svn Subversion) могут не обработать запросы без правильного корня репозитория.

Чтобы поставщики могли корректно работать в такой конфигурации, необходимо использовать DavBasePath.

<LocationMatch "^/repos/">
    Dav svn
    DavBasePath /repos
    SVNParentPath /var/svn
</LocationMatch>

Директива DavDepthInfinity

Описание: Разрешение запросов PROPFIND с Depth: Infinity
Синтаксис:
DavDepthInfinity on|off
Значение по умолчанию:
DavDepthInfinity off
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_dav

Используйте директиву DavDepthInfinity, чтобы разрешить обработку запросов PROPFIND, содержащих заголовок 'Depth: Infinity'. Поскольку такой запрос может представлять собой атаку типа «отказ в обслуживании», по умолчанию он запрещён.

Директива DavMinTimeout

Описание: Минимальное время, в течение которого сервер удерживает блокировку ресурса DAV
Синтаксис:
DavMinTimeout seconds
Значение по умолчанию:
DavMinTimeout 0
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_dav

Запрашивая блокировку ресурса DAV, клиент может также указать время, по истечении которого сервер автоматически снимет блокировку. Это значение является лишь запросом: сервер может проигнорировать его или сообщить клиенту любое другое значение.

Используйте директиву DavMinTimeout, чтобы указать минимальное время ожидания блокировки в секундах, возвращаемое клиенту. По умолчанию Microsoft Web Folders использует время ожидания 120 секунд; директива DavMinTimeout может увеличить это значение (например, до 600 секунд), чтобы снизить вероятность потери блокировки клиентом из-за задержки в сети.

Пример

<Location "/MSWord">
    DavMinTimeout 600
</Location>

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_dav.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API