%20%E4%B8%8A%E3%81%AE%E9%9D%9E%20AES%20%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%20LUKS%20%E6%9A%97%E5%8F%B7%E5%8C%96%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%A7%E3%81%AE%E9%81%A9%E5%88%87%E3%81%AA%E6%89%8B%E5%8B%95%20OS%20%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97.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
しかし、rpm ベースのディストリビューションに関する知識が不足しているため、私には馴染みのないことが 1 つありますinitrd
。私のケースの 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
- TRIM のパフォーマンスを向上させるために、SSD を使用しており、セキュリティを少し無視しています。詳細。
ステップ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 は必要なドライバーをすべて自動的にロードします。