Журнал LinuxFormat - перейти на главную

LXF124:WebDAV

Материал из Linuxformat
Перейти к: навигация, поиск
Сети Свяжем ваши Linux-ПК, и пускай они вас обслуживают

Содержание

WebDAV: Общий доступ по сети

Сеть
Часть 9: Допуск к работе над документом нескольких пользователей повышает качество и снижает вашу загрузку – Нейл Ботвик покажет, как это сделать.

Когда сэр Тим Бернерс-Ли [Sir Tim Berners-Lee] задумывал Всемирную паутину, он представлял ее себе не просто пассивной средой, где один пользователь просматривает и читает работу других: ему виделся режим чтения/записи, в котором географически разделенные люди могли бы работать над одними и теми же документами. Хотя форумы и комментарии позволяют другим делать приписки к сайтам, это скорее не «чтение/запись», а «чтение/добавление». Чтобы сеть работала по-настоящему, должна быть возможность изменять содержимое. Именно это и отличает ее от журнала, который вы держите в руках.

Мы рассмотрим две очень разных технологии, которые можно применить к серверу Apache, чтобы разрешить изменение содержимого. Вторая – вики – вам почти наверняка знакома, даже если вы только читали вики-сайты. Но сначала рассмотрим WebDAV, расширение HTTP, позволяющее изменять файлы после загрузки и многое другое.

WebDAV

Можно попрекать нас пристрастием к аббревиатурам, но уж с названием «Распределенное создание и версионирование на оснооснове web» (Web-based distributed authoring and versioning) без сокращения обойтись трудно: отныне пусть это будет WebDAV. Сейчас вы, наверное, думаете: «Стоп, мы вроде покончили с управлением версиями с Subversion?» Да, покончили, но при явном сходстве здесь есть и значительные отличия (хотя с Subversion можно работать через WebDAV, но об этом в другой раз).

Обычно в Apache WebDAV уже активирован. Ну, если вы пользователь Gentoo, помешанный на контроле над настройками, то установите Apache с флагом DAV USE и добавьте опцию -D DAV в APACHE2_OPTS в файле /etc/conf.d/apache2. Теперь откройте конфигурационный файл /etc/apache2 и добавьте туда следующие строки:

DAVLockDB /var/lock/Apache2/var/DAVLock
<Directory /var/www/localhost/htdocs>
 Order Allow,Deny
 Allow from all
 DAV On
 AuthType Basic
 AuthName DAV
 AuthUserFile /var/www/localhost/.htpasswd
 <LimitExcept GET OPTIONS>
   Require user admin
 </LimitExcept>
</Directory>

Если вспомнить наш обзор Subversion в LXF118, то одной из ситуаций, с которой мы сталкивались, был конфликт одновременного обращения, когда пользователь начинал работать над файлом, который уже редактировал кто-то другой. Без определенного контроля есть риск, что один пользователь сохранит свою версию, а второй – свою, уничтожив труды первого. Для предотвращения этой ситуации в WebDAV используется блокировка, запирающая файл, когда кто-то открывает его на чтение/запись, чтобы другие пользователи не могли этого делать (хотя могли бы читать его). Директива DAVLockDB задает файл, используемый для управления блокировкой, и должна устанавливаться глобально. Она может уже присутствовать в одном из файлов, подключаемых из httpd.conf. Проверьте это командой

grep -r DAVLock /etc/apache2

Если она не задана, добавьте ее в httpd.conf. Имя файла особого значения не имеет, просто поместите его в подходящее (для вас) место. Остальное можно дописать либо в глобальные настройки, либо в виртуальный хост. Мы занимались виртуальными хостами в первой части этой серии; но в порядке повторения пройденного, поместите

NameVirtualHost *:80

в файл httpd.conf и добавьте фрагмент <Directory>...</Directory> между

<VirtualHost ваше.имя.хоста:80>
</VirtualHost>

Две первые директивы в блоке Directory — стандартная вводка, а третья, понятное дело, активирует DAV для заданного хоста. Три директивы Auth ограничивают доступ к каталогу, но мы поместили директиву Require внутри LimitExcept, так что она применяется ко всем запросам, кроме GET и OPTIONS. Поэтому читать данный каталог можно будет свободно, а для любого изменения потребуется авторизация. Существует и опция Limit, с противоположным эффектом: она запрашивает аутентификацию только для заданных операций, но здесь отлично работает метод «все кроме».

Так как мы будем записывать данные в указанный каталог, и это будет делать web-сервер, директорию нужно сделать доступной на запись для пользователя, от имени которого выполняется Apache. Обычно его и зовут apache; чтобы убедиться в этом, взгляните на директиву User в файле httpd.conf. Перезапустите Apache, чтобы изменения вошли в силу, но перед этим проверьте синтаксис конфигурационного файла, выполнив команду

apache2 -t

Если ошибок нет, положите что-нибудь в каталог htdocs – пока достаточно минимального файла index.html – перезапустите Apache, и вы готовы к проверке.

Теперь вы это видите…

Для проверки подойдет Konqueror, потому что это и браузер, и файловый менеджер с поддержкой WebDAV. Откройте адрес http://ваше.имя.хоста, и вы увидите свою HTML-страничку. Теперь замените http:// на webdav://, и вместо index.html, который Apache автоматически выдает при попытке считать каталог, вы увидите список файлов. Кликните правой кнопкой мыши на index.html и откройте его в KWrite или Kate, измените текст и сохраните файл. Переключитесь обратно на адрес с http:// – откроется измененная страничка.

LXF124 69 1.jpg Konqueror иллюстрирует двуличие Apache с WebDAV. Слева — обычный вид HTTP, а справа выдан доступ на чтение и запись файлов.

Вы не обязаны пользоваться Konqueror: с WebDAV работают многие другие программы, хотя подсистема Kioslaves в KDE сильно упрощает задачу. Если вы пользователь Gnome, запустите Nautilus, выберите File > Connect To Server (Файл > Подключиться к серверу) и адрес своего сервера WebDAV, затем откройте файл в Gedit или OpenOffice.org.

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

Хотя мы рассмотрели только правку HTML-документов, WebDAV гораздо более гибок. Через HTTP можно читать файлы всех типов, смотреть видео, загружать ПО и т. д. Каталог WebDAV представляет собой по-настоящему удобное удаленное хранилище файлов, и некоторые коммерческие сервисы хранения данных используют WebDAV именно для этой цели. Пользователи, имеющие право на запись, могут выгружать файлы с помощью любого файлового менеджера с поддержкой WebDAV, а другие могут подключаться по HTTP с помощью обычного браузера и загружать их. Вы не ограничены и ПО Linux – существует масса программ для других платформ (Windows Explorer и Microsoft Office поддерживают WebDAV).

Скорая помощь

Для тестирования доступа извне, не вставая с кресла, воспользуйтесь ноутбуком с мобильным 3G-модемом.

Так как вы предоставляете доступ на чтение/запись через Интернет, примите разумные меры предосторожности: самое главное – не пускайте никого без нужды. Если это интранет, не открывайте доступ через Интернет. Прежде чем открыть доступ к своему серверу через Интернет, убедитесь, что аутентификация настроена и работает, а открыв доступ, проверьте ее снова. Убедиться в этом, не вставая из-за стола, удобнее всего на ноутбуке с мобильным широкополосным модемом.

Если ваш Apache уже обрабатывает web-страницы и вы не хотите ему мешать, можно либо запустить второй экземпляр Apache на другом порту, либо организовать тестовую систему на виртуальной машине VirtualBox или одном из продуктов VMware. Виртуализация идеальна для такой работы, потому что позволяет легко изолировать виртуальный компьютер от остальной сети.

Сохраним данные частными

Мы уже упомянули, что используемый каталог должен быть открыт на запись для пользователя, от имени которого запущен сервер Apache. Новые файлы также принадлежат ему, а не аутентифицированному пользователю, который их создал. Чтобы уменьшить риск неприятных последствий от возможного эксплойта, ограничьте действия этого пользователя: например, установите его оболочку в /bin/false. Репозиторий WebDAV для Apache считается приватным, и возможности изменять файлы вне Apache, например, путем прямого доступа к файловой системе, быть не должно. Аналогично, если вы запускаете FTP-сервер, то у него не должно быть прав на запись в каталоги WebDAV.

Если вы позволяете скачивать личные файлы через Интернет, одного контроля над доступом недостаточно. Вы наверняка захотите, чтобы при передаче данные были защищены, а значит, понадобится безопасное соединение через SSL (Secure Sockets Layer). Мы передаем данные по HTTP, и здесь есть возможность защиты с помощью HTTPS – ею-то вы и пользуетесь, скидывая деньги со своей кредитки на Amazon и ThinkGeek. Все, что тут нужно – настроить защищенный виртуальный хост, а уж он обезопасит WebDAV автоматически.

