С рабочей Ubuntu 16.04 мне удалось выполнить шифрование корневого раздела после установки, причем корневой раздел содержал все, кроме /boot. Я ставлю / загружаюсь на отдельный съемный USB-накопитель. Примечательно, что я сделал это перед обновлением до Ubuntu 18, и обновление отлично работало на версии с зашифрованным диском.
Шифрование не было выполнено "на месте", что меня вполне устраивало, потому что я все равно не хотел перезаписывать рабочую версию до тех пор, пока не заработает новая настройка.
Выполнение правильной процедуры чрезвычайно просто и быстро. (Хотя выяснение правильной процедуры заняло чрезвычайно много времени, потому что я следовал некоторым ложным указаниям.)
контур
- Создайте USB-диск live linux - удобно включить сохранение. Загрузитесь с этого активного USB-диска.
- Создайте зашифрованную группу томов luks на пустом разделе. (В моем случае он был на том же диске, что и исходный linux, но это мог быть другой диск.) Создайте / (root) и поменяйте местами логические тома в этом зашифрованном разделе. Они будут действовать как виртуальные разделы в том, что касается скопированного linux.
- Скопируйте файлы из старого корня в новый корень.
- Настройте и разделите другой USB-накопитель на разделы в качестве съемного загрузочного диска.
- Настройте некоторые файлы в новом корне, поколдуйте немного и запустите chroot в новый корень, а затем установите grub на загрузочный диск из новой корневой среды chroot.
подробности
1 - Загрузка с USB-диска live linux - удобно включить сохранение.
Установил 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}
Загрузитесь с помощью live 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/crypt1vgcreate crypt1-vg /dev/mapper/crypt1lvcreate -L 8G crypt1-vg -n swapmkswap /dev/crypt1-vg/swaplvcreate -l 100%FREE crypt1-vg -n rootmkfs.ext4 /dev/crypt1-vg/root
Используйте эти утилиты для просмотра томов и понимания иерархии.
pvscanvgscanlvscanls -l /dev/mapperls -l /dev/crypt1
3- Скопируйте файлы из старого корня в новый корень
mkdir /tmp/old-root mount /dev/ubuntu-vg/root /tmp/old-root/mkdir /tmp/new-rootmount /dev/crypt1-vg/root /tmp/new-root/cp -a /tmp/old-root/. /tmp/new-root/umount /tmp/old-rootumount /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 MiBFree space following (leave default value)Create as: Primary PartitionPartition Name: (leave)File System: fat32Label: (leave)# The second partition: (will be /dev/sdf2)Free space preceding (leave default value)New size 512 MiBFree space following (leave default value)Create as: Primary PartitionPartition Name: (leave)File System: ext4Label: (leave)
5- Настройте некоторые файлы в новом корне, поколдуйте немного и запустите chroot в новый корень, а затем установите grub на загрузочный диск из новой корневой среды chroot.
Найдите несколько UUID для последующего использования. Обратите внимание на выходные данные следующих команд:
blkid /dev/sdf1blkid /dev/sdf2blkid /dev/nvme0n1p4
Смонтируйте корневой раздел и загрузочные разделы
sudo mount /dev/mapper/crypt1--vg-root /mntsudo mount /dev/sdf2 /mnt/bootsudo 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 0UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2UUID=[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/devsudo mount --bind /proc /mnt/procsudo mount --bind /sys /mnt/syschroot /mnt
Теперь настройте загрузочный USB-диск с помощью grub
:
apt install --reinstall grub-efi-amd64grub-install --efi-directory=/boot/efi --boot-directory=/boot --removableupdate-initramfs -k all -cupdate-grub
Теперь вы должны иметь возможность перезагрузиться и загрузиться с помощью недавно созданного загрузочного диска USB.
Стрельба по мячу-
(а) Сеть должна быть подключена для 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
ed и поместите их в меню загрузки на новом загрузочном USB. Обычно это нежелательно, поэтому этого можно избежать, добавив эту строку в /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
записка:Текстовый файл с ключом шифрования может быть добавлен на съемный загрузочный USB-накопитель.