В середине весны у меня на служебном компьютере умер очередной винчестер, и стало ясно, что так продолжаться не может. Хоть я потерял и не сильно критичные файлы - какие-то старые бэкапы и пиратские дистрибутивы - но это событие всё равно оказалось, что называется, close call. Поэтому было принято стратегическое решение: упорядочить свои данные и работу с ними. Сделал я это следующим образом.
Во-первых, был выполнен аудит имеющейся в моём распоряжении информации и произведено её разделение на три неравные части:
1) Критически важная: продукты моего труда (исходники программ, какие-то запросы, заметки, уникальные документы и т.п.), логины-пароли и т.д.
2) Важная: служебная почтовая переписка, оказавшиеся у меня файлы других пользователей, рабочие файлы и т.д.
3) Не важная: дистрибутивы, скачанные с инета, временные файлы и т.д. В общем, всё, что можно восстановить или не сильно жалко потерять.
Во-вторых, принят регламент дальнейшей работы:
1) В качестве операционной системы использовать Linux.
2) Те задачи, которые не могут быть перенесены под линукс и которые нужно решать по долгу службы (в частности, у нас существенно используются .NET приложения, часть из которых разрабатывал я сам), будут жить на виртуальной машине под управлением Oracle VM VirtualBox.
3) Не раскидываться по компьютерам. Не должно быть такого: что-то дома, что-то на работе, что-то вообще непонятно, где. Всё, что я делаю, должно храниться в одном месте.
4) Вся моя информация должна быть целиком и полностью под моим контролем. Не должно быть так, что воспользовался, скажем, сетевым хранилищем, а оно послезавтра закрылось или посчитало, что мой контент нарушает чьи-то права, и закрыло меня.
Лучшим решением, наверно, было бы переселиться на ноутбук. Но, во-первых, тупо нет лишних денег, и, во-вторых, лень таскать его с работы домой и обратно. Поэтому в качестве паллиатива был прикуплен внешний жесткий диск (3Q 500Гб USB 2.0) за 1800 рублей. Дальше предполагалось следующее:
1) создать четыре криптоконтейнера (критически важная, важная и не важная информация плюс виртуальная машина)
2) копировать их ежедневно на свой домашний компьютер
3) криптоконтейнер с критически важной информацией закидывать в DropBox (это, кстати, накладывает ограничение на объем этого криптоконтейнера - 2 Гб и служит одной из причин наличия приставки "крипто-" во всей этой истории вообще)
И всё получилось как нельзя лучше, но дальше началась та самая "невезуха". В качестве средства для создания криптоконтейнеров я выбрал знакомый мне с незапамятных виндовских времён TrueCrypt 7.1a. Это было в конце апреля. В конце мая вышеуказанный проект начало как-то подозрительно колбасить, и это заставило меня начать поиск альтернатив.
И тут выяснилась поразительная вещь. Оказывается, всё это время у меня под носом тихо лежало всё необходимое для создания полноценных криптоконтейнеров! Я имею в виду cryptsetup с LUKS. Удивительная всё-таки штука этот линукс. Делается подобное, как я понял, так:
1) Создаётся файл myContainer нужного размера:
dd if=/dev/urandom of=myContainer bs=1M count=2048
2) Этот файл превращается в криптоконтейнер:
sudo cryptsetup luksFormat myContainer
3) Просматривается список занятых loopback-устройств:
sudo losetup -aи находится первое свободное, скажем, /dev/loop0. Либо это можно сделать сразу командой:
sudo losetup -f
4) Криптоконтейнер ассоциируется с этим свободным устройством:
sudo losetup /dev/loop0 myContainerлибо, опять-таки, минуя п.3 всё это делается сразу:
sudo losetup -f myContainer
5) Открывается криптоконтейнер командой:
sudo cryptsetup luksOpen /dev/loop0 LUKSmyContainer
6) Содержимое криптоконтейнера форматируется командой:
sudo mkfs -t ext4 /dev/mapper/LUKSmyContainer
7) Теперь можно примонтировать криптоконтейнер к заранее созданной точке myMountpoint:
sudo mount /dev/mapper/LUKSmyContainer myMountpoint
То есть в итоге получается такая цепочка:
файл myContainer -> устройство /dev/loop0 -> устройство LUKSmyContainer -> точка монтирования myMountpoint
Теперь можно производить запись в этот криптоконтейнер, как на обычный диск. Правда, есть одна тонкость, впрочем, характерная для всех моих дисков - в корень писать без рутовых прав мне не удалось. Так что я создаю в корне нужную папку, командой chown меняю ей владельца на себя, и дальше уже работаю в этой папке из-под непривилегированного пользователя.
После того, как работа завершена, можно отключить этот криптоконтейнер, выполнив последовательность команд:
sudo umount myMountpoint sudo cryptsetup luksClose LUKSmyContainer sudo losetup -d /dev/loop0
Кстати, ещё один приятный момент: cryptsetup всю работу с loopback-устройствами может взять на себя. Так что, если мне потребуется примонтировать криптоконтейнер, я могу воспользоваться более простым вариантом:
sudo cryptsetup luksOpen myContainer LUKSmyContainer sudo mount /dev/mapper/LUKSmyContainer myMountpoint(Кстати, в убунте вторая команда не требуется - устройство подхватывается и монтируется автоматически.)
Соответственно, при отключении криптоконтейнера в этом случае понадобятся всего две команды:
sudo umount myMountpoint sudo cryptsetup luksClose LUKSmyContainer(И снова кстати - в убунте при отключении тома через файловый менеджер Thunar никаких дополнительных команд не требуется вообще.)
Ну и напоследок: чтобы посмотреть все подключенные в данный момент устройства, включая и криптоконтейнеры, достаточно выполнить команду:
lsblk --fs