Внимание: данная инструкция актуальна для Ubuntu 17.04 x64 на UEFI системе.
Внимание №2: если это покажется вам слишком сложным, вы всегда можете переустановить систему, выбрав опцию шифрованной инсталляции в установщике Ubuntu, хотя конфигурация там будет менее "чистой" чем здесь.
Внимание №3: настоятельно рекомендую сначала поставить аналогичную систему в виртуальной машине и провести все нужные операции там, и только убедившись что всё получилось делать что-то с живой системой.
Внимание №4: всегда имейте под рукой загрузочную флэшку с Ubuntu на всякий случай, с её помощью можно творить чудеса:)
У меня всё зашифровано кроме загрузочной флэшки, где grub2, несколько модулей и конфиг что указывает как найти диск что нужно расшифровать.
Не форматируя можно перенести, имея рядом второй диск, иначе я бы сказал что нет, имея второй диск и файловую систему btrfs можно вообще прямо из рабочей системы всё переносить туда/сюда.
В общем и целом я делал так (с BTRFS, ибо намного проще, так же предполагается что у вас UEFI, иначе всё ещё сложнее):
1)
sudo cryptsetup -s 512 luksFormat /dev/nvme0n1
- это для nvme SSD, заменяете на свой диск
2) Открываете криптоконтейнер, создаете файловую систему, дальше либо монтируете и переносите файлы, либо просто добавляете к существующей файловой системе этот новый раздел и удаляете старый (команды не привожу, читайте
https://wiki.archlinux.org/index.php/Dm-crypt/Encr..., там много примеров, и
https://btrfs.wiki.kernel.org/index.php/Main_Page, там тоже всё с примерами есть)
3) Правите
/etc/crypttab
(создаете если нет), мой пример вот:
system UUID=739967f1-9770-470a-a031-8d8b8bcdb350 none luks,discard,keyscript=/etc/cryptroot/system.64.sh
и
/etc/fstab
примерно так:
proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /tmp tmpfs defaults 0 0
/dev/mapper/system / btrfs compress=lzo,noatime,ssd,subvol=/root 0 1
UUID=E495-1F0C /boot/efi vfat defaults,discard 0 0
4) Поскольку указать просто файл с ключем для автоматического открытия luks контейнера нельзя ибо он не попадет в образ initramfs и нужно будет вводить пароль дважды (раз в grub для начала загрузки и раз после начала загрузки чтобы разблокировать корневую файловую систему), то нужно писать shell скрипт (
/etc/cryptroot/system.64.sh
в примере выше), который выведет этот ключ. Для этого генерируем сырые данные для ключа, превращаем данные в base64 чтобы легко было работать с ним в shell скрипте и создаем shell скрипт, потом корректируем права:
sudo mkdir /etc/cryptroot
sudo dd bs=1024 count=4 if=/dev/urandom of=/etc/cryptroot/system
sudo cat /etc/cryptroot/system | base64 | sudo tee /etc/cryptroot/system.64
echo "echo '" | sudo tee /etc/cryptroot/system.64.sh
sudo cat /etc/cryptroot/system.64 | sudo tee --append /etc/cryptroot/system.64.sh
echo "'" | sudo tee --apppend /etc/cryptroot/system.64.sh
sudo chmod 400 /etc/cryptroot/system
sudo chmod 400 /etc/cryptroot/system.64
sudo chmod 500 /etc/cryptroot/system.64.sh
5) Добавляем этот ключ в слот luks контейнера
sudo cryptsetup luksAddKey /dev/nvme0n1 /etc/cryptroot/system.64
6) Помещаем на загрузочную флэшку (gpt таблица, FAT32 раздел с esp флагом) в
EFI/ubuntu
grubx64.efi, (должен уже там быть), создаем папку
x86_64-efi
для модулей, ложим туда модули, которые необходимы для открытия luks контейнера (взять их можно в
/boot/grub/x86_64-efi
):
cryptodisk.mod
gcry_sha256.mod
luks.mod
procfs.mod
7) Конфигурируем grub (копирование модулей и ручное конфигурирование является следствием бага
https://bugs.launchpad.net/ubuntu/+source/grub2/+b...). Во-первых добавляем
GRUB_ENABLE_CRYPTODISK=y
в
/etc/default/grub
(где-то сразу после
GRUB_CMDLINE_LINUX
), создаем/правим
/boot/efi/EFI/ubuntu/grub
со следующим содержимым:
search.fs_uuid E495-1F0C boot
set prefix=($boot)'/EFI/ubuntu'
insmod luks
insmod gcry_sha256
cryptomount -u 739967f19770470aa0318d8b8bcdb350
search.fs_uuid 5170aca4-061a-4c6c-ab00-bd7fc8ae6030 root cryptouuid/739967f19770470aa0318d8b8bcdb350
set prefix=($root)'/root/boot/grub'
configfile $prefix/grub.cfg
Тут
E495-1F0C
это ваш ESP раздел на флэшке,
739967f19770470aa0318d8b8bcdb350
это ваш криптоконтейнер, а
5170aca4-061a-4c6c-ab00-bd7fc8ae6030
это корневая файловая система. Данный конфиг использует скопированные ранее модули, пытается открыть luks контейнер и взять оттуда основной конфиг grub для отображения меню и последующей загрузки. Я бы посоветовал сделать копию конфига рядом на всякий случай, если Ubuntu решит перезаписать его нерабочей версией сверху.
8) Делаем chroot в корневую систему из пункта 2) и обновляем grub
sudo dpkg-reconfigure grub-efi-amd64
(убедитесь что созданный нами конфиг не был затерт), initramfs
sudo update-initramfs -u -k all
Если я ничего не забыл по ходу написания, то после этого можно будет загрузиться в полностью зашифрованную систему. На флэшке будет несколько файлов суммарным размером в 255КиБ, перед отображением меню grub у вас система спросит пароль от luks контейнера, без которого кроме нескольких не конфиденциальных файлов на флэшке всё полностью зашифровано.
P.S. Сорян что получился не краткий ответ, а целая статья, просто у меня были особые требования (та же btrfs), а в интернете куча устаревшего материала, вот и пришлось собирать систему, которая нигде из найденных мною мест целиком описана не была, более того, обнаружились некоторые баги в Ubuntu/grub, обход которых я тоже описал в инструкции.