dm-crypt (Español)/System configuration (Español)
mkinitcpio
Dependiendo de los escenarios particulares, tendrá que activarse un conjunto de los siguientes hooks de mkinitcpio (Español):
busybox | systemd | Caso de uso |
---|---|---|
encrypt
|
sd-encrypt
|
Siempre necesario cuando se cifra la partición raíz, o una partición que necesita ser montada antes de la raíz. No es necesario en todos los demás casos, ya que los scripts de inicialización del sistema como /etc/crypttab se encargan de desbloquear otras particiones cifradas. Este enlace debe colocarse después del hook udev o systemd .
|
keyboard
|
Necesario para hacer que los teclados funcionen en el espacio temprano del usuario. | |
keymap
|
sd-vconsole
|
Proporciona soporte para mapas de teclas no estadounidenses para escribir contraseñas de cifrado; debe colocarse antes del hook encrypt . Configure su mapa de teclas en /etc/vconsole.conf , vea Keyboard configuration in console (Español)#Configuración persistente.
|
consolefont
|
Carga un titpo de letra de consola alternativo en el espacio temprano del usuario. Configure su tipo de letra en /etc/vconsole.conf , vea Linux console#Persistent configuration.
|
Otros hooks necesarios deben quedar limpios en otros pasos manuales seguidos durante la instalación del sistema.
Recuerde regenerar initramfs después de guardar los cambios.
Ejemplos
He aquí una configuración típica del archivo /etc/mkinitcpio.conf
utilizando el hook encrypt
:
/etc/mkinitcpio.conf
... HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck) ...
Aquí una configuración con initramfs basada en systemd utilizando el hook sd-encrypt
:
/etc/mkinitcpio.conf
... HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt sd-lvm2 filesystems fsck) ...
Cargador de arranque
Para activar el arranque de una partición raíz cifrada, es necesario configurar un conjunto de los siguientes parámetros del kernel. Consulte los parámetros del kernel para obtener instrucciones específicas para su cargador de arranque.
Por ejemplo, si utiliza GRUB, los parámetros relevantes se añadirán a /etc/default/grub
antes de generar el archivo de configuración principal. Vea también GRUB (Español)#Advertencias cuando se instala en entorno chroot como otro punto a tener en cuenta al instalar el cargador GRUB.
Los parámetros del kernel que necesita especificar dependen de si está utilizando el hook encrypt
o sd-encrypt
.
Parámetros del Kernel
Los parámetros del kernel como root
y resume
se especifican de la misma manera que los hooks encrypt
y sd-encrypt
.
root
El parámetro root=
especifica el dispositivo
del sistema de archivos raíz real (descifrado):
root=dispositivo
- Si el sistema de archivos está formateado directamente en el dispositivo descifrado, este será
/dev/mapper/nombre_del_dispositivo_mapeado
. - Si un LVM se activa primero y contiene un volumen lógico raíz cifrado, el formato anterior se aplica igual.
- Si el sistema de archivos raíz está contenido en un volumen lógico de un LVM cifrado, el mapeador de dispositivos para él vendrá formulado de forma general como
root=/dev/grupo de volúmenes/volumen lógico
.
grub.cfg
con grub-mkconfig. Al ejecutar el script grub-mkconfig, este determinará el UUID correcto del sistema de archivos descifrado y lo añadirá al archivo grub.cfg
automáticamente.resume
resume=dispositivo
-
dispositivo
es el dispositivo del sistema de archivos descifrado (espacio de intercambio) utilizado para suspender en disco. Si el espacio de intercambio está en una partición separada, lo estará en el formato/dev/mapper/swap
. Véase también dm-crypt/Swap encryption (Español).
Utilizar el hook encrypt
encrypt
tiene algunas limitaciones. No es compatible con:
- desbloquear varios discos cifrados (FS#23182). Solo un dispositivo se puede desbloquear en initramfs;
- utilizar un encabezado LUKS separado (FS#42851).
cryptdevice
Este parámetro hará que el sistema solicite la contraseña para desbloquear el dispositivo que contiene la raíz cifrada en un arranque en frío. Es analizado mediante el hook encrypt
para identificar qué dispositivo contiene el sistema cifrado:
cryptdevice=dispositivo:nombre del dipositivo mapeado
-
dispositivo
es la ruta al dispositivo que contiene al dispositivo cifrado. Se recomienda el uso de nombres de dispositivos de bloques persistentes. -
nombre del dipositivo mapeado
es el nombre del dispositivo - mapeado dado al dispositivo después de descifrarlo, que estará disponible como/dev/mapper/nombre del dipositivo mapeado
. - Si un LVM contiene el volúmen root cifrado, el LVM se activa primero y el grupo de volúmenes que contiene el volumen lógico de la raíz cifrada sirve como dispositivo. A continuación, lo que sigue al grupo de volúmenes le corresponderá la raíz mapeada. El parámetro sigue el formato siguiente:
cryptdevice=/dev/nombre_del_grupo_de_volúmenes/nombre_del_volumen_lógico:nombre_del_dispositivo_mapeado
cryptkey
Este parámetro especifica la ubicación de un archivo de claves y es requerido por el hook encrypt
para leer dicho archivo de claves para desbloquear cryptdevice
(a menos que haya una clave en la ubicación por defecto, ver más abajo). Puede tener tres conjuntos de parámetros, dependiendo de si el archivo de claves existe como un archivo en un dispositivo en particular, como un flujo de bits que comienza en una ubicación específica o como un archivo en initramfs.
Para un archivo en un dispositivo, el formato es:
cryptkey=dispositivo:tipo de sistema de archivos:ruta
-
dispositivo
es el dispositivo de bloque sin formato donde existe la clave. -
tipo de sistema de archivos
es el tipo de sistema de archivos deldispositivo
(o auto). -
ruta
es la ruta absoluta del archivo de claves dentro del dispositivo.
Ejemplo: cryptkey=/dev/usbstick:vfat:/secretkey
Para un flujo de bits en un dispositivo, la ubicación de la clave se especifica con el formato siguiente:
cryptkey=dispositivo:desplazamiento:tamaño
donde el desplazamiento («offset») y el tamaño («size») están en bytes. Ejemplo: cryptkey=/dev/sdZ:0:512
lee un archivo de claves de 512 bytes desde el principio del dispositivo.
:
, se debe soslayar con una barra invertida \
. En ese caso, el parámetro cryptkey sería el siguiente: cryptkey=/dev/disk/by-id/usb-123456-0\:0:0:512
para una clave en un usb con el id usb-123456-0:0
.Para un archivo incrustado en initramfs el formato sería [1]:
cryptkey=rootfs:ruta'
Ejemplo: cryptkey=rootfs:/secretkey
También tenga en cuenta que si cryptkey
no se especifica, por defecto es /crypto_keyfile.bin
(en initramfs).[2]
Véase también dm-crypt/Device encryption (Español)#Archivos de claves.
crypto
Este parámetro es específico para pasar las opciones de la modalidad plain de dm-crypt al hook encrypt.
Toma el formato siguiente:
crypto=<hash>:<algoritmo de cifrado>:<tamaño clave>:<desplazamiento>:<salto>
Los argumentos se relacionan directamente con las opciones de cryptsetup. Consulte dm-crypt/Device encryption (Español)#Opciones de cifrado para la modalidad plain
Para un disco cifrado con solo las opciones predeterminadas de plain, se deben especificar los argumentos de crypto
, pero cada entrada se puede dejar en blanco:
crypto=::::
Un ejemplo específico de argumentos sería:
crypto=sha512:twofish-xts-plain64:512:0:
Utilizar el hook sd-encrypt
En todo lo que sigue rd.luks
puede reemplazarse con luks
. Los parámetros rd.luks
solo son respetados por initrd. Los parámetros luks
son respetados tanto por el sistema principal como por initrd. A menos que desee controlar dispositivos que se desbloqueen después del inicio desde la línea de órdenes del kernel, use rd.luks
. Vea systemd-cryptsetup-generator(8) para más opciones y detalles.
- Si existe el archivo
/etc/crypttab.initramfs
, mkinitcpio (Español) lo agregará a initramfs como/etc/crypttab
, pudiendo especificar allí los dispositivos que deben desbloquearse en el arranque. La sintaxis está documentada en #crypttab y crypttab(5). -
/etc/crypttab.initramfs
no se limita a usar solo UUID comord.luks
. Puede usar cualquiera de los métodos para asignar nombres permanentes a dispositivos de bloques.
- Todos los parámetros de
rd.luks
se pueden especificar reiteradas veces para desbloquear varios volúmenes cifrados con LUKS. - Los parámetros
rd.luks
solo admiten el desbloqueo de dispositivos LUKS detectables. Para desbloquear un dispositivo dm-crypt sin formato o un dispositivo LUKS con un encabezado separado, debe especificarlo en/etc/crypttab.initramfs
. Vea #crypttab para la sintaxis.
/etc/crypttab
o /etc/crypttab.initramfs
junto con parámetros de luks.*
o rd.luks.*
, solo se activarán los dispositivos especificados en la línea de órdenes del kernel y verá el mensaje Not creating device 'devicename' because it was not specified on the kernel command line.
. Para activar todos los dispositivos en /etc/crypttab
no especifique ningún parámetro luks.*
y utilice rd.luks.*
. Para activar todos los dispositivos en /etc/crypttab.initramfs
no especifique ningún parámetro luks.*
o rd.luks.*
.rd.luks.uuid
rd.luks.uuid
se puede omitir cuando se utiliza rd.luks.name
.rd.luks.uuid=UUID
Especifique el UUID del dispositivo que se va a descifrar en el arranque con este indicador. Si el UUID está en /etc/crypttab.initramfs
, se usarán las opciones enumeradas allí. Para luks.uuid
se usarán las opciones de /etc/crypttab.initramfs
o /etc/crypttab
.
De forma predeterminada, el dispositivo mapeado estará ubicado en /dev/mapper/luks-UUID
donde UUID es el UUID de la partición LUKS.
rd.luks.name
rd.luks.name=UUID=nombre
Especifique el nombre del dispositivo mapeado después de que la partición LUKS esté abierta. Por ejemplo, al especificar UUID=cryptroot
indica que el dispositivo desbloqueado se encuentra en /dev/mapper/cryptroot
. Si no se especifica nada, el dispositivo mapeado se entenderá ubicado en /dev/mapper/luks-UUID
donde UUID es el UUID de la partición LUKS. Cuando use este parámetro, puede omitir rd.luks.uuid
.
Esto es equivalente al segundo parámetro de cryptdevice
para encrypt
.
rd.luks.options
rd.luks.options=UUID=opciones
o
rd.luks.options=opciones
Especifique las opciones para el dispositivo listado después de UUID
o, si no se especifica, para todos los UUID no especificados en otra parte (por ejemplo, crypttab).
Esto es aproximadamente equivalente al tercer parámetro de cryptdevice
para encrypt
.
Sigue un formato similar a las opciones en crypttab: las opciones están separadas por comas, y, a su vez, las opciones con valores se especifican usando option=valores
.
Por ejemplo:
rd.luks.options=timeout=10s,swap,cipher=aes-cbc-essiv:sha256,size=256
rd.luks.key
sd-encrypt
solo admite archivos de clave incrustados en initramfs (es decir, especificado en la matriz FILES
en /etc/mkinitcpio.conf
).systemd issue 9181.rd.luks.key=UUID=archivo de claves
o
rd.luks.key=archivo de claves
Indique la ubicación de un archivo de claves utilizado para descifrar el dispositivo especificado en rd.luks.UUID
. No hay una ubicación predeterminada como la que hay con el hook encrypt
para el parámetro cryptkey
.
Tiempo de espera («timeout»)
Hay dos opciones que afectan el tiempo de espera para ingresar la contraseña durante el inicio:
-
rd.luks.options=timeout=tiempo de espera
especifica el tiempo de espera para consultar una contraseña. -
rootflags=x-systemd.device-timeout=tiempo de espera
especifica cuánto tiempo debe esperar systemd para que se muestre el dispositivo rootfs antes de retirarlo (el valor predeterminado es 90 segundos).
Si desea desactivar el tiempo de espera por completo, establezca ambos tiempos en cero:
rd.luks.options=timeout=0 rootflags=x-systemd.device-timeout=0
crypttab
El archivo /etc/crypttab
(tabla de dispositivos cifrados) es similar al archivo fstab (Español) y contiene una lista de dispositivos cifrados que se desbloquearán durante el inicio del sistema. Este archivo se puede utilizar para montar automáticamente dispositivos de intercambio cifrados o sistemas de archivos secundarios.
crypttab
se lee antes que fstab
, por lo que los contenedores de dm-crypt se pueden desbloquear antes de que se monte el sistema de archivos que contiene en su interior. Tenga en cuenta que crypttab
se lee después de que el sistema se haya iniciado, por lo tanto, no reemplaza el desbloqueo de particiones cifradas mediante el uso de hooks de mkinitcpio y opciones del cargador de arranque como en el caso de la partición raíz cifrada. El procesado de crypttab
en el momento del arranque se realiza mediante systemd-cryptsetup-generator
automáticamente.
Consulte crypttab(5) para obtener detalles, lea a continuación algunos ejemplos, y la sección #Montaje en el momento del arranque para obtener instrucciones sobre cómo usar los UUID para montar un dispositivo cifrado.
sd-encrypt
, si la contraseña de una partición no raíz es la misma que la de la partición raíz, no hay necesidad de poner esa partición que no es raíz en crypttab debido al almacenamiento en caché de la contraseña. Consulte este hilo del foro para obtener más información.- Si se especifica la opción nofail, la pantalla de ingreso de la contraseña puede desaparecer mientras se escribe la contraseña. nofail, por lo tanto, solo debe usarse junto con los archivos de claves.
- Hay problemas con systemd (Español) al procesar la entradas de
crypttab
para dispositivos cifrados en modo plain de dm-crypt (--type plain
):- Para los dispositivos
--type plain
con un archivo de claves, es necesario agregar la opciónhash=plain
a crypttab debido a una incompatibilidad de systemd. No utilicesystemd-cryptsetup
manualmente para que la creación del dispositivo funcione a su alrededor. - También puede ser necesario agregar la opción
plain
explícitamente para forzar asystemd-cryptsetup
reconocer un dispositivo--type plain
) en el arranque. Consulte systemd número 442.
- Para los dispositivos
/etc/crypttab
# Ejemplo de archivo crypttab. Los campos son: nombre, dispositivo subyacente, contraseña, opciones de cryptsetup. # Montar /dev/lvm/swap recifrándolo con una clave nueva en cada reinicio. swap /dev/lvm/swap /dev/urandom swap,cipher=aes-xts-plain64,size=256 # Montar /dev/lvm/tmp como /dev/mapper/tmp utilizando modalidad plain de dm-crypt con una contraseña aleatoria, haciendo que su contenido no se pueda recuperar después de que se desmonte. tmp /dev/lvm/tmp /dev/urandom tmp,cipher=aes-xts-plain64,size=256 # Montar /dev/lvm/home como /dev/mapper/home utilizando LUKS, y solicitar la contraseña en el momento del arranque. home /dev/lvm/home # Montar /dev/sdb1 como /dev/mapper/backup utilizando LUKS, con una contraseña almacenada en un archivo. backup /dev/sdb1 /home/alice/backup.key
Montaje en el momento del arranque
Si desea montar una unidad cifrada en el momento del arranque, ingrese el UUID del dispositivo en /etc/crypttab
. Obtenga el UUID (de la partición) usando la orden lsblk -f
y agregándolo a crypttab
como sigue:
/etc/crypttab
externaldrive UUID=2f9a8428-ac69-478a-88a2-4aa458565431 none luks,timeout=180
El primer parámetro es el nombre que prefiera del dispositivo mapeado para la unidad cifrada. La opción none
expondrá un prompt durante el inicio para escribir la contraseña que desbloquee la partición. La opción timeout
define un tiempo de espera en segundos para ingresar la contraseña de descifrado durante el arranque.
timeout
en crypttab
solo determina el tiempo permitido para ingresar la contraseña del dispositivo cifrado. Además, systemd (Español) también tiene un tiempo de espera predeterminado que fija la cantidad de tiempo permitido para que el dispositivo esté disponible (prefijado en 90 segundos), que es independiente del temporizador fijado para la contraseña. En consecuencia, incluso cuando la opción timeout
en crypttab
fija un valor superior a 90 segundos (o tiene su valor predeterminado a 0, lo que significa tiempo ilimitado), systemd solo esperará un máximo de 90 segundos para que se desbloquee el dispositivo. Para cambiar el tiempo en que systemd mantiene un dispositivo disponible, se puede establacer la opción x-systemd.device-timeout
(consulte systemd.mount(5)) en fstab para dicho dispositivo. Probablemente sea deseable, entonces, que el tiempo de la opción timeout
en crypttab
sea igual al tiempo fijado con la opción x-systemd.device-timeout
en fstab
para cada dispositivo montado al momento del arranque.También se puede configurar un archivo de claves y remitirse a él en lugar de esteblecer none
. Esto da como resultado un desbloqueo automático, si se puede acceder al archivo de claves durante el inicio. Dado que LUKS ofrece la opción de tener varias claves, la opción elegida también se puede cambiar más adelante.
Utilice el nombre que ha definido en /etc/crypttab
para el mapeado del dispositivo en /etc/fstab
de la siguiente manera:
/etc/fstab
/dev/mapper/externaldrive /mnt/backup ext4 defaults,errors=remount-ro 0 2
Dado que /dev/mapper/externaldrive
ya es el resultado de un mapeado de partición único, no es necesario especificar un UUID para ello. En cualquier caso, el dispositivo mapeado con el sistema de archivos tendrá un UUID diferente al de la partición en la que está cifrado.
Desbloquear con archivo de claves
If the keyfile for a secondary file system is itself stored inside an encrypted root, it is safe while the system is powered off and can be sourced to automatically unlock the mount during with boot via crypttab. For example, unlock a crypt specified by UUID:
/etc/crypttab
home-crypt UUID=<UUID identifier> /etc/mykeyfile
--plain
mode blockdevice, the encryption options necessary to unlock it are specified in /etc/crypttab
. Take care to apply the systemd workaround mentioned in crypttab in this case.Then use the device mapper's name (defined in /etc/crypttab
) to make an entry in /etc/fstab
:
/etc/fstab
/dev/mapper/home-crypt /home ext4 defaults 0 2
Since /dev/mapper/externaldrive
already is the result of a unique partition mapping, there is no need to specify an UUID for it. In any case, the mapper with the filesystem will have a different UUID than the partition it is encrypted in.
Montaje de un dispositivo de bloque apilado
Los generadores de systemd también procesan automáticamente los dispositivos de bloque apilados en el arranque.
Por ejemplo, puede crear una configuración RAID (Español), utilizar cryptsetup para cifrarlo y crear un volumen lógico LVM (Español) con el sistema de archivos correspondiente dentro del dispositivo de bloque cifrado. El resultado será esto:
$ lsblk -f
─sdXX linux_raid_member │ └─md0 crypto_LUKS │ └─cryptedbackup LVM2_member │ └─vgraid-lvraid ext4 /mnt/backup └─sdYY linux_raid_member └─md0 crypto_LUKS └─cryptedbackup LVM2_member └─vgraid-lvraid ext4 /mnt/backup
que le pedirá la contraseña y se montará automáticamente en el arranque.
Dado que se han especificado las entradas correctas para crypttab (por ejemplo, UUID para el dispositivo crypto_LUKS
) y para fstab (/dev/vgraid/lvraid
) respectivametne, no hay necesidad de agregar más configuraciones/hooks de mkinitcpio, porque el procesamiento de /etc/crypttab
se aplica solo a montajes no root. Una excepción es cuando el hook mdadm_udev
se usa ya (por ejemplo, para el dispositivo raíz). En este caso, /etc/madadm.conf
e initramfs necesitan actualizarse para lograr que la correcta raid de la raíz se elija primero.
Montaje bajo demanda
Puede iniciar systemd-cryptsetup@externaldrive.service
en lugar de usar:
# cryptsetup luksOpen UUID=... externaldrive
cuando tenga una entrada como sigue en su /etc/crypttab
:
/etc/crypttab
externaldrive UUID=... none noauto
De esa manera no necesita recordar las opciones exactas de crypttab. Le pedirá la contraseña si es necesario.
El archivo unit correspondiente será generado automáticamente por systemd-cryptsetup-generator(8). Puede listar todos los archivos unit generados usando:
$ systemctl list-unit-files | grep systemd-cryptsetup
Solución de problemas
El espacio del sistema en el arranque/solicitud de contraseña no se muestra
Si está usando Plymouth (Español), asegúrese de cargar los módulos correctos (vea: Plymouth#The plymouth hook) o desactívelos. De lo contrario, Plymouth no asumirá la solicitud de contraseña, haciendo imposible el inicio del sistema.