Модуль 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 для какого-либо расположения, его нельзя отключить для вложенных расположений. Полный пример конфигурации см. в разделе выше.
Директива 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