На данный момент во многих дистрибутивах уже из коробки предоставляется возможность создавать шифрованные разделы. Однако, все варианты предусматривают нешифрованный /boot, что является небезопасным.
Настройка начинается при инсталляции новой Ubuntu 21.04.
Нажмите “Установить”, чтобы начать установку Ubuntu в окне инсталлятора Ubiquity, выберите язык и раскладку, подключитесь к Интернет.
После чего откройте терминал Terminal (Ctrl+Alt+T) и продолжите в нём:
sudo -i
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 2,1G 1 loop /rofs loop1 7:1 0 55,4M 1 loop /snap/core18/1997 loop2 7:2 0 219M 1 loop /snap/gnome-3-34-1804/66 loop3 7:3 0 51M 1 loop /snap/snap-store/518 loop4 7:4 0 64,8M 1 loop /snap/gtk-common-themes/1514 loop5 7:5 0 32,3M 1 loop /snap/snapd/11588 sda 8:0 0 476,9G 0 disk sdb 8:16 1 115,5G 0 disk ├─sdb1 8:17 1 2,6G 0 part /cdrom ├─sdb2 8:18 1 4,9M 0 part ├─sdb3 8:19 1 300K 0 part └─sdb4 8:20 1 112,9G 0 part /var/crash
Мой диск /dev/sda и все операции я буду производить над ним. Если у вас другой – не забывайте менять название.
Размечаем диск /dev/sda
sgdisk --zap-all /dev/sda
sgdisk --new=1:0:+512M /dev/sda
sgdisk --new=2:0:+2M /dev/sda
sgdisk --new=3:0:+128M /dev/sda
sgdisk --new=5:0:0 /dev/sda
sgdisk --typecode=1:8301 --typecode=2:ef02 --typecode=3:ef00 --typecode=5:8301 /dev/sda
sgdisk --change-name=1:boot --change-name=2:grub --change-name=3:efi --change-name=5:rootfs /dev/sda
sgdisk --hybrid 1:2:3 /dev/sda
sgdisk --print /dev/sda Disk /dev/sda: 1000215216 sectors, 476.9 GiB Model: SanDisk SD8SN8U5 Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 3C4AA847-FE7E-4F39-8D77-C9454904FDD8 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 1000215182 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 1050623 512.0 MiB 8301 boot 2 1050624 1054719 2.0 MiB EF02 grub 3 1054720 1316863 128.0 MiB EF00 efi 5 1316864 1000215182 476.3 GiB 8301 rootfs
Добавляем шифрование LUKS1 для раздела /boot (потому что GRUB пока не поддерживает LUKS2)
cryptsetup luksFormat --type=luks1 /dev/sda1 WARNING! ======== This will overwrite data on /dev/sda1 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/sda1: XXXXXXXXXXXXXXXXXXXXXXXXXXXX Verify passphrase: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Добавляем шифрование LUKS2 для раздела / (root)
cryptsetup luksFormat --type=luks2 /dev/sda5 WARNING! ======== This will overwrite data on /dev/sda5 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/sda5: XXXXXXXXXXXXXXXXXXXXXXXXXXXX Verify passphrase: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Открываем оба раздела (sda1 – boot, sda5 – rootfs) с помощью введенного выше пароля для дальнейшей инсталляции.
cryptsetup open /dev/sda1 boot Enter passphrase for /dev/sda1: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
cryptsetup -v status boot /dev/mapper/boot is active. type: LUKS1 cipher: aes-xts-plain64 keysize: 512 bits key location: dm-crypt device: /dev/sda1 sector size: 512 offset: 4096 sectors size: 1044480 sectors mode: read/write Command successful.
cryptsetup open /dev/sda5 rootfs Enter passphrase for /dev/sda5: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
cryptsetup -v status rootfs /dev/mapper/rootfs is active. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/sda5 sector size: 512 offset: 32768 sectors size: 998865551 sectors mode: read/write Command successful.
Форматируем разделы boot и rootfs в файловой системе ext4, а sda3 (efi) в файловой системе FAT16
mkfs.ext4 -L boot /dev/mapper/boot mke2fs 1.45.7 (28-Jan-2021) Creating filesystem with 130560 4k blocks and 130560 inodes Filesystem UUID: d0b63335-c4ff-469f-be74-87a14cf966de Superblock backups stored on blocks: 32768, 98304 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
mkfs.vfat -F 16 -n EFI /dev/sda3 mkfs.fat 4.2 (2021-01-31)
mkfs.ext4 /dev/mapper/rootfs mke2fs 1.45.7 (28-Jan-2021) Creating filesystem with 124858193 4k blocks and 31219712 inodes Filesystem UUID: a5500a0f-f5f1-4548-a25f-1f02646d546c Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done
Продолжаем в окне инсталляции
Выбираем раздел /dev/mapper/boot как “Журналированная файловая система ext4”, ставим галочку “Форматировать” и выбираем точку монтирования “/boot“
Выбираем раздел /dev/mapper/rootfs как “Журналированная файловая система ext4”, ставим галочку “Форматировать” и выбираем точку монтирования “/” (корень)
Пока продолжается инсталляция в фоне, в консоли выполняем следующую команду, что обеспечит корректное завершение инсталляции системы с помощью инсталлятора Ubiquity.
while [ ! -d /target/etc/default/grub.d ]; do sleep 1; done; echo "GRUB_ENABLE_CRYPTODISK=y" > /target/etc/default/grub.d/local.cfg
После успешного завершения инсталляции системы с помощью инсталлятора Ubiquity НЕ ПЕРЕЗАГРУЖАЕМСЯ, а продолжаем работу.
Монтируем свеже-установленную систему и заходим внутрь с помощью chroot
mount /dev/mapper/rootfs /target
for n in proc sys dev etc/resolv.conf; do mount --rbind /$n /target/$n; done
chroot /target
mount -av / : проігноровано /boot : successfully mounted /boot/efi : successfully mounted none : проігноровано
Добавляем возможность загрузки с шифрованного раздела /boot
apt install -y --reinstall grub-efi-amd64-signed linux-generic linux-headers-generic cryptsetup-initramfs
echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook
echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf
mkdir /etc/luks
dd if=/dev/urandom of=/etc/luks/boot_os.keyfile bs=512 count=1 1+0 записів прочитано 1+0 записів записано скопійовано 512 байтів, 0,000276825 s, 1,8 MB/s
chmod u=rx,go-rwx /etc/luks
chmod u=r,go-rwx /etc/luks/boot_os.keyfile
cryptsetup luksAddKey /dev/sda1 /etc/luks/boot_os.keyfile Введіть пароль:
cryptsetup luksAddKey /dev/sda5 /etc/luks/boot_os.keyfile ПОПЕРЕДЖЕННЯ: не вистачає блокування каталогу /run/cryptsetup! Введіть пароль:
echo "boot UUID=$(blkid -s UUID -o value /dev/sda1) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab
echo "rootfs UUID=$(blkid -s UUID -o value /dev/sda5) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab
cat /etc/crypttab boot UUID=fe4dbe2e-13aa-4e0f-8533-f0fe7c7fe77f /etc/luks/boot_os.keyfile luks,discard rootfs UUID=f7c32fe4-2d5c-480d-b8de-7f19538a3640 /etc/luks/boot_os.keyfile luks,discard
Выключаем swap-файл (опционально)
swapoff /swapfile
sed -i '\|^/swapfile|d' /etc/fstab
Переустанавливаем initramfs и grub:
echo "GRUB_ENABLE_CRYPTODISK=y" > /etc/default/grub.d/local.cfg
update-initramfs -u -k all
grub-install /dev/sda Встановлюємо для платформи x86_64-efi. Встановлення завершено. Помилок не виявлено.
update-grub Обробляємо файл «/etc/default/grub» Обробляємо файл «/etc/default/grub.d/init-select.cfg» Обробляємо файл «/etc/default/grub.d/local.cfg» Створюємо файл налаштувань grub... Виявлено образ linux: /boot/vmlinuz-5.11.0-17-generic Виявлено образ initrd: /boot/initrd.img-5.11.0-17-generic Виявлено образ linux: /boot/vmlinuz-5.11.0-16-generic Виявлено образ initrd: /boot/initrd.img-5.11.0-16-generic Додаємо пункт меню завантаження для параметрів мікрокоду UEFI виконано
exit
reboot
Это всё.
Удачи!