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>
Перезапускаем веб-сервер и проверяем работоспособность.
Ссылки: