- PVSM.RU - https://www.pvsm.ru -
Здравствуй хабраменш,
Хочу поделиться с тобой сокровенными знаниями, а также пополнить запасы своих. Так вот, все началось с того, что проект syncany.org умер не родившись, ну или по крайней мере, судя по активности, разродится еще не скоро. Так как сил ждать больше не было, то решил я воспользоваться уже существующими и работающими методами для организации удаленного облачного файлохранилища (в дальнейшем УФХ) с открытым клиентом, а также с шифрацией на стороне клиента. Все что написано дальше имеет отношение к юниксоподобным операционным системам, поэтому пользователям ОС Виндовс дальнейшее изложение можно пропустить.
На сегодняшний день существует такое количество различных облачных хранилищ, что разобраться в их отличиях и преимуществах уже не так просто как раньше — в эпоху царствования дропбокса. Для сравнения сервисов поможет Яндекс или Гуголь, а также, в некоторой степени, вот эта любовно составленная и поддерживаемая табличка в Википедии [1]
Для меня было важно иметь возможность примонтировть удаленный диск с помощью стандартных средств или иметь исходный код клиента, а также иметь возможность самому шифровать содержимое файлов перед их отправкой на удаленный диск. Разбираться с компиляцией клиентов мне не хотелось, поэтому я пошел путем использования стандартных средств операционной системы, тем самым сразу сузив подмножество хороших и годных сервисов.
После прочтения пары хабростатей я внезапно понял, что некоторые облачные хранилища поддерживают замечательное расширение гипертекстового протокола HTTP как WebDAV [2]. Стандартным средством Линукс для монтирования удаленных веб ресурсов является davfs2 [3]. Данный модуль основан на модуле FUSE [4] — файловой системы пространства пользователя (user space module). После установки модуля его нужно переконфигурировать чтобы простые смертные пользователи могли монтировать свои удаленные хранилища. Как это сделать можно легко найти в интернетах или прочитать например вот здесь [5]. Затем нужно не забыть добавить себя в группу davfs2, например вот так:
sudo adduser IchBins davfs2
Теперь можно приступить к вдумчивому выбору сервиса УФХ. Недолго думая, выбираю Box.com [6]. Тем более что после нескольких акции продвижения сервиса любой пользователь мог бесплатно получить целых 50ГБайт бесценного дискового пространства. Единственным недостатком сервиса является, пожалуй, наличие ограничения на максимальный размер файлов в 100МБайт для обычных пользователей (халявщиков). После бесплатной регистрации на сервисе у вас появятся такие атрибуты как — имя пользователя и пароль. Воспользуйтесь ими для доступа к файловой системе с помощью веб интерфейса сервиса, так, чисто для интереса. Теперь для облегчения процесса монтирования УФХ можно добавить в /etc/fstab следующую строку:
https://www.box.com/dav/ /home/IchBins/box.com davfs noauto,user 0 0
Здесь УФХ будет смонтировано в директорию ~/box.com, которая предварительно должна быть создана. Чтобы избежать необходимости вводить пароль каждый раз когда УФХ монтируется, нужно сделать следующее:
mkdir ~/.davfs2
cp /etc/davfs2/davfs2.conf ~/.davfs2
echo "use_locks 0" >> ~/.davfs2/davfs2.conf
echo "https://www.box.com/dav BoxUserName BoxPassword" > ~/.davfs2/secrets
chmod 600 ~/.davfs2/secrets
Здесь BoxUserName и BoxPassword это те атрибуты, которые тебе выдали при регистрации на сервисе, помнишь? Если ты все сделал правильно, то примонтировать и протестировать УФХ можно следующим образом:
mount /home/ichbins/box.com
echo "Eine Datei zum testen" > ~/box.com/testfile.txt
cat ~/box.com/testfile.txt
Т.е. теперь c удаленными (remote) файлами мы можем работать как с локальными
Теперь остается решить вопрос с шифрованием. Не все файлы полезно хранить в открытом виде на удаленном сервере, который тебе не принадлежит. Поэтому имеет смысл создать дополнительно удаленную директорию, в которой вся информация будет шифроваться на лету. Можно воспользоваться например TruCrypt и создать зашифрованный контейнер в этой директории, но размер контейнера не может превышать 100МБайт (ограничение Box.com помнишь?) и его придется постоянно перекачивать целиком чтобы изменить 2 байта. Т.е минимум 200МБайт трафика из-за 2ух байт! Тут на помощь приходит encfs [7]. Преимуществом encfs является то, что она работает как дополнительный слой над уже существующей файловой системой, а следовательно позволяет работать с отдельными файлами, без необходимости пересылать зашифрованный контейнер целиком.
После установки encfs и добавления себя любимого в группу fuse
sudo adduser IchBins fuse
можно приступить к созданию зашифрованной директории в УФХ:
mkdir ~/box.com/crypt # директория будет создана в УФХ
mkdir ~/box.com.crypt # локальная директория куда отобразится директория выше
encfs /home/IchBins/box.com/crypt /home/IchBins/box.com.crypt # тут ~ нельзя, полный путь
Тебе будет предложено несколько вопросов на сообразительность, а также предложат ввести пароль к создаваемой зашифрованной директории. С точки зрения банальной эрудиции, этот пароль не должен совпадать с паролем, который ты получил при регистрации на сервисе Box.com. Если все прошло успешно, то протестировать работу всех служб одновременно можно следующим образом:
cat /etc/passwd > ~/box.com.crypt/mypasswd
ls -la ~/box.com/crypt
На выходе (т.е в поддиректори УФХ) должно быть что-то вроде этого:
ichbins@xubuntu:~$ ls -la ~/box.com/crypt/
total 1.7K
-rw-rw-r-- 1 ichbins ichbins 1.7K May 13 15:25 FPcfOjww7ZzucMGSMgncWXEt
drwxr-xr-x 2 ichbins ichbins 368 May 13 15:25 ./
drwxr-xr-x 5 ichbins ichbins 136 May 13 15:25 ../
-rw-r--r-- 1 ichbins ichbins 1.1K Apr 14 23:24 .encfs6.xml
Таким образом любые файловый операции с файлами из локальной директории ~/box.com.crypt будут автоматически шифроваться и отправляться в УФХ.
Теперь осталось научиться автоматически монтировать зашифрованный раздел, после того как примонтировалась davfs. После нескольких безвозмездно потраченных часов поиска в интернетах, мне так и не удалось выяснить как в Линуксе получить сообщение от системы о том что некая файловая система примонтировалась. Единственным возможным вариантом было мониторить изменения файла /proc/mounts с помощью incrond и скрипта фильтра. Возиться с этим мне не хотелось, поэтому был написан простой скрипт:
cat ~/mount.box.com
#!/bin/sh
userhome=/home/IchBins
service=box.com
isdavmounted=$(mount | grep $service | grep davfs)
isencmounted=$(mount | grep $service | grep encfs)
if [ -n "$isencmounted" -o -n "$isdavmounted" ]; then
#unmount
[ -n "$isencmounted" ] &/${service}.crypt" && msg="Encfs,"
}
[ -n "$isdavmounted" ] &/${service}" && msg="${msg}Davfs "
}
if [ -n "$msg" ]; then
notify-send -u low -i info "$service unmounting" "$msg unmouned successfuly!"
else
notify-send -u low -i error "$service unmounting" "Failed to unmouned $service!"
fi
else
#mount
mount /${userhome}/box.com &/box.com/crypt /${userhome}/box.com.crypt/ &Encfs "
}
}
if [ -n "$msg" ]; then
notify-send -u low -i info "$service mounting" "$msg mouned successfuly!"
else
notify-send -u low -i error "$service mounting" "Failed to mouned $service!"
fi
fi
Чтобы скрипт все время не запрашивал пароль к зашифрованному разделу я сделал следующее:
mkdir ~/.encfs
echo "EncfPass" > ~/.encfs/box.com
chmod 600 ~/.encfs/box.com
Таким образом encfs считывает этот пароль с помощью параметра --extpass
Так и не отыскав в интернетах правильный способ создать в Линуксе на десктопе иконку для монтирования размонтирования файловой системы, я просто создал иконку лаунчер, которая запускает вышеупомянутый скрипт и монтируюет/размонтирует файловую систему УФХ и ее зашифрованного раздела.
При успешной операции монтирования/размонтирования скрипт покажет сообщение вида:

ЗЫ: Пользователи убунту, а также ее производных, могут установить devfs2 и encfs прямо из Ubuntu Software Center
Автор: ichbins
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/7507
Ссылки в тексте:
[1] табличка в Википедии: http://en.wikipedia.org/wiki/Comparison_of_online_backup_services
[2] WebDAV: http://en.wikipedia.org/wiki/WebDAV
[3] davfs2: http://savannah.nongnu.org/projects/davfs2
[4] FUSE: http://fuse.sourceforge.net/
[5] вот здесь: http://sysblogd.wordpress.com/2007/09/09/ubuntu-mounting-remote-filesystem-using-davfs2-fuse/
[6] Box.com: http://box.com/
[7] encfs: http://www.arg0.net/encfs
Нажмите здесь для печати.