Как настроить WebDAV с аутентификацией MySQL на Apache2 (Debian Lenny)
TL;DR
Этот пошаговый гид показывает, как включить WebDAV на Apache2 и аутентификацию пользователей из таблицы MySQL (mod_auth_mysql) на Debian Lenny. Включены команды установки, настройка виртуального хоста, создание базы данных и тестирование с клиентом cadaver. В конце — рекомендации по безопасности, отладке, чек-листы и планы миграции.
Version 1.0
Author: Falko Timme
Введение
WebDAV (Web-based Distributed Authoring and Versioning) — расширения HTTP, которые позволяют редактировать файлы на веб-сервере без загрузки/выгрузки через FTP. Его можно использовать как для редактирования, так и для передачи файлов.
Важно: я не даю гарантий, что инструкции подойдут для вашей системы без адаптации.
Кому это полезно
- Системным администраторам, которые хотят централизовать хранение и доступ к файлам через HTTP.
- Командам, использующим старые окружения Debian Lenny и модуль mod_auth_mysql.
1 Предварительная заметка
В примере используется сервер Debian Lenny с именем server1.example.com и IP 192.168.0.100. Подставьте свои хостнейм и IP при выполнении команд.
2 Установка Apache2, WebDAV, MySQL и mod_auth_mysql
Чтобы установить необходимые пакеты, выполните:
aptitude install apache2 mysql-server mysql-client libapache2-mod-auth-mysqlВо время установки вас попросят задать пароль для MySQL root. Этот пароль будет действителен для root@localhost и [email protected].
Затем включите модули WebDAV и mod_auth_mysql:
a2enmod dav_fs
a2enmod dav
a2enmod auth_mysqlПерезагрузите Apache:
/etc/init.d/apache2 restart3 Создание виртуального хоста и директории для WebDAV
Создадим директорию для веб-контента и назначим владельцем пользователя Apache (www-data):
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/webСделайте резервную копию дефолтного vhost и отредактируйте его:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/defaultПример содержимого vhost:
NameVirtualHost *
ServerAdmin [email protected]
DocumentRoot /var/www/web1/web/
Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
Перезагрузите конфигурацию Apache:
/etc/init.d/apache2 reload4 Настройка vhost для WebDAV и MySQL-аутентификации
Прочитайте документацию mod_auth_mysql в /usr/share/doc/libapache2-mod-auth-mysql. Файлы DIRECTIVES.gz и USAGE.gz нужно распаковать перед чтением:
cd /usr/share/doc/libapache2-mod-auth-mysql
gunzip DIRECTIVES.gz
vi DIRECTIVESgunzip USAGE.gz
vi USAGEСоздайте базу данных webdav и таблицу mysql_auth, а также пользователя MySQL webdav_admin, который будет использоваться mod_auth_mysql:
mysqladmin -u root -p create webdavmysql -u root -pGRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost' IDENTIFIED BY 'webdav_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost.localdomain' IDENTIFIED BY 'webdav_admin_password';
FLUSH PRIVILEGES;(Замените webdav_admin_password на желаемый пароль.)
USE webdav;create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);Вы можете использовать существующие таблицы с учётными записями. Дополнительные поля (например, active) пригодятся для управления доступом.
Добавим тестового пользователя test с паролем test (MD5):
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'), 'testgroup');Если клиент Windows XP подключается без указания порта, Windows переводит имя в формат 192.168.0.100\test. Поэтому создадим вторую запись:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('192.168.0.100\\test', MD5('test'), 'testgroup');(В имени пользователя в SQL нужен двойной обратный слэш для экранирования.)
Выйдите из MySQL:
quit;Отредактируйте vhost и добавьте раздел WebDAV:
vi /etc/apache2/sites-available/defaultВставьте (или дополните) следующие строки:
Alias /webdav /var/www/web1/web
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
Пояснения:
- Alias вместе с
включает WebDAV только для /webdav, в то время как остальные пути остаются обычными HTTP. - AuthBasicAuthoritative Off и AuthUserFile /dev/null предотвращают появление ошибок в логе, связанных с отсутствием файла паролей.
Если у вас есть поле active в таблице, можно ограничить выборку с помощью Auth_MySQL_Password_Clause:
Auth_MySQL_Password_Clause " AND active=1"Важно: строка внутри кавычек должна начинаться с пробела.
Для разрешения логина только определённым пользователям используйте:
require user jane joeДля разрешения входа только членам группы:
require group testgroupПерезагрузите Apache для применения настроек:
/etc/init.d/apache2 reload5 Тестирование WebDAV
Установите cadaver — консольный WebDAV-клиент:
aptitude install cadaverПроверьте доступ локально:
cadaver http://localhost/webdav/Ожидаемая сессия:
server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
server1:~#Также протестируйте с именем 192.168.0.100\test, если клиент Windows использует имя в формате host\user:
server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: 192.168.0.100\test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
server1:~#6 Настройка клиента Windows XP для подключения к WebDAV
Подробное описание настройки клиента Windows XP см. в исходной статье: https://www.howtoforge.com/how-to-set-up-webdav-with-apache2-on-debian-lenny-p2.
Если вы не указываете :80 в URL (например, http://192.168.0.100/webdav), Windows может требовать логин в формате 192.168.0.100\test. При указании порта (:80) используйте просто test.
7 Настройка клиента Linux GNOME для подключения к WebDAV
Руководство по подключению из GNOME в исходной статье: https://www.howtoforge.com/how-to-set-up-webdav-with-apache2-on-debian-lenny-p3.
8 Отладка и распространённые ошибки
Наблюдайте за логом ошибок Apache при попытках подключения:
tail -f /var/log/apache2/error.logОшибка:
[Wed Jun 11 15:39:04 2008] [error] [client 192.168.0.46] (13)Permission denied: Could not open property database. [500, #1]означает, что /var/lock/apache2 не принадлежит пользователю www-data. Решение:
chown www-data /var/lock/apache2Если Windows постоянно запрашивает логин и пароль, укажите порт в URL (http://192.168.0.100:80/webdav) или используйте учётную запись в форме host\user.
9 Рекомендации по безопасности
- Используйте HTTPS (TLS) для защиты паролей при передаче по сети. Настройте SSL на виртуальном хосте и перенаправляйте HTTP на HTTPS.
- Ограничьте доступ по IP или с помощью дополнительных правил Authorization, если ресурсы не должны быть общедоступны.
- Не храните пароли в открытом виде. mod_auth_mysql в этом примере использует PHP_MD5 — это устаревший хеш. По возможности переходите на более современные механизмы аутентификации (см. раздел «Миграция»).
- Минимизируйте привилегии MySQL-пользователя webdav_admin — ему нужны только SELECT/INSERT/UPDATE/DELETE для конкретной базы.
- Регулярно проверяйте лог доступа и ошибок Apache.
10 Миграция и альтернативы
Debian Lenny и mod_auth_mysql устарели. При планировании обновления рассмотрите:
- Переход на более новые версии Debian/Ubuntu с поддержкой современных модулей Apache.
- Использование mod_authn_dbd (аутентификация через базу данных с DBI) или LDAP для централизованной аутентификации.
- Рассмотрение S3/облачных хранилищ или WebDAV-решений с нативными средствами TLS и RBAC.
Миграционные советы:
- Экспортируйте текущую таблицу mysql_auth и преобразуйте хеши к более безопасному формату перед переносом.
- Тестируйте на стенде перед переносом в продакшен.
Дополнительные материалы и образцы
Мини-SOP: как добавить пользователя в таблицу mysql_auth
- Подключитесь к MySQL как root:
mysql -u root -p- Выберите базу и вставьте пользователя с MD5-паролем:
USE webdav;
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('newuser', MD5('newpassword'), 'users');- Проверьте выборкой:
SELECT username, groups FROM mysql_auth WHERE username='newuser';- При необходимости добавьте проверку active через Auth_MySQL_Password_Clause.
Чек-лист администратора перед вводом в эксплуатацию
- Установлены apache2, mysql-server, libapache2-mod-auth-mysql
- Создана база webdav и таблица mysql_auth
- Создан пользователь webdav_admin с минимальными правами
- Настроен виртуальный хост и Alias /webdav
- Включён DAV и модуль auth_mysql
- Проверен доступ локально с cadaver
- Настроен HTTPS и редирект с HTTP на HTTPS
- Ведётся мониторинг логов Apache
Ролевые задачи
- Системный администратор: установить пакеты, создать базу, настроить права и SSL.
- Разработчик: интегрировать клиентские приложения с WebDAV URL.
- Оператор: мониторить логи, проверять бэкапы и доступность.
Критерии приёмки
- WebDAV доступен по HTTPS по URL https://<ваш-хост>/webdav
- Аутентификация проходит с учётной записью из mysql_auth
- Логин и операции создают записи в access/error логах без ошибок 5xx
Маленький факт-бокс
- Порт HTTP: 80. Порт HTTPS: 443. Для корректной авторизации Windows указывайте порт, чтобы избежать преобразования имени пользователя в host\user.
- Таблица mysql_auth в примере использует поля username, passwd, groups.
Однострочные глоссарии
- WebDAV — расширение HTTP для редактирования и передачи файлов по сети.
- mod_auth_mysql — модуль Apache для аутентификации через MySQL.
11 Диаграмма принятия решений при проблемах с аутентификацией
flowchart TD
A[Начать: ошибка аутентификации] --> B{Проверить сетевое соединение}
B -- нет --> C[Проверить доступ к серверу и DNS/IP]
B -- да --> D{Проблема с Apache?}
D -- да --> E[Просмотреть /var/log/apache2/error.log]
D -- нет --> F{Проблема с MySQL}
F -- да --> G[Проверить связь: mysql -u webdav_admin -p]
F -- нет --> H{Хеш пароля корректен?}
H -- нет --> I[Преобразовать пароли или использовать другой механизм шифрования]
H -- да --> J[Проверить формат имени пользователя 'host\\user для Windows']
J --> K[Если всё проверено, включить детальный лог и повторить]12 Тест-кейсы для проверки работоспособности
- Подключение по локальному URL: cadaver http://localhost/webdav/ — ожидается приглашение логина и успешный вход.
- Подключение с удалённой машины по IP: проверить доступ и корректность имени пользователя.
- Попытка доступа без учётных данных — доступ отклонён.
- Проверка логов на отсутствие ошибок 500 при успешной аутентификации.
13 Ссылки
- WebDAV: http://www.webdav.org
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
- mod_auth_mysql: http://modauthmysql.sourceforge.net
Резюме
- WebDAV можно настроить на Apache2 с аутентификацией из MySQL при помощи libapache2-mod-auth-mysql.
- Создайте базу webdav, таблицу mysql_auth и пользователя webdav_admin.
- Настройте Alias /webdav и секцию
для включения DAV и правил аутентификации. - Тестируйте cadaver и наблюдайте за логами.
- Планируйте миграцию на современные механизмы аутентификации и используйте HTTPS.
Важно: Debian Lenny и mod_auth_mysql устарели. По возможности планируйте обновление на поддерживаемую ОС и современные модули для безопасности и совместимости.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента