Создание собственного WebDAV-сервера

WebDAV позволяет пользователям редактировать, добавлять, скачивать файлы на сервере, без необходимости использования FTP. Для организации сервера webdav на машине под управлением Linux достаточно Apache2 с некоторым набором специфичных модулей. Хранение данных авторизации клиентов  с помощью стандартного для Apache2 файла паролей вида .htpasswd или же реализовать на базе MySQL (пример конфигурации в конце статьи). Реализацию WebDAV с помощью NGINX можно найти по ссылке.

Для начала ставим веб-сервер и включаем необходимые модули:

sudo apt-get install apache2
sudo a2enmod dav
sudo a2enmod dav_fs

Подготавливаем каталог для сетевого хранилища: либо создаем новый, либо выставляем права доступа для www-data к имеющемуся:

mkdir /home/webdav
chown -R www-data. /home/webdav

Создаем пользователя, который будет иметь доступ к файлам на сервере, например webdav, вводим по запросу пароль и подтверждение, не забываем про права доступа к файлу:

sudo htpasswd -c /etc/apache2/webdav.password webdav
sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password

Помимо утилиты htpasswd получить содержимое файла можно с помощью любого онлайн генератора .htpasswd файлов.
Самое время перейти к конфигурированию /etc/apache2/apache2.conf (или одного из виртуальных хостов в /etc/apache2/sites-available/ при использовании модульной настройки веб-сервера). Эта часть текста должна быть помещена внутрь одного из <VirtualHost>

# упрощаем себе жизнь, хранилище будет доступно по ссылке domain/webdav
# вместо указания длинного пути до каталога
Alias /webdav /home/webdav

<Location /webdav>
Options Indexes #разрешаем видеть содержимое папок
DAV On #активируем DAV
AuthType Basic #авторизоваться будем по логину и паролю
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.password #путь до файла паролей
Require valid-user #не пускаем внутрь без авторизации
Allow from all #доступ отовсюду, можно ограничить по желанию
RewriteEngine off #не преобразовывать длинные имена файлов (если включен mod_rewrite)
</Location>

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

WebDAV-клиент в Linux

Из ubuntu-like систем подключиться к сетевому хранилищу можно с помощью менеджера файлов Nautilus, вот как это выглядит на примере Ubuntu 13.10:

  • Входим в Nautilus, выбираем в меню Файлы -> Подключение к серверу
  • Вводим адрес вида dav://username@domain:port/webdav или davs в случае наличия SSL-сертификатов и соответствующей настройке веб-сервера.
  • Нажимаем подключиться и авторизуемся

WebDAV-клиент в Windows

В Windows из коробки есть возможность подключения сетевых устройств, но работает она по умолчанию только с имеющими сертификаты серверами. «Починить» нативный клиент можно с помощью реестра:

  • Открываем regedit
  • Переходим в ветку HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
  • Находим DWORD32-параметр BasicAuthLevel и выставляем ему значение «2»
  • Перезагружаемся

Возможные значения этого параметра такие:
0 — базовая авторизация (по паре логин-пароль) отключена
1 — базовая авторизация только для SSL-шар
2 — базовая авторизация любых шар, в том числе не SSL
После перезагрузки можно пробовать настраивать сетевое хранилище (на примере Windows 7):

  • Открываем Мой компьютер
  • Выбираем «Подключить сетевой диск»
  • Вводим адрес веб-хранилища в формате http://domain/webdav (или https для соответствующего соединения)
  • Ставим галку «Использовать другие данные», чтобы система не пыталась получить доступ с помощью данных учетной записи Windows

Авторизация с помощью MySQL

Использование базы MySQL может быть оправдано при большом количестве клиентов. Устанавливаем необходимые для работы модули (и сам MySQL в случае его отсутствия):

sudo apt-get install mysql-server libapache2-mod-auth-mysql

Включаем установленный модуль:

sudo a2enmod auth_mysql

Входим в mysql и создаем базу и пользователя для доступа к ней:

CREATE DATABASE webdav;
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost' IDENTIFIED BY 'webdav_admin_password';
FLUSH PRIVILEGES;

Создаем таблицу с пользователями:

USE webdav;
create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);

Добавляем пользователя test:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'), 'testgroup');

Правим конфигурацию Apache:

<Location /home/webdav>
DAV On
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthName "webdav"
AuthType Basic
Auth_MySQL_Host localhost
Auth_MySQL_User webdav_admin
Auth_MySQL_Password webdav_admin_password
AuthMySQL_DB webdav
AuthMySQL_Password_Table mysql_auth
Auth_MySQL_Username_Field username
Auth_MySQL_Password_Field passwd
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types PHP_MD5
Auth_MySQL_Authoritative On
require valid-user
</Location>

Перезапускаем веб-сервер и проверяем работоспособность.

Ссылки: