Дропбокс появился давно. Но с самого начала идея хранить свои файлы на несвоём сервере мне не нравилась. Ведь хранить хотелось такие вещи, которые ну совсем нежелательно видеть кому-то постороннему…
Сейчас таких сервисов уже десятки, и народ их активно использует. А что же делать нам, дорогие единомышленники-параноики :) да так чтоб и удобство работы не страдало, и приватность блюлась? Решение есть, и оно, как выяснилось, не ново — хранить в онлайне файлы, зашифрованные eCryptfs.
Речь пойдёт про Linux. Преимущественно про Ubuntu и Ubuntu One…
Если вкратце — eCryptfs оперирует с двумя директориями: в одной из них лежат защифрованные файлы (все шифруются одиним ключом) с опционально зашифрованными названиями, в другой, которая становится доступной после монтирования, лежат сами исходные файлы. На каждый исходный файл — один зашифрованный. Всё просто.
Дальше нужно расшарить через онлайн-хранилище директорию с зашифрованными файлами, и сделать так, чтоб на всех компьютерах, участвующих в синхронизации, были одинаковые ключи для монтирования.
Ubuntu при установке предлагает опцию шифрования домашней директории, при включении которой все пользовательские файлы в зашифрованном виде лежат в /home/.ecryptfs, а содержимое домашних директорий монтируется при логине.
На первый взгляд кажется, что можно расшарить в Ubuntu One /home/.ecryptfs и дело с концом. Как бы не так.
Во-первых: приватный ключ генерируется сам (то есть на всех компьютерах он будет разный).
Во-вторых: в точности синхронизировать полностью все пользовательские директории вряд ли кому-то надо.
В-третьих: использовать этот вид шифрования — не самая удачная идея. Дело в том, что ecryptfs при шифровании названий файлов несколько увеличивает их длину, и некторые и без того длинные, упираются в лимит файловой системы (256 байт для ext4fs).
Тем не менее в Ubuntu есть другое, не менее удобное решение: программа ecryptfs-setup-private, которая всего в 3 вопроса создаст директорию для зашифрованных файлов ~/.Private и директорию для исходных файлов ~/Private, автоматически монтируемую при логине.
$sudo apt-get install ecryptfs-utils
$ ecryptfs-setup-private
Enter your login passphrase [user]:
Enter your mount passphrase [leave blank to generate one]:
Enter your mount passphrase (again):
На вопрос «Enter your login passphrase» нужно ввести пароль на вход в систему — это нужно для автомонтирования.
На вопрос «Enter your mount passphrase» надо ввести пароль для шифрования (одинаковый на всех компьютерах, участвующих в синхронизации).
Потом перелогиниться и расшарить ~/.Private. И всё, можно спать спокойно. Этим способом пользуюсь я, расшаривая файлы через Ubuntu One.
Теперь альтернативный способ для тех, у кого нет ecryptfs-setup-private, кому нужна подстройка под собственные нужды, или у кого директория ~/[.{0,1}]Private уже занята.
Допустим, новая пара директорий будет называться ~/.Storage и ~/Storage.
Итак:
На всех компьютерах, участвующих в синхронизации создаём нужные директории:
mkdir ~/.Storage
mkdir ~/Storage
На одном из компьютеров делаем первое монтирование:
sudo mount -t ecryptfs /home/user/.Storage/ /home/user/Storage/ -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=yes
Спросит «passphrase» — вводим пароль для шифрования (одинаковый на всех компьютерах),
Спросит «Filename Encryption Key (FNEK) Signature» — вводим пароль для шифрования названий (одинаковый на всех компьютерах),
Выдаст примерно такое:
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=a973e495a25fce46
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=a973e495a25fce46
Запоминаем сигнатуры.
Скажет, что с таким паролем диск ещё не монтировался, и спросит подтверждение — скажем «yes»,
Спросит, добавить ли сигнатуру, дабы не спрашивать подтверждения в следующий раз — «yes».
Теперь, используя полученные сигнатуры и пароль, составим полную команду целиком, которая будет выполняться ничего не спрашивая:
mount -t ecryptfs /home/user/.Storage/ /home/user/Storage/ -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=yes,passphrase_passwd=<my-password>,ecryptfs_sig=a973e495a25fce46,ecryptfs_fnek_sig=a973e495a25fce46
Остаётся положить её в какой-нибудь файлик, и запускать при старте.
Автор: unwrecker