З робочого Ubuntu 16.04 мені вдалося виконати шифрування кореневих розділів після встановлення, при цьому кореневий розділ містить усе, крім / завантаження. Я кладу / завантажую на окремий знімний usb. Примітно, що я робив це перед оновленням до Ubuntu 18, і оновлення чудово працювало на зашифрованій версії диска.
Шифрування не було зроблено "на місці", що було добре зі мною, оскільки я не хотів перезаписувати робочу версію, поки нова настройка не працювала.
Виконання правильної процедури надзвичайно просто і швидко. (Хоча з'ясування правильної процедури займало дуже багато часу, оскільки я дотримувався деяких помилкових результатів.)
РЕЗУЛЬТАТ
- Створіть живий USB-диск Linux - зручно ввімкнути постійність. Завантажте цей живий USB-диск.
- Створіть групу томів, зашифровану Luks на порожньому розділі. (У моєму випадку він знаходився на тому ж диску, що і оригінальний Linux, але це міг бути інший диск.) Створіть / (root) та поміняйте логічні томи на цьому зашифрованому розділі. Вони будуть діяти як віртуальні розділи, що стосується скопійованого Linux.
- Скопіюйте файли зі старого корінця у новий.
- Налаштуйте і розділіть інший USB, щоб він працював як знімний завантажувальний диск.
- Встановіть деякі файли в новому корені, виконайте магію і переконайтеся в новий корінь, а потім встановіть grub на завантажувальний диск із нового кореневого середовища chroot'd.
ДЕТАЛІ
1 - Завантаження з живим Linux диском 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
}
Завантажтесь за допомогою живого 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'd.
Знайдіть кілька 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.
Виправлення неполадок -
(a) Мережа повинна бути підключена для apt install --reinstall grub-efi-amd64
команди. Якщо мережа підключена, але DNS не працює, спробуйте
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Перед викликом initramfs
поточний vmlinuz...
файл, що використовується в оригінальному Linux, повинен бути присутнім у новому кореневому каталозі. Якщо його немає, знайдіть його і помістіть його.
(С)grub-install
команда при пошуку по замовчуванням всі інші диски Linux можна знайти , навіть якщо вони не mount
ед, і помістити їх в меню завантаження на новий завантажувальний USB. Зазвичай цього не бажано, тому цього можна уникнути, додавши цей рядок до /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
ПРИМІТКА:
Текстовий файл із ключем шифрування може бути доданий до знімного завантажувального USB.