Памятка по использованию WebDAV
18 мая 2020
WebDAV — это расширение протокола HTTP, описанное в RFC4918. WebDAV добавляет в HTTP возможность загружать файлы на сервер, а также удалять / перемещать их, и так далее. В итоге мы получаем что-то очень похожее на FTP, или даже на сетевую файловую систему типа NFS или Samba. Давайте же выясним, как этим пользоваться.
Настойка WebDAV-сервера
В качестве примера рассмотрим настройку обычного, доступного всему миру, веб-сервера, но на который авторизованные пользователи могут еще и заливать файлы по WebDAV. Примем за рабочую теорию, что у вас уже есть сервер под управлением Ubuntu, на котором поднят Nginx с прикрученным к нему Let’s Encrypt.
Далее говорим:
Правим /etc/nginx/sites-enabled/default примерно таким образом:
charset UTF-8;
server_name afiskon.ru;
listen 127.0.0.1:443 ssl
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
root /home/afiskon/afiskon.ru;
location /public/ {
autoindex on;
}
index index.html index.htm;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:r all:r;
client_max_body_size 100m;
create_full_put_path on;
limit_except GET {
auth_basic "Restricted";
auth_basic_user_file /home/afiskon/.webdav_htpasswd;
}
}
}
У вас пути вряд ли будут такими. Файлы будут жить где-то в /var/www/html.
Создаем файл с логинами-паролями:
htpasswd -c .webdav_htpasswd afiskon
chown afiskon:www-data .webdav_htpasswd
chmod 740 .webdav_htpasswd
Важно! Не кладите файл туда, где он будет доступен по WebDAV. В этом случае его сможет просмотреть любой авторизованный пользователь, несмотря на точку в начале имени файла.
Убедимся, что все файлы и каталоги имеют правильные права:
sudo chmod -R 775 ./afiskon.ru/
Просим веб-сервер перечитать конфиг:
Вот и вся настойка!
Работа с WebDAV через curl
Получить список доступных методов:
Получить список файлов и каталогов в XML:
Загрузить файл:
Переместить или переименовать файл:
--user afiskon https://afiskon.ru/old.txt
Создать новую директорию:
Удалить файл или каталог:
curl -v -X DELETE --user afiskon https://afiskon.ru/some-file.txt
Таким образом, какие-то простые операции с WebDAV достаточно комфортно можно делать даже на bash.
Работа с WebDAV на Python
Но на bash мы, конечно же, ничего писать не будем. Вместо этого воспользуемся нормальным скриптовым языком. Как обычно, не засорять систему лишними пакетами поможет virtualenv.
Воспользуемся пакетом webdavclient3:
Создание нового клиента:
>>> from webdav3.client import Client
>>> options = {
... 'webdav_hostname': 'https://afiskon.ru',
... 'webdav_login': 'afiskon',
... 'webdav_password': 's3cr3t'
... }
>>> client = Client(options)
Посмотреть файлы и каталоги:
['file1.txt', 'file2.txt' 'dir1/', 'dir2/']
Получить информацию по файлу или каталогу:
{'created': '2020-01-23T12:34:56Z', 'name': 'file1.txt', 'size': ⏎
'123456', 'modified': 'Thu, 23 Jan 2020 12:34:56 GMT', 'etag': ''}
>>> client.is_dir('file1.txt')
False
Залить файл на сервер:
Скачать файл с сервера:
Переместить или переименовать:
Создать директорию:
True
Удалить файл или директорию:
Заметьте, что когда вы хотите сделать действие с директорией, на конце ее имени обязательно должен быть слэш.
Десктоп-клиенты
В MacOS можно подключиться к WebDAV через Finder. Однако на момент написания этих строк он умел работать только в режиме чтения и заметно подтормаживал.
Как достойную замену можно порекомендовать бесплатную программу Cyberduck. Программа умеет работать не только с WebDAV, но также и с FTP, SFTP, S3, Google Drive, Dropbox и много чем еще. Cyberduck работает под Windows и MacOS. Существует консольный вариант под названием duck. Он работает еще и под Linux. Для тех, кому очень хочется виртуальный жесткий диск, есть вариация под названием Mountain Duck, но только за деньги.
Если Cyberduck вам по каким-то причинам не подошел, рассмотрите альтернативу в лице Transmit. Касаемо текущей ситуации с клиентами под Linux лучше всего обратиться к соответствующей странице на Arch Linux Wiki.
Существуют также мобильные клиенты. Впрочем, я их особо не изучал. Заинтересованным читателям предлагается исследовать этот вопрос самостоятельно.
Заключение
Как видите, с WebDAV трудно соревноваться в простоте. WebDAV может быть неплохим выбором, если вы хотите сделать небольшую файлопомойку на Raspberry Pi. Или, например, вам нужен обычный статический сайт. Но чтобы страницы на нем время от времени обновлялись скриптами, которые запускаются по расписанию в GitHub Actions. В общем, звучит как что-то, что полезно держать на вооружении.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.