Настройка WebDAV-сервера на базе Apache

  • Автор:

webdav-apache24-000.pngWebDAV - расширение протокола HTTP предназначенное для редактирования и управления файлами, размещенными на веб-серверах. К его достоинствам относится работа по стандартным протоколам, что дает возможность работать практически из любого места, где есть доступ в интернет. В настоящее время WebDAV часто используется в качестве сетевой файловой системы предоставляя доступ к удаленным файлам стандартными средствами ОС как будто бы они являлись локальными. В данной статье мы рассмотрим настройку WebDAV на базе популярного веб-сервера Apache.

Прежде всего обозначим некоторые особенности и ограничения. В современных условиях мы не видим смысла использовать WebDAV поверх небезопасного протокола HTTP, разве что в пределах периметра локальной сети. Также не следует использовать Basic-аутентификацию, которая предает пароль по сети в открытом виде, особенно в связке с HTTP, тем более что современные Windows-системы не поддерживают такое сочетание.

Для нормальной работы нам понадобится веб-сервер на базе Apache с настроенным SSL и валидным сертификатом, как настроить такой сервер мы рассказывали в статье: Настраиваем Apache для работы по HTTPS (SSL) с сертификатами Let's Encrypt. В дальнейшем мы будем опираться на приведенную там конфигурацию.

Прежде всего определимся с местом хранения, так как WebDAV является расширением веб-сервера, то и данные логично разместить в /var/www, создадим там директорию webdav и назначим ее владельцем веб-сервер:

mkdir /var/www/webdav
chown www-data:www-data /var/www/webdav

Затем откроем файл конфигурации виртуального хоста, который будет обслуживать WebDAV, в нашем случае это /etc/apache2/sites-available/example.com-ssl.conf и добавим в самый его конец, перед закрывающим тегом </VirtualHost> следующие строки:

Alias /webdav /var/www/webdav

<Directory /var/www/webdav>
DAV On
AuthType Digest
AuthName "dav"
AuthUserFile /etc/davpasswd
Require valid-user
</Directory>

Директива Alias позволяет связать запросы к ресурсу https://example.com/webdav с папкой /var/www/webdav несмотря на то, что она находится вне корневой директории сайта. Секция Directory задает настройки, применяемые к данной директории.

  • DAV On - включает WebDAV
  • AuthType Digest - задает тип аутентификации. Digest-аутентификация не использует пароли в открытом виде, храня и передавая MD5-хеш.
  • AuthName "dav" - имя области аутентификации, можно выбрать на собственное усмотрение
  • AuthUserFile /etc/davpasswd - файл с паролями пользователей
  • Require valid-user - разрешать доступ только прошедшим аутентификацию пользователям.

Теперь заведем пользователей WebDAV ресурса. Для этого используем утилиту htdigest, первого пользователя заводим командой:

htdigest -с /etc/davpasswd dav ivan

Ключ указывает на необходимость создать файл паролей, если файл существует, то он будет удален и создан заново. После имени файла паролей указывается область аутентификации, в нашем случае - dav, и имя пользователя. После чего ему будет необходимо задать пароль. Второго и следующего пользователя создаем командой:

htdigest /etc/davpasswd dav maria

Файл паролей имеет следующую структуру:

ivan:dav:4cd22d3cb72753862alc7310533eb371 
maria:dav:a96fIa2e753cd337d63408324720bb7f

Первой частью строки идет имя, затем область аутентификации и затем MD5-хеш пароля. Для удаления пользователя просто удалите относящуюся к нему строку.

После чего подключим необходимые модули Apache:

a2enmod dav
a2enmod dav_fs
a2enmod auth_digest

Проверим конфигурацию на ошибки и перезапустим сервер:

apachectl -t
service apache2 restart

Для проверки наберите в любом браузере https://example.com/webdav и вы должны увидеть форму аутентификации, после которой вы увидите листинг директории.

webdav-apache24-001.pngДля подключения WebDAV ресурса в файловую систему Windows просто выполните подключение сетевого диска с адресом сервера, не забудьте установить флаги Восстанавливать подключение при входе в систему и Использовать другие учетные данные.

webdav-apache24-002.pngВ Linux настраиваем подключение к серверу, при необходимости протокол указываем как davs (либо dav при доступе через http), например? так выглядит подключение в Gnome 3:

webdav-apache24-003.pngТеперь об особенностях эксплуатации. Внутри WebDAV ресурса нет возможности разграничивать права доступа для разных пользователей, так как в реальности владельцем всех файлов является веб-сервер. Но можно создать несколько WebDAV ресурсов со своим набором пользователей каждый (используем разные имена области аутентификации).

Еще более серьезной проблемой является блокировка открытых файлов, что может приводить к потере данных при совместном редактировании. Несмотря на то, что WebDAV поддерживает блокировки открытых файлов, не все клиенты корректно с ними работают, например, Nautilus Gnome3 корректно обрабатывает такие ситуации, выдавая предупреждение:

webdav-apache24-004.pngА Проводник Windows позволяет перезаписывать файлы без предупреждения. Поэтому используйте WebDAV для совместной работы с большой осторожностью, убедившись, что ваш клиент или приложение корректно работают с блокировками.

Также учтите, что несмотря на то, что все файлы хранятся удаленно, файловый менеджер воспринимает их как локальные, а следовательно листинг папок, содержащих большое количество файлов может оказаться замедленным, особенно если они содержат мультимедийное содержимое, для которого система будет создавать эскизы, поэтому для WebDAV ресурсов лучше использовать представление в виде списка или таблицы, но не значков и, тем более, эскизов.

Как видим, настройка WebDAV на базе веб-сервера Apache очень проста и не занимает много времени.