Свой webdav сервер linux

Про Debian

Иногда возникает необходимость заливать файлики на второй сервер и отдавать их оттуда же по http(s). Ну навскидку — отдельные серверы с картинками для вашего проекта. Или с архивами. Да с чем угодно, мне-то какая разница =)
Поднимать ради этого ftp и городить работы с ftp в коде сайта? гм… SFTP… можно, но где взять разработчика, который умеет sftp из php? Джангисты и рельсовики все умеют, ладно. А если nodejs?
А вот curl/libcurl есть везде, PUT/POST запросы можно сделать из любого ЯП/фреймворка. Поэтому приходят 2 логичных решения — либо написать php-код на принимающей стороне, который будет принимать файлы, либо сделать всё это на голом nginx-e. Окей, решили вторым способом, пришли на тостер, спросили… И получили какой-то бред в ответе — https://toster.ru/q/46578
upload-module? big-upload-module? clientbodyonthefly ещё куда ни шло, это всё же штатная фича..
Да к черту. Открываем доку (окей, в моём случае — задаём вопрос в воздух и получаем ответ от соседа-админа) по nginx и листаем до пункта «http webdav module». Всё, можно заливать файлы (ладно-ладно, конфиг я вам покажу). И решаем сразу все проблемы: нужен только дефолтный nginx из репозиториев debian/ubuntu, размер файла ограничен только стабильностью соединения (13 гиговый файл? да легко!), конфиг писать легко (копипастинг работает, да), авторизация рулится через привычный htpasswd.. В общем — быть. Погнали
Допустим nginx у нас уже есть и что-то по http куда-то отвечает. Нам нужно на images.example.com настроить upload файлов через webdav (и научиться заливать файлы курлом) с авторизацией и научиться показывать эти файлы по http без авторизации. Создаём каталог, где будем всё это хранить, например:

# mkdir /home/user/data/www/images.example.com

Nginx из коробки работает от пользователя www-data (я про деб, в других дистрах это может быть www), от него же он будет и файлы писать, так что пофиксим права:

# chown -R www-data:www-data /home/user/data/www/images.example.com

Теперь пишем конфиг (например, в /etc/nginx/sites-available/00-images.example.com):

# touch /etc/nginx/htpasswd; chmod 600 /etc/nginx/htpasswd

Сгенерим пользователя (если у вас нет утилиты htpasswd, то поставьте пакет apache2-utils — apache2 этот пакет не ставит, если что =)) — команду повторите нужное количество раз, заменяя username, при запуске она запросит пароль для пользователя:

# htpasswd -nm username >> /etc/nginx/htpasswd

Рестартим nginx, если ещё нет и приступаем к заливанию файлов. Я покажу это на примере консольного curl, с libcurl, думаю, разберетесь сами, если уже дочитали до сюда.
Например, у нас есть файл /tmp/bigfile. Нам его нужно будет показывать по адресу http://images.example.com/archives/bigfile.zip
Запускаем curl с хитрыми параметрами:

$ curl -T /tmp/bigfile http://username:password@images.example.com/upload/archives/bigfile.zip

Имейте в виду, что пока файл льётся, он льётся в каталог /var/lib/nginx/body/. Когда upload закончится, файл будет перемещен в docroot через mv — так что если у вас /var и каталог для upload на разных файловых системах, то операция будет не атомарной. Если же на одной файловой системе — то файл появится в docroot мнгновенно и целиком (то есть не будет такого, что вы заливаете файл, а в это время его кусок могут скачать другие).

