На работающем Ubuntu 16.04 мне удалось зашифровать корневой раздел после установки, причем корневой раздел содержал все, кроме / boot. Я ставлю / boot на отдельном съемном USB. Примечательно, что я сделал это перед обновлением до Ubuntu 18, и обновление работало нормально на зашифрованной версии диска.
Шифрование не было сделано «на месте», что меня устраивало, потому что я не хотел перезаписывать рабочую версию, пока новая настройка не заработала.
Выполнение правильной процедуры чрезвычайно просто и быстро. (Хотя выяснение правильной процедуры было чрезвычайно трудоемким, потому что я следовал за некоторыми ложными выводами.)
КОНТУР
- Создайте живой USB-диск linux - удобно иметь постоянство. Загрузитесь с этого живого USB-диска.
- Создайте зашифрованную группу томов luks на пустом разделе. (В моем случае он был на том же диске, что и исходный Linux, но это мог быть другой диск.) Создайте / (root) и поменяйте местами логические тома в этом зашифрованном разделе. Они будут действовать как виртуальные разделы в отношении скопированного linux.
- Скопируйте файлы из старого корня в новый корень.
- Установите и разделите другой USB-диск, чтобы он служил съемным загрузочным диском.
- Установите несколько файлов в новом корне, сделайте немного магии и выполните chroot в новом корне, а затем установите grub на загрузочный диск из новой корневой среды chroot.
ПОДРОБНОСТИ
1 - загрузка с живого linux USB-диска - удобно включить постоянство.
Установил Ubuntu 16 на usb с unetbootin. Графический интерфейс позволяет «живучесть» уточняется, но еще один шаг также требуется , чтобы получить настойчивость в работе - изменить , /boot/grub/grub.cfg
чтобы добавить --- persistent
следующим образом :
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Загрузитесь с живым USB
2. Создайте зашифрованную группу томов luks на пустом разделе. Создайте / (root) и поменяйте местами логические тома в этом зашифрованном разделе.
Предположим, что неиспользуемый раздел для шифрования /dev/nvme0n1p4
.
При желании , если у вас есть старые данные в разделе, который вы хотите скрыть перед шифрованием и форматированием, вы можете произвольно стереть раздел. Смотрите обсуждение здесь .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Настройте шифрование.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Вам будет предложено установить пароль.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Вам будет предложено ввести пароль. Обратите внимание, что crypt1
это произвольное пользовательское имя. Теперь создайте тома и формат.
pvcreate /dev/mapper/crypt1
vgcreate crypt1-vg /dev/mapper/crypt1
lvcreate -L 8G crypt1-vg -n swap
mkswap /dev/crypt1-vg/swap
lvcreate -l 100%FREE crypt1-vg -n root
mkfs.ext4 /dev/crypt1-vg/root
Используйте эти утилиты для просмотра томов и понимания иерархии.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Скопируйте файлы из старого корня в новый корень
mkdir /tmp/old-root
mount /dev/ubuntu-vg/root /tmp/old-root/
mkdir /tmp/new-root
mount /dev/crypt1-vg/root /tmp/new-root/
cp -a /tmp/old-root/. /tmp/new-root/
umount /tmp/old-root
umount /tmp/new-root
cp -a ...
Копирует в режиме архива, сохраняя все режимы файлов и флаги.
4- Настройте и разделите другой USB, чтобы он служил в качестве съемного загрузочного диска.
Я использовал gparted для этого. Установите два раздела. Первый раздел есть vfat
, второй ext2
. Каждый был 512 МБ, вы могли бы уйти с меньшими затратами. Предположим устройство /dev/sdf
.
# The first partition: (will be /dev/sdf1)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: fat32
Label: (leave)
# The second partition: (will be /dev/sdf2)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: ext4
Label: (leave)
5. Установите некоторые файлы в новом корне, сделайте немного магии и выполните chroot в новом корне, а затем установите grub на загрузочный диск из новой корневой среды chroot.
Найдите некоторые UUID для дальнейшего использования. Обратите внимание на результаты следующих команд:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Смонтируйте корневой раздел и загрузочные разделы
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Настройте файл /mnt/etc/fstab
/dev/mapper/crypt1--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/crypt1--vg-swap none swap sw 0 0
UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2
UUID=[uuid of /dev/sdf1] /boot/efi vfat umask=0077 0 1
где "[uuid of ...]" - просто комбинация букв-цифр-дефисов.
Создать файл /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Некоторая магия требуется для входа в среду корневого каталога:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Теперь настройте загрузочный USB-диск с помощью grub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Теперь вы сможете перезагрузиться и загрузиться, используя только что созданный загрузочный диск USB.
Toubleshooting-
(а) Сеть должна быть подключена для apt install --reinstall grub-efi-amd64
команды. Если сеть подключена, но DNS не работает, попробуйте
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Перед вызовом initramfs
текущий vmlinuz...
файл, используемый в исходном linux, должен присутствовать в новом корневом каталоге. Если это не так, найдите его и разместите там.
(c) Команда grub-install
по умолчанию будет искать все другие диски Linux, которые может найти, даже если они не были mount
отредактированы, и помещать их в меню загрузки на новом загрузочном USB. Обычно это нежелательно, поэтому этого можно избежать, добавив эту строку в /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
ПРИМЕЧАНИЕ.
Текстовый файл с ключом шифрования можно добавить на съемный загрузочный USB-накопитель.