在基於 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

相關內容