Для загрузки модулей SSL в Apache может потребоваться их предварительная активация. Например, в Ubuntu нужно выполнить следующие команды:

sudo ln -s ../mods-available/ssl.load /etc/Apache2/modsenabled/
sudo ln -s ../mods-available/ssl.conf /etc/Apache2/modsenabled/

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

sudo ln -s ../sites-available/default-ssl /etc/Apache2/sitesenabled/000-default-ssl

Можно либо воспользоваться виртуальным хостом SSL по умолчанию, либо создать свой обычным способом. Лишь замените порт 80 на 443 в директиве VirtualHost и добавьте директивы для активации SSL и указания местоположения сертификатов:

<VirtualHost your.host.name:443>
 SSLEngine on
 SSLCertificateFile /etc/Apache2/ssl/server.crt
 SSLCertificateKeyFile /etc/Apache2/ssl/server.key
 ...Все остальное...
</VirtualHost>

Проще всего создать копию файла виртуального хоста default-ssl и изменить имена и пути надлежащим образом. Как обычно, перезапустите сервер, чтобы изменения вступили в силу. Сделать это можно из менеджера сервисов или командой

apache2ctl restart

Путь Wiki

При упоминании о совместно разработанных web-документах, многие сразу думают о вики – и в частности, о Википедии. Идея web-сайта, содержимое которого может добавлять, редактировать и даже удалять кто угодно, поначалу кажется формулой создания хаоса, но на самом деле работает прекрасно. Конечно, вы не обязаны открывать вики всем подряд – большинство движков обеспечивают контроль доступа, ограничивая группам пользователей права на редактирование или вообще давая права только на чтение страниц.

Движки вики часто пишут на PHP или похожем серверном языке; они используют базу данных SQL для хранения содержимого и устанавливаются на сервер Apache – классический пример LAMP. Википедия – самый известный и самый популярный пример вики, и вы не прогадаете, выбрав движок этого проекта, MediaWiki (http://www.mediawiki.org).

У него есть несколько зависимостей, и лучше всего устанавливать его с помощью менеджера пакетов. После установки настройте базу данных – вы сможете сделать это через его web-интерфейс. Поскольку у вас еще не предусмотрен контроль доступа, не показывайте свой каталог MediaWiki или виртуальный хост никому, пока не закончите его настройку. Процесс настройки для большинства дистрибутивов одинаков, хотя некоторые детали могут различаться. В Ubuntu нужно открыть файл /etc/apache2/conf.d/mediawiki.conf и раскомментировать третью строку (ту, что задает псевдоним). Сделать это нужно потому, что в Ubuntu рекомендуется использовать не виртуальный хост, а алиас, хотя в других дистрибутивах MediaWiki работает на виртуальном хосте безо всяких проблем. Если вас не устраивает адрес http://ваш.хост/mediawiki, измените первый путь в директиве Alias, например, на более общий вариант:

Alias /wiki /var/lib/mediawiki

Теперь откройте в браузере адрес http://localhost/wiki и щелкните по ссылке Setup [Настройка]. Если вы видите сообщение «Can’t write config file, aborting» [Невозможно записать данные в конфигурационный файл, операция прервана], установите права доступа к каталогу config так, чтобы в него мог писать пользователь Apache:

chmod a+w /path/to/wiki/config

Это нужно только при начальной конфигурации, поэтому, покончив с ней, верните прежние права доступа командой

chmod go-w /path/to/wiki/config

Скрипт настройки попросит вас создать пользователя-администратора и потребует пароль root для создания базы данных. Если вы не знаете пароля root, придется или просить администратора создать базу данных, или воспользоваться существующей. Установщик создаст в базе необходимые таблицы. Пароль, который нужно указать, это пароль пользователя root MySQL, а не компьютера в целом – важное отличие, особенно для пользователей Ubuntu. Если менеджер пакетов установил MySQL как зависимость MediaWiki, он запросит у вас пароль root; в противном случае, он уже задан.

Различные опции задокументированы на странице настройки; прочтите их, прежде чем нажимать на кнопку Install [Установить]. Если установщик не найдет ошибок в указанных настройках, он велит вам перейти к файлу LocalSettings.php и установить его права доступа так, чтобы читать его мог только пользователь, от имени которого запущена база данных (обычно apache). Сделайте это командами

chown apache: LocalSettings.php
chmod 600 LocalSettings.php

Затем сбросьте права доступа для каталога config как указано выше. Теперь кликните по ссылке в сообщении ‘Installation successful!’ [Установка завершена успешно!], чтобы начать пользоваться вики. Можно было бы просто нажать кнопку Edit [Правка] и начать набирать текст, но лучше, прежде чем добавлять содержимое, набросать для себя общую структуру и настроить под нее среду. А еще лучше (поскольку вики рассчитана на совместную работу) настроить среду и пригласить добавлять содержимое других пользователей.

Сертификаты SSL

Скорая помощь

Если MediaWiki кажется вам несколько тяжеловесной и вам нужно всего лишь работать над несколькими документами по сети, можете воспользоваться гораздо более простой альтернативой, в которой нет многих возможностей и сложности MediaWikiDokuWiki (http://wiki.splitbrain.org/wiki:dokuwiki).

Если вы хотите предоставить защищенный доступ по HTTPS, на сайте нужно установить сертификат. Во многих дистрибутивах есть пакет с самоподписанным сертификатом. Его достаточно для тестирования, но недостаточно для использования в реальном мире. HTTPS предоставляет два типа защиты: во-первых, передаваемые данные шифруются, и когда вы отправите сведения о своей кредитке в любимый интернет-магазин, ни один человек, перехвативший их, не сможет их прочесть. Во-вторых, он гарантирует, что вы подключились туда, куда хотели, а не отправляет данные вашей кредитки на какой-нибудь сомнительный сайт на другом конце света. Самоподписанный сертификат заботится о первой части, но не о второй. Если вы хотите только спрятать свои правки от любопытных глаз, он сделает свою работу, но для настоящей безопасности нужно приобрести должным образом аутентифицированный сертификат.

Контроль доступа

LXF124 71 1.jpg Блокирование непроверенных пользователей — простой способ ограничить редактирование вики только теми, кого можно идентифицировать.

Позволение каждой собаке редактировать вашу вики выглядит не совсем удачной идеей, и иногда так и есть. Контроль доступа может производиться на нескольких уровнях, самый простой из которых – не разрешать редактировать страницу пользователям, которые не вошли в систему или у которых нет привилегий администратора. Если зайти в систему от имени администратора, созданного во время установки, над каждой страницей будет отображена вкладка Protect [Защита], которую можно использовать для управления правами доступа на редактирование к этой странице.

Все остальное требует небольшого исследования файла LocalSettings.php. Он написан на PHP, и минимальное понимание этого языка вам поможет, но оно не обязательно, потому что файл в основном состоит из присваиваний значений переменным. Например, строка

$wgEmailConfirmToEdit=true;

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

Файл LocalSettings.php довольно короток, как и основные файлы настройки, потому что установки по умолчанию заданы в includes/DefaultSettings.php. Однако редактировать его нельзя, так как он будет перезаписан во время обновления и ваши бережно сделанные настройки пропадут. Вместо этого скопируйте из него настройки, которые хотите изменить, в файл LocalSettings.php и измените их там. Настройки в LocalSettings.php имеют приоритет над настройками по умолчанию.

Отшлифуйте безопасность

Более подробные права доступа можно установить в переменной $wgGroupPermissions. Это сложный массив, который может выглядеть довольно устрашающе, но отдельные настройки понять несложно. Например, следующая строка в файле DefaultSettings.php разрешает редактировать страницы зарегистрированным пользователям:

$wgGroupPermissions[‘user’][‘edit’] =true;

Скопируйте ее в файл LocalSettings.php и измените true на false, чтобы отобрать это право доступа. Оно ссылается на группу User, в которую входят зарегистрированные (и подтвердившие регистрацию, если это необходимо) пользователи. Есть и другие группы, такие как Sysop и Bureaucrat, с большими правами. Можно изменить права доступа для каждой из этих групп, а также контролировать, какие пользователи принадлежат к группам с большими правами доступа. Можно также создать новые группы, например, объединяющие членов отдельных проектов. Все это описано в вики; зайдите на страницу http://your.hostname/wiki/Manual:Configuration_settings, чтобы увидеть полный список опций.

Теперь, имея сервер DAV, вики или и то, и другое, вы просто обязаны поддерживать документооборот своей организации в отличной форме, попутно позволяя другим делать большую часть работы. LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика