.png)
Estoy intentando lograr una instalación de CentOS 7 cifrada con LUKS con /boot
una partición separada y lvm en una placa base compatible con EFI.
He realizado la partición de una nueva instalación de CentOS desde el antiguo CentOS (instalado desde la GUI) y se ve así:
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
Bootstrapping también tuvo éxito en CentOS chroot (usadoesteyestetutoriales) y ahora está listo para generar una imagen de arranque.
El asunto es que he decidido utilizar un algoritmo no estándar en cryptsetup:
cryptsetup -v --cipher serpent-xts-plain64 --key-size 512 --hash sha256 --iter-time 3000 --use-random luksFormat /dev/sdb3
y ahora me pregunto cómo generar el initrd correcto con mis parámetros.
Los tutoriales me dicen que el siguiente paso es:
mkinitcpio -p linux
sin embargo, no hay ningún mkinitcpio
comando ni /etc/mkinitcpio.conf
para cambiar HOOKS
la lista para que lvm
funcione encrypt
correctamente.
Sin embargo, lo único initrd
que no me resulta familiar es la falta de conocimiento sobre las distribuciones basadas en rpm. La búsqueda de ejemplos de initrd para mi caso no tuvo suerte.
Ahora hay varios archivos/directorios dentro /boot
de 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
Pero dudo que admitan el cifrado de serpiente o incluso luks tan pronto como estos archivos se generaron durante el arranque.
Entonces, mi pregunta es ¿cómo puedo hacer que la cadena de herramientas de arranque sea correcta con luks y serpent a partir de la generación de la imagen del kernel?
Aunque tal vez debería usarlo initramfs
en lugar de initrd
, por lo que también se agradece cualquier sugerencia sobre este enfoque.
Respuesta1
Finalmente terminé de configurar y estoy listo para compartir un conjunto finito de instrucciones sobre cómo se hace para CentOS 7.
Me salté la partición y el arranque manual; hay muchos manuales completos en otros lugares.
Entonces, comience a tener esta variante de partición:
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
luego, monte las unidades necesarias, de modo que quede:
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
Paso 0. Prepare el script chroot. Repetir mount
cada reinicio es tedioso, así que terminé con este script chroot elemental:
#!/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
Paso 1. Instale los módulos específicos de EFI que faltan (fuera de chroot):
sudo yum --installroot=/home/user/target install -y efibootmgr grub2-efi-modules
Paso 2. Editar/etc/crypttab
crypto UUID=UUID_of_/dev/sdb3 none luks,discard
Motivo discard
: estoy usando ssd y descuido un poco de seguridad para un mejor rendimiento de TRIM.Detalles.
Paso 3. Editar/etc/dracut.conf
omit_dracutmodules+="systemd"
add_dracutmodules+="crypt lvm" #sequencing could matter
hostonly="yes" #optional
lvmconf="yes"
Paso 4. Editar/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
Paso 5. Editar/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
- puede ser redundante, corríjame si lo es.
nomodeset
- para eliminar la concurrencia de controladores de hardware (noveaufb vs EFI VGA)
Paso 6. Ejecutargrub2-mkconfig -o /boot/grub2/grub.cfg
Paso 7. Ejecutargrub2-install --target=x86_64-efi --efi-directory=/boot/efi
Paso 8. Ejecutardracut -fv
Todos los pasos anteriores deben realizarse dentro de chroot a menos que se indique lo contrario.
Resultó que el algoritmo de cifrado elegido no influyó de ninguna manera: grub tiene todos los controladores necesarios cargados automáticamente.