В некоторых местах вы можете услышать мнение, что передавать логин/пароль так, как это сделал я выше небезопасно и нужно обязательно передавать basic-авторизацию через http-заголовок Authorization, потому что так безопаснее. Так вот — не слушайте потом больше никогда этого человека. Заголовок Authorization это всего-лишь base64 (хоть и немного нестандартный) и декодится по первой же ссылке в гугле — https://webnet77.net/cgi-bin/helpers/base-64.pl
Намного лучше будет настроить https (https://debian.pro/581) и настроить ограничение по ip (https://debian.pro/726). Впрочем, если вам удобнее передавать через заголовок — welcome, но не тешьте себя надеждой, что это позволит избежать раскрытие пароля, если к исходникам заливалки получат доступ.

Читайте также:  Apache php mysql phpmyadmin linux

Да, ещё с этим модулем nginx’a не будут работать webdav-клиенты — уж очень он простой (в нём даже нет вебдавного листинга файлов/каталогов). Если вам нужен настоящий webdav — то советую посмотреть в сторону установки OwnCloud.

Источник

Как настроить WebDAV на Apache в Ubuntu

WebDAV – это набор расширений протокола HTTP, который позволяет управлять файлами на удаленных серверах.

Существует много способов использовать WebDAV-сервер. Например, вы можете поделиться документами Word или Excel со своими коллегами, загрузив их на свой сервер WebDAV. Таким же образом можно поделиться музыкальной коллекцией с семьей и друзьями –достаточно просто предоставить им URL-адрес. При этом никому не нужно устанавливать дополнительное программное обеспечение, поскольку все уже встроено в операционную систему «из коробки».

В этом руководстве вы научитесь настраивать доступ WebDAV через веб-сервер Apache из систем Windows, Mac и Linux по SSL и с парольной аутентификацией.

Требования

  • Сервер Ubuntu 18.04, настроенный по этому мануалу.
  • Домен, привязанный к IP-адресу вашего сервера.
  • Веб-сервер Apache. Чтобы связать домен с вашим веб-сервером, следуйте инструкциям Настройка виртуальных хостов Apache в Ubuntu 18.04.
  • SSL-сертификат для вашего домена. Чтобы получить такой сертификат, обратитесь к руководству Создание сертификата Let’s Encrypt для Apache в Ubuntu 18.04.

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

Войдите на свой сервер как пользователь sudo, чтобы начать работу.

1: Включение WebDAV-модулей Apache

Веб-сервер Apache предоставляет множество дополнительных функций в виде модулей. Их можно включать и отключать, чтобы добавлять и удалять те или иные функции Apache. Функциональность WebDAV обеспечивает модуль, который устанавливается вместе с Apache, но по умолчанию он не включен.

Вам нужно включить модули WebDAV с помощью утилиты a2enmod. Это сделают следующие две команды:

sudo a2enmod dav

sudo a2enmod dav_fs

Теперь перезапустите Apache, чтобы загрузить новые модули в работу:

sudo systemctl restart apache2.service

Итак, вы загрузили и запустили функции WebDAV. На следующем этапе мы настроим Apache для обслуживания файлов по WebDAV.

2: Настройка Apache

Сейчас мы создадим все необходимые конфигурации, чтобы внедрить WebDAV на сервер Apache.

Сначала создайте корневую папку WebDAV, /var/www/webdav, в ней будут храниться файлы, которыми вы хотите поделиться через WebDAV:

sudo mkdir /var/www/webdav

Затем сделайте пользователя Apache, www-data, владельцем папки WebDAV:

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

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

Создайте новый каталог для хранения файла базы данных с помощью утилиты mkdir:

sudo mkdir -p /usr/local/apache/var/

Параметр -p позволяет утилите mkdir создать все родительские каталоги в указанном вами пути (если какого-то из них не существует).

Читайте также:  Линейный вход не подключен windows 10

Затем с помощью утилиты chown передайте права на новый каталог пользователю и группе Apache:

sudo chown www-data:www-data /usr/local/apache/var

Давайте отредактируем файл VirtualHost, который содержит конфигурацию Apache для вашего домена. Он находится в /etc/apache2/sites-enabled/, а его имя заканчивается на le-ssl.conf, если вы использовали Certbot для получения сертификата SSL.

Откройте файл VirtualHost в текстовом редакторе:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

В первой строке поместите директиву DavLockDB:

Затем вставьте директивы Alias ​​и Directory внутри тегов после всех остальных директив:

Alias /webdav /var/www/webdav

Директива Alias ​​связывает запросы к http://your.server/webdav с папкой /var/www/webdav.

Директива Directory включает в Apache поддержку WebDAV для папки /var/www/webdav. Узнать больше о mod_dav можно в документации Apache.

Окончательный файл VirtualHost включает директивы DavLockDB, Alias ​​и Directory, это выглядит следующим образом:

CustomLog $/access.log combined

Alias /webdav /var/www/webdav

Если во время редактирования конфигурации Apache были допущены синтаксические ошибки, веб-сервер не запустится. Поэтому перед перезапуском Apache рекомендуется проверить ошибки в настройках. Для этого используйте утилиту apachectl:

sudo apachectl configtest

Утилита apachectl выведет Syntax OK, если ошибок в файле нет. Получив такое сообщение, вы можете спокойно перезапустить Apache, чтобы активировать новые конфигурации:

sudo systemctl restart apache2.service

Теперь сервер Apache поддерживает расширение WebDAV для обслуживания файлов, которые хранятся в /var/www/webdav. Однако пока мы не включили аутентификацию, читать и редактировать ваши файлы сможет любой пользователь, у кого есть доступ к вашему серверу. В следующем разделе мы включим аутентификацию для WebDAV.

3: Настройка аутентификации для WebDAV

Метод, который мы настроим в этом руководстве, называется дайджест-аутентификацией. Это более безопасный метод аутентификации для WebDAV, особенно в сочетании с HTTPS.

Дайджест-аутентификация работает с файлом, в котором хранятся имена и пароли доверенных пользователей – только они могут получить доступ к серверу WebDAV. Как и файл базы данных, такой файл должен храниться в месте, которое доступно веб-серверу Apache и которое не отображается на вашем сайте.

Поскольку для этой цели мы уже создали папку /usr/local/apache/var/, мы также поместим туда и этот файл.

Сначала создайте в этой папке пустой файл users.password:

sudo touch /usr/local/apache/var/users.password

Затем передайте права на файл группе www-data, чтобы Apache мог читать и изменять файл:

sudo chown www-data:www-data /usr/local/apache/var/users.password

Новые пользователи добавляются в WebDAV с помощью утилиты htdigest. Следующая команда добавит в файл нового доверенного пользователя:

sudo htdigest /usr/local/apache/var/users.password webdav 8host

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

При запуске команды htdigest будет предложено ввести пароль и подтвердить его:

Adding user 8host in realm webdav

Re-type new password:

Следующим нашим шагом будет включение обязательной аутентификации для доступа к WebDAV – тогда Apache будет требовать ее у всех пользователей и читать для этого файл users.password.

Откройте файл VirtualHost:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

Вставьте следующие строки в блок Directory:

Вот что делают эти строки:

  • AuthType Digest включает метод дайджест-аутентификации.
  • AuthName “webdav” позволяет доступ только пользователям области webdav.
  • AuthUserFile /usr/local/apache/var/users.password проверяет учетные данные с помощью файла /usr/local/apache/var/users.password.
  • Require valid-user открывает доступ любому пользователю, который включен в файл users.password и предоставил правильный пароль.

Теперь блок выглядит так:

Включите модуль auth_digest, чтобы Apache мог использовать метод дайджест-аутентификации:

Читайте также:  Кто лучше виндовс или линукс

sudo a2enmod auth_digest

Наконец, перезапустите Apache, чтобы включить новые настройки:

sudo systemctl restart apache2.service

Итак, мы настроили сервер WebDAV для поддержки HTTPS и дайджест-аутентификации. Он уже готов начать раздачу файлов вашим пользователям. В следующем разделе мы протестируем доступ к серверу WebDAV в системах Windows, Linux и macOS.

4: Доступ к серверу WebDAV

Пора проверить доступ к серверу WebDAV с помощью браузеров в системах macOS, Windows и Linux (KDE и GNOME).

Прежде чем приступить, давайте загрузим в папку WebDAV какой-нибудь файл, который мы могли бы открыть во время проверки.

Откройте новый файл в текстовом редакторе:

sudo nano /var/www/webdav/webdav-testfile.txt

Добавьте в файл какой-нибудь текст, а затем сохраните и закройте его. Передайте права на файл пользователю и группе www-data:

sudo chown www-data:www-data /var/www/webdav/webdav-testfile.txt

Теперь мы можем попробовать получить доступ к серверу WebDAV.

Система Linux KDE

Сначала откройте менеджер файлов KDE Dolphin. Затем отредактируйте адресную строку, указав такой URL-адрес:

Когда вы нажмете ввод, вам будет предложено ввести имя пользователя и пароль.

Поставьте галочку в Remember password, если вы хотите, чтобы Dolphin сохранил ваш пароль. Затем нажмите Ок, чтобы продолжить. На экране вы увидите содержимое каталога /var/www/webdav/, которым вы можете управлять так, как если бы оно находилось в вашей локальной системе.

Добавьте сервер WebDAV в закладки, перетащив значок папки из адресной строки в раздел Remote в левой части панели навигации.

Система Linux GNOME

Сначала откройте приложение Files, кликнув на его значок в правой части рабочего стола.

Когда приложение откроется, сделайте следующее:

  1. Нажмите на кнопку + Other Locations.
  2. Введите URL-адрес вашего сервера WebDAV в следующей форме:

Затем нажмите Connect. На экране появится форма для аутентификации. В нее введите ваше имя и пароль.

Нажмите Connect, чтобы войти на сервер WebDAV. Поставьте галочку Remember forever, если вы не хотите каждый раз заново вводить пароль при доступе к этому серверу.

Теперь папка WebDAV будет доступна в приложении Files, где вы сможете управлять ее файлами.

Система macOS

Сначала откройте приложение Finder. Затем откройте меню Go и выберите Connect to server

Теперь вы увидите новое диалоговое окно, в котором можно указать URL-адрес сервера WebDAV. Этот URL должен иметь следующий вид:

Нажмите кнопку Connect, чтобы продолжить. После этого вам будет предложено ввести имя пользователя и пароль.

Снова нажмите Connect, чтобы завершить процесс добавления сервера WebDAV в вашу систему.

Теперь сервер WebDAV можно найти в Finder в разделе Locations.

Система Windows

Сначала в меню Пуск откройте проводник (File Explorer). Когда приложение откроется, выберите This PC в левой панели навигации.

Затем нажмите Map network drive в верхней панели навигации.

Введите URL-адрес вашего сервера WebDAV в следующем формате:

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

Введите учетные данные и нажмите ОК, чтобы войти на сервер. Поставьте галочку в Remember my credentials, если вы не хотите каждый раз вводить пароль при доступе к этому серверу.

Теперь WebDAV появится в разделе This PC в левой панели проводника.

Заключение

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

Источник

Оцените статью