dm-crypt (Español)/System configuration (Español) - ArchWiki

Jump to content
< Dm-crypt (Español)

Esta traducción de Dm-crypt/System configuration fue revisada el 2018-11-22. Si existen cambios puede actualizarla o avisar al equipo de traducción.
Sugerencia: Si necesita desbloquear de forma remota la raíz u otros sistemas de archivos de arranque temprano (máquinas sin encabezados, servidores distantes ...), siga las instrucciones específicas de dm-crypt/Specialties (Español)#Desbloqueo remoto de la partición (u otro volumen) raíz.

## 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[broken link: invalid section] necesarios deben quedar limpios en otros pasos manuales seguidos durante la instalación del sistema.

Recuerde regenerar initramfs[broken link: invalid section] 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`.

Sugerencia: No es necesario especificar este parámetro manualmente cuando utiliza GRUB (Español) y se genera `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

Nota: comparado con el hook sd-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 del `dispositivo` (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.

Sugerencia: Si la ruta del dispositivo al que desea acceder contiene el carácter `:`, 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[broken link: invalid section] 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.

Sugerencia:

- 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 como `rd.luks`. Puede usar cualquiera de los métodos para asignar nombres permanentes a dispositivos de bloques.

Nota:

- 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.

Advertencia: Si está utilizando `/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

Sugerencia: `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

Nota: El hook `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 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.

Nota: Cuando se usa systemd-boot y el hook `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.
Advertencia:

- 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ón `hash=plain` a crypttab debido a una incompatibilidad de systemd. No utilice `systemd-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 a `systemd-cryptsetup` reconocer un dispositivo `--type plain`) en el arranque. Consulte systemd número 442.

    /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.

Nota: Tenga en cuenta que la opción `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

Sugerencia: If you prefer to use a `--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[broken link: invalid section]) o desactívelos. De lo contrario, Plymouth no asumirá la solicitud de contraseña, haciendo imposible el inicio del sistema.

Category:

- Data-at-rest encryption (Español)

Hidden category:

- Pages with broken section links