Немножко паранойи для онлайн-хранилища

в 11:02, , рубрики: linux, Ubuntu, Ubuntu One, метки: , ,

Дропбокс появился давно. Но с самого начала идея хранить свои файлы на несвоём сервере мне не нравилась. Ведь хранить хотелось такие вещи, которые ну совсем нежелательно видеть кому-то постороннему…

Сейчас таких сервисов уже десятки, и народ их активно использует. А что же делать нам, дорогие единомышленники-параноики :) да так чтоб и удобство работы не страдало, и приватность блюлась? Решение есть, и оно, как выяснилось, не ново — хранить в онлайне файлы, зашифрованные 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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js