在基于 yum 的发行版 (CentOS) 上使用非 aes 算法在 LUKS 加密驱动器上正确手动设置操作系统

在基于 yum 的发行版 (CentOS) 上使用非 aes 算法在 LUKS 加密驱动器上正确手动设置操作系统

/boot我正在尝试在 EFI 友好的主板上使用单独的分区和 lvm 实现 LUKS 加密的 CentOS 7 安装。

我已经从旧的 CentOS(从 GUI 安装)中对新的 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

但我怀疑它们是否支持蛇加密,甚至在引导过程中生成这些文件后就支持 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

相关内容