Блог ИТ склеротика. Свой Dropbox из подручных материалов

Страницы

Расширенный поиск в статьях блога

26 января 2012 г.

Свой Dropbox из подручных материалов

Мы все пользуемся Dropbox и знаем о его преимуществах. Dropbox позволяет нам иметь под рукой важные данные, не заботится о их сохранности и легко делиться информацией с другими людьми. Dropbox имеет клиенты для всех популярных и в том числе мобильных ОС. Им легко и просто пользовтаться. Однако недавние события показали, что не все так радужно.
В начале 2011 года в лицензионное соглашение Dropbox была внесена поправка, суть которой состоит в том, что Dropbox имеет полное право раскрыть ваши частные данные по запросу американских спецслужб, тогда же директор Dropbox разъяснил, что шифрование данных вовсе не означает их закрытость от сотрудников компании, им всего-лишь запрещено их просматривать.

В июне того же года сотрудники компании допустили ошибку, из-за которой доступ к учетными данным всех пользователей системы оказался открыт на четыре часа. Произошло это в результате сбоя при обновлении системы. Жалоб от пользователей не поступало, так что инцидент быстро замяли и он забылся. Однако никто не дает гарантий, что подобного не произойдет в будущем.
Наконец, в августе, на симпозиуме USENIX Security был представлен доклад с детальным описанием трех техник компрометации системы защиты сервиса, которые позволяли получить полный доступ к данным любых пользователей системы. Конечно, на момент публикации доклада все дыры уже были закрыты, но сколько еще неисследованных/неопубликованных дыр осталось в сервисе никто не знает.
И это только 2011 год. Как же уберечь свои данные от кражи? Есть два варианта:
Шифровать инфу самому. Наиболее простой и эффективный способ, описанию которого посвящено огромное количество статьей как в русскоязычном интернете, так и в буржуйском. Кому интересно: http://google.com.
Не пользоваться Dropbox. Ну, не то, чтобы совсем, скорее не пользоваться публичным Dropbox, а сделать свой, с блэкджеком и шлюхами.
Я уже писал как сделать свой Dropbox c помощью GlusterFS. Та статья не имела большой практической пользы и была написана скорее для того, чтобы показать, насколько может быть прост GlusterFS в использовании. Сегодня я опишу как создать полноценный сервис синхронизации файлов в реальном режиме времени с использованием таких распространенных инструментов как SSH, rsync и Linux.
Сразу скажу, что идея не моя и была свиснута с этой статьи, так что все респекты и спасибо просьба отсылать ее автору.
Dropbox из подручных материалов
Что такое Dropbox? По своей сути это ничто иное как обычный rsync, соединенный с какой-то системой, способной отслеживать изменения файлов в реальном времени, и упакованный в красивый и удобный графический интерфейс. Зная это можно довольно быстро и без напряжения создать аналогичную по функциональности систему, которая будет хранить файлы на нашем выделенном сервере, доступ к которому никогда и ни при каких обстоятельствах не получит ни ФБР, ни кулхацкер, начитавшийся мануалов про XSS.
Первое, что нам понадобится, это выделенный сервер (на Амазоне их раздают почти даром) с настроенным OpenSSH. Обычно SSH-сервер уже установлен из коробки, поэтому никаких дополнительных телодвижений предпринимать не придется.
Второе, сервер должен принимать наши подключения без вопросов, для этого настраивает аутентификацию на основе ключей (пользователь, с правами которого выполняется работа должен существовать на обеих машинах):
$ ssh-keygen -N '' -f ~/.ssh/id_dsa
$ ssh-copy-id УДАЛЕННЫЙ_СЕРВЕР
$ ssh УДАЛЕННЫЙ_СЕРВЕР 'chmod 700 .ssh'
Теперь устанавливаем rsync и lsyncd (опять же на клиентскую машину):
$ sudo apt-get install rsync
$ sudo apt-get install libxml2-dev build-essential
$ wget http://lsyncd.googlecode.com/files/lsyncd-2.0.4.tar.gz
$ tar -zxf lsyncd-*
$ cd lsync-*
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ sudo cp lsyncd.conf.xml /etc/
Утилита rsync нам нужна для выполнения синхронизации файлов между машинами, lsync - это инструмент, который будет следить за нашими файлами и, в случае изменений, выполнять синхронизацию с удаленной стороной. Но чтобы научить lsyncd правильно это делать нужно отредактировать конфиг. Для этого открываем файл /etc/lsyncd.conf.xml и изменяем его так, чтобы он стал похож на нечто вроде этого:
<lsyncd version="2.0.4">
    <!-- Стандартные настройки, ничего здесь не трогаем -->
    <settings>
        <logfile filename="/var/log/lsyncd"/>
        <binary filename="/usr/bin/rsync"/>
        <callopts>
            <option text="-lt%r"/>
            <option text="--delete"/>
            <exclude -file/>
        <source />
        <destination />
        </callopts>
    </settings>
    <!-- Настройки синхронизации -->
    <directory>
        <!-- Какой каталог синхронизировать? -->
        <source path="/путь/до/каталога"/>
        <target path="desthost::module/"/>
    </directory>
</lsyncd>
Вот и все. Теперь можно запустить lsyncd и указанный каталог будет синхронизироваться с удаленной машиной. Повторив описанные действия на другой машине, мы сделаем так, что любые изменения в каталоге, сделанные на одном ПК, автоматически отразятся на втором. От Dropbox такая система будет отличаться только тем, что синхронизация файлов будет происходить только тогда, когда клиент обнаружит в каталоге новые или измененные файлы, то есть, если клиент A поместит на сервер новый файл, клиент B увидит и получит его только тогда, когда сам захочет поместить на сервер файл. Это может быть проблемой для клиентов, которые редко обновляют файлы в каталоге, в этом случае придется настроить принудительную синхронизацию с помощью cron и rsync. Для этого создаем в каталоге /etc/cron.hourly скрипт следующего содержания:
#!/bin/sh rsync -rav --delete УДАЛЕННЫЙ_СЕРВЕР:УДАЛЕННЫЙ_КАТАЛОГ ЛОКАЛЬНЫЙ_КАТАЛОГ
И делаем его исполняемым:
$ sudo chmod +x /etc/cron.hourly/sync_dir.sh
Чтобы не настраивать ничего вручную, можно воспользоваться автоматическим установщиком, опубликованным на github. Он включает в себя скрипт, который настроит все автоматически, скрипт автозапуска, который будет поднимать систему при каждой загрузке ОС и имеет систему оповещений, основанную на libnotify. Перед установкой убедитесь, что rsync и lsyncd уже есть в системе.

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free