Правильная ручная настройка ОС на зашифрованном диске LUKS с алгоритмом, отличным от aes, в дистрибутиве на базе yum (CentOS)

Правильная ручная настройка ОС на зашифрованном диске LUKS с алгоритмом, отличным от aes, в дистрибутиве на базе yum (CentOS)

Я пытаюсь добиться установки CentOS 7 с шифрованием LUKS с отдельным /bootразделом и lvm на материнской плате с поддержкой EFI.

Я сделал разбиение новой установки CentOS на разделы из старой CentOS (установленной из графического интерфейса), и это выглядит так:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part  /home/user/target/boot/efi
├─sdb2          8:18   0     1G  0 part  /home/user/target/boot
├─sdb3          8:19   0   700G  0 part  
│ └─crypto    253:3    0   700G  0 crypt 
│   ├─lv-swap 253:4    0    16G  0 lvm   
│   ├─lv-root 253:5    0    50G  0 lvm   /home/user/target
│   └─lv-home 253:6    0   634G  0 lvm   /home/user/target/home

Самозагрузка также прошла успешно в CentOS chroot (использовалсяэтотиэтотобучающие материалы) и теперь готовы к созданию загрузочного образа.

Дело в том, что я решил использовать нестандартный алгоритм в cryptsetup:

cryptsetup -v --cipher serpent-xts-plain64 --key-size 512 --hash sha256 --iter-time 3000 --use-random luksFormat /dev/sdb3

и теперь мне интересно, как сгенерировать правильный initrd с моими параметрами.

В руководствах мне говорят, что следующим шагом будет:

mkinitcpio -p linuxОднако нет mkinitcpioкоманды или списка /etc/mkinitcpio.confдля изменения HOOKS, чтобы lvmэто encryptработало правильно.

Однако, есть только initrdто, что мне незнакомо из-за отсутствия знаний о дистрибутивах на основе rpm. Поиск примеров initrd для моего случая не увенчался успехом.

/bootТеперь внутри chroot есть несколько файлов/каталогов :

bash-4.2# ls
config-3.10.0-514.16.1.el7.x86_64  grub2                                     symvers-3.10.0-514.16.1.el7.x86_64.gz
efi                                initramfs-3.10.0-514.16.1.el7.x86_64.img  System.map-3.10.0-514.16.1.el7.x86_64
grub                               lost+found                                vmlinuz-3.10.0-514.16.1.el7.x86_64

Но я сомневаюсь, что они поддерживают шифрование Serpent или даже Luks, поскольку эти файлы были сгенерированы во время начальной загрузки.

Итак, мой вопрос: как мне создать правильную цепочку инструментов загрузки с Luks и Serpent, начиная с генерации образа ядра?

Хотя, возможно, мне следует использовать initramfsвместо initrd, поэтому любые подсказки по этому подходу также приветствуются.

решение1

Наконец-то я закончил настройку и готов поделиться конечным набором инструкций по ее реализации для CentOS 7.

Я пропустил разбиение на разделы и ручную загрузку — в других местах есть множество полных руководств.

Итак, начните с этого варианта разбиения:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part
├─sdb2          8:18   0     1G  0 part
└─sdb3          8:19   0   700G  0 part  
  └─crypto    253:3    0   700G  0 crypt 
    ├─lv-swap 253:4    0    16G  0 lvm   
    ├─lv-root 253:5    0    50G  0 lvm
    └─lv-home 253:6    0   634G  0 lvm   

затем смонтируйте необходимые диски, чтобы получилось:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part  /home/user/target/boot/efi
├─sdb2          8:18   0     1G  0 part  /home/user/target/boot
└─sdb3          8:19   0   700G  0 part  
  └─crypto    253:3    0   700G  0 crypt 
    ├─lv-swap 253:4    0    16G  0 lvm   
    ├─lv-root 253:5    0    50G  0 lvm   /home/user/target
    └─lv-home 253:6    0   634G  0 lvm   

Шаг 0. Подготовка скрипта chroot. Повторение mountкаждой перезагрузки утомительно, поэтому я остановился на этом элементарном скрипте chroot:

#!/bin/bash
sudo mount /dev/mapper/lv-root /home/user/target
sudo mount /dev/sdb2 /home/user/target/boot
sudo mount /dev/sdb1 /home/user/target/boot/efi
sudo mount --bind /proc /home/user/target/proc
sudo mount --bind /dev /home/user/target/dev
sudo mount --bind /sys /home/user/target/sys
sudo chroot /home/user/target /bin/bash -l

Шаг 1. Установите отсутствующие модули EFI (вне chroot):

sudo yum --installroot=/home/user/target install -y efibootmgr grub2-efi-modules

Шаг 2. Редактировать/etc/crypttab

crypto UUID=UUID_of_/dev/sdb3 none luks,discard

Причина discard- я использую SSD и пренебрегаю некоторой безопасностью ради лучшей производительности TRIM.Подробности.

Шаг 3. Редактировать/etc/dracut.conf

omit_dracutmodules+="systemd"
add_dracutmodules+="crypt lvm" #sequencing could matter
hostonly="yes" #optional
lvmconf="yes"

Шаг 4. Редактировать/etc/fstab

UUID=UUID_of_/dev/sdb1                      /boot/efi       vfat    umask=0077  0 0
UUID=UUID_of_/dev/sdb2                      /boot           ext2    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-root            /               ext4    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-home            /home           ext4    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-swap            none            swap    sw          0 0

Шаг 5. Редактировать/etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_CMDLINE_LINUX="rd.lvm.lv=lv/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rd.luks.options=discard rd.luks.uuid=UUID_of_/dev/sdb3 crashkernel=auto rd.lvm.lv=lv/root rd.lvm.lv=lv/home nomodeset"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

rd.luks.options=discard- может быть излишним, поправьте меня, если это так.

nomodeset- для устранения параллелизма аппаратных драйверов (noveaufb против EFI VGA)

Шаг 6. Выполнитьgrub2-mkconfig -o /boot/grub2/grub.cfg

Шаг 7. Выполнитьgrub2-install --target=x86_64-efi --efi-directory=/boot/efi

Шаг 8. Выполнитьdracut -fv

Все вышеперечисленные шаги необходимо выполнять внутри chroot, если не указано иное.

Оказалось, что выбранный алгоритм шифрования никак не повлиял - grub автоматически загрузил все необходимые драйверы.

Вот материалы, которые мне помогли:1,2,3,4,5

Связанный контент