%20%E4%B8%8A%E4%BD%BF%E7%94%A8%E9%9D%9E%20aes%20%E6%BC%94%E7%AE%97%E6%B3%95%E5%9C%A8%20LUKS%20%E5%8A%A0%E5%AF%86%E7%A3%81%E7%A2%9F%E6%A9%9F%E4%B8%8A%E9%80%B2%E8%A1%8C%E6%AD%A3%E7%A2%BA%E7%9A%84%E6%89%8B%E5%8B%95%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1%E8%A8%AD%E7%BD%AE.png)
/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 會自動載入所有需要的驅動程式。