Desbloqueo de un disco Linux cifrado para la reparación sin conexión
Se aplica a: ✔️ Máquinas virtuales Linux
En este artículo se describe cómo desbloquear un disco del sistema operativo habilitado para Azure Disk Encryption (ADE) para la reparación sin conexión.
Azure Disk Encryption se puede aplicar a máquinas virtuales Linux aprobadas por Microsoft. Estos son algunos requisitos básicos para habilitar Azure Disk Encryption en máquinas virtuales Linux:
- Azure Key Vault
- CLI de Azure o cmdlets de Windows PowerShell
- Asignador de dispositivos (DM)-Crypt
Síntomas
Si ADE está habilitado en el disco del sistema operativo, es posible que reciba los siguientes mensajes de error después de intentar montar el disco en una máquina virtual de reparación:
mount: error fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error
mount: tipo desconocido de sistema de archivos "LVM2_member"
Preparación
Antes de desbloquear el disco del sistema operativo cifrado para la reparación sin conexión, complete las siguientes tareas:
- Confirme que ADE está habilitado en el disco.
- Determine si el disco del sistema operativo usa la versión 0 de ADE (cifrado de doble paso) o la versión 1 (cifrado de paso único) de ADE.
- Determine si el disco del sistema operativo está administrado o no administrado.
- Seleccione el método para desbloquear el disco cifrado.
Comprobación de que ADE está habilitado en el disco
Puede realizar este paso en Azure Portal, PowerShell o la interfaz de la línea de comandos de Azure (CLI de Azure).
Azure Portal
Vea la hoja Información general de la máquina virtual con errores en Azure Portal. Debajo del disco, la entrada azure disk encryption aparecerá como Habilitada o No habilitada, como se muestra en la captura de pantalla siguiente.
PowerShell
Puede usar el Get-AzVmDiskEncryptionStatus
cmdlet para determinar si el sistema operativo o los volúmenes de datos de una máquina virtual se cifran mediante ADE. La salida de ejemplo siguiente indica que el cifrado de ADE está habilitado en el volumen del sistema operativo:
Get-AzVmDiskEncryptionStatus -ResourceGroupName "ResourceGroupName" -VMName "VmName"
Para obtener más información sobre el Get-AzureRmDiskEncryptionStatus
cmdlet, consulte Get-AzVMDiskEncryptionStatus (Az.Compute).
CLI de Azure
Puede usar el az vm encryption show
comando para comprobar si ADE está habilitado en discos de máquina virtual:
az vm encryption show --name MyVM --resource-group MyResourceGroup --query "disks[].encryptionSettings[].enabled"
Para más información sobre el az vm encryption show
comando, consulte az vm encryption show.
Nota
Si ADE no está habilitado en el disco, consulte el siguiente artículo para obtener información sobre cómo conectar un disco a una máquina virtual de reparación: Solución de problemas de una máquina virtual Linux mediante la conexión del disco del sistema operativo a una máquina virtual de reparación.
Determinar si el disco del sistema operativo usa la versión 0 de ADE (cifrado de doble paso) o la versión 1 de ADE (cifrado de paso único)
Puede identificar la versión de ADE en Azure Portal abriendo las propiedades de la máquina virtual y seleccionando Extensiones para abrir la hoja Extensiones. En la hoja Extensiones , vea el número de versión de AzureDiskEncryptionForLinux.
- Si el número de versión es
0.*
, el disco usa el cifrado de doble paso. - Si el número de versión es
1.*
o una versión posterior, el disco usa el cifrado de paso único.
Si el disco usa la versión 0 de ADE (cifrado de doble paso), use el método 3 para desbloquear el disco.
Determinar si el disco del sistema operativo está administrado o no administrado
Si no sabe si el disco del sistema operativo está administrado o no administrado, consulte Determinar si el disco del sistema operativo está administrado o no administrado.
Si el disco del sistema operativo es un disco no administrado, siga los pasos descritos en Método 3 para desbloquear el disco.
Selección del método para desbloquear el disco cifrado
Elija uno de los métodos siguientes para desbloquear el disco cifrado:
- Si el disco se administra y cifra mediante la versión 1 de ADE, y la directiva de infraestructura y empresa le permiten asignar una dirección IP pública a una máquina virtual de reparación, use el método 1: Desbloquear el disco cifrado automáticamente mediante el comando az vm repair.
- Si el disco se administra y cifra mediante la versión 1 de ADE, pero la directiva de infraestructura o empresa impide asignar una dirección IP pública a una máquina virtual de reparación, use el método 2: Desbloquear el disco cifrado por el archivo de clave en el volumen BEK. Otro motivo para elegir este método es si carece de los permisos para crear un grupo de recursos en Azure.
- Si se produce un error en cualquiera de estos métodos o si el disco no está administrado o cifrado mediante ADE versión 1 (cifrado de doble paso), siga los pasos descritos en El método 3 para desbloquear el disco.
Método 1: Desbloquear el disco cifrado automáticamente mediante el comando az vm repair
Este método se basa en los comandos az vm repair para crear automáticamente una máquina virtual de reparación, conectar el disco del sistema operativo de la máquina virtual Linux con errores a esa máquina virtual de reparación y, a continuación, desbloquear el disco si está cifrado. Este método requiere el uso de una dirección IP pública para la máquina virtual de reparación y desbloquea el disco cifrado independientemente de si la clave de ADE se desencapsula o se encapsula mediante una clave de cifrado de claves (KEK).
Para reparar la máquina virtual mediante este método automatizado, siga los pasos descritos en Reparación de una máquina virtual Linux mediante los comandos de reparación de máquinas virtuales de Azure.
Si la infraestructura y la directiva de empresa no le permiten asignar una dirección IP pública o si el az vm repair
comando no desbloquea el disco, vaya al método siguiente.
Método 2: Desbloquear el disco cifrado por el archivo de clave en el volumen BEK
Para desbloquear y montar el disco cifrado manualmente, siga estos pasos:
Cree una nueva máquina virtual de reparación y conecte el disco cifrado a esta máquina virtual durante la creación de la máquina virtual.
Debe conectar el disco cifrado al crear la máquina virtual de reparación. Esto se debe a que el sistema detecta que el disco conectado está cifrado. Por lo tanto, captura la clave ADE del almacén de claves de Azure y, a continuación, crea un nuevo volumen denominado "BEK VOLUME" para almacenar el archivo de clave.
Inicie sesión en la máquina virtual de reparación y desmonte las particiones montadas en el disco cifrado.
Identifique el archivo de encabezado en la partición de arranque del sistema operativo cifrado.
Desbloquee el disco cifrado mediante el archivo de clave ADE y el archivo de encabezado.
Monte la partición: LVM, RAW o no LVM.
Creación de una máquina virtual de reparación
Tome una instantánea del disco del sistema operativo cifrado.
Cree un disco a partir de la instantánea. Para el nuevo disco, elija la misma ubicación y zona de disponibilidad que la de la máquina virtual con problemas que desea reparar.
Cree una máquina virtual basada en las siguientes directrices:
- En Azure Marketplace, elija la misma imagen para la máquina virtual de reparación que se usó para la máquina virtual con errores. (La versión del sistema operativo debe ser la misma).
- Elija un tamaño que asigne al menos 8 GB de memoria a la máquina virtual.
- Asigne esta nueva máquina virtual al mismo grupo de recursos, región y configuración de disponibilidad que usó para el nuevo disco que creó en el paso 2.
En la página Discos del Asistente para crear una máquina virtual, conecte el nuevo disco (que acaba de crear a partir de la instantánea) como un disco de datos.
Importante
Dado que la configuración de cifrado solo se detecta durante la creación de la máquina virtual, asegúrese de conectar el disco al crear la máquina virtual. Esto permite que un volumen que contenga el archivo de clave ADE se agregue automáticamente a la máquina virtual.
Desmontar las particiones montadas en el disco cifrado
Una vez creada la máquina virtual de reparación, ssh a la máquina virtual de reparación, inicie sesión con las credenciales adecuadas y, a continuación, eleva la cuenta a la raíz:
sudo -s
Enumere los dispositivos conectados mediante el comando lsblk . En la salida, debería ver varios discos conectados. Estos discos incluyen el disco del sistema operativo activo y el disco cifrado. Pueden aparecer en cualquier orden.
Identifique el disco cifrado mediante la siguiente información:
- El disco tendrá varias particiones.
- El disco no mostrará el directorio raíz ("/") como punto de montaje para cualquiera de sus particiones.
- El disco coincidirá con el tamaño que anotó al crearlo a partir de la instantánea.
En el ejemplo siguiente, la salida indica que "sdd" es el disco cifrado. Este es el único disco que tiene varias particiones y que no enumera "/" como punto de montaje.
Desmonte las particiones del disco de datos cifrados que se han montado en el sistema de archivos. Por ejemplo, en el ejemplo anterior, tendría que desmontar "/boot/efi"* y "/boot".
umount /boot/efi umount /boot
Identificación del archivo de clave de ADE
Debe tener el archivo de clave y el archivo de encabezado para desbloquear el disco cifrado. El archivo de clave se almacena en el volumen BEK y el archivo de encabezado está en la partición de arranque del disco del sistema operativo cifrado.
Determine qué partición es el volumen BEK:
lsblk -fs | grep -i bek
La salida de ejemplo siguiente indica que sdb1 es el volumen BEK:
>sdb1 vfat BEK VOLUME 04A2-FE67
Si no existe ningún volumen BEK, vuelva a crear la máquina virtual de reparación con el disco cifrado conectado. Si el volumen BEK sigue sin adjuntarse automáticamente, pruebe el método 3 para recuperar el volumen BEK.
Cree un directorio denominado "azure_bek_disk" en la carpeta "/mnt":
mkdir /mnt/azure_bek_disk
Monte el volumen BEK en el directorio "/mnt/azure_bek_disk". Por ejemplo, si sdb1 es el volumen BEK, escriba el siguiente comando:
mount /dev/sdb1 /mnt/azure_bek_disk
Vuelva a enumerar los dispositivos disponibles:
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
Nota: Verá que la partición que determinó que es el volumen BEK ahora está montado en "/mnt/azure_bek_disk".
Vea el contenido en el directorio "/mnt/azure_bek_disk/":
ls -l /mnt/azure_bek_disk
Debería ver los siguientes archivos en la salida (el archivo de clave de ADE es "LinuxPassPhraseFileName"):
>total 1 -rwxr-xr-x 1 root root 148 Aug 4 01:04 CRITICAL_DATA_WARNING_README.txt -r-xr-xr-x 1 root root 172 Aug 4 01:04 LinuxPassPhraseFileName
Es posible que vea varios "LinuxPassPhraseFileName" si hay más de un disco conectado a la máquina virtual cifrada. "LinuxPassPhraseFileName" se enumerará según el número de discos en el mismo orden que sus números de unidad lógica (LUN).
Identificación del archivo de encabezado
La partición de arranque del disco cifrado contiene el archivo de encabezado. Usará este archivo, junto con el archivo de clave "LinuxPassPhraseFileName" para desbloquear el disco cifrado.
Use el siguiente comando para mostrar los atributos seleccionados de los discos y particiones disponibles:
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
En el disco cifrado, identifique la partición del sistema operativo (partición raíz). Esta es la partición más grande del disco cifrado. En la salida del ejemplo anterior, la partición del sistema operativo es "sda4". Esta partición debe especificarse al ejecutar el comando de desbloqueo.
En el directorio raíz ("/") de la estructura de archivos, cree un directorio al que montar la partición raíz del disco cifrado. Usará este directorio más adelante, después de desbloquear el disco. Para distinguirla de la partición del sistema operativo activa de la máquina virtual de reparación, asígnele el nombre "investigateroot".
mkdir /{investigateboot,investigateroot}
En el disco cifrado, identifique la partición de arranque, que contiene el archivo de encabezado. En el disco cifrado, la partición de arranque es la segunda partición más grande que no muestra ningún valor en la columna LABEL o PARTLABEL. En la salida del ejemplo anterior, la partición de arranque del disco cifrado es "sda2".
Monte la partición de arranque que identificó en el paso 4 en el directorio /investigateboot/. En el ejemplo siguiente, la partición de arranque del disco cifrado es sda2. Sin embargo, la ubicación del sistema puede diferir.
mount /dev/sda2 /investigateboot/
Si se produce un error en el montaje de la partición y se devuelve un mensaje de error "tipo fs incorrecto, opción incorrecta, superbloqueo incorrecto", inténtelo de nuevo mediante el
mount -o nouuid
comando , como en el ejemplo siguiente:mount -o nouuid /dev/sda2 /investigateboot/
Enumere los archivos que se encuentran en el directorio /investigateboot/. El subdirectorio "luks" contiene el archivo de encabezado que debe tener para desbloquear el disco.
Enumere los archivos que se encuentran en el directorio /investigateboot/luks/. El archivo de encabezado se denomina "osluksheader".
ls -l /investigateboot/luks
Use el archivo de clave ADE y el archivo de encabezado para desbloquear el disco.
Use el
cryptsetup luksOpen
comando para desbloquear la partición raíz en el disco cifrado. Por ejemplo, si la ruta de acceso a la partición raíz que contiene el sistema operativo cifrado es /dev/sda4 y quiere asignar el nombre "osencrypt" a la partición desbloqueada, ejecute el siguiente comando:cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt
Ahora que ha desbloqueado el disco, desmonte la partición de arranque del disco cifrado del directorio /investigateboot/:
umount /investigateboot/
Nota: Tendrá que montar esta partición en otro directorio más adelante.
El siguiente paso es montar la partición que acaba de desbloquear. El método que se usa para montar la partición depende del marco del asignador de dispositivos (LVM o no LVM) que usa el disco.
Enumere la información del dispositivo junto con el tipo de sistema de archivos:
lsblk -o NAME,FSTYPE
Verá la partición desbloqueada y el nombre que asignó a ella (en nuestro ejemplo, ese nombre es "osencrypt"):
- Para la partición LVM, como "LVM_member", consulte Montaje de la particiónLVM RAW o no LVM.
- Para la partición que no es LVM, consulte Montaje de la partición que no es LVM.
Monte la partición desbloqueada y escriba el entorno chroot (solo LVM)
Si los discos usan el marco del asignador de dispositivos LVM, debe realizar pasos adicionales para montar el disco y escribir el entorno chroot. Para usar la herramienta chroot junto con el disco cifrado, la partición desbloqueada ("osencrypt") y sus volúmenes lógicos deben reconocerse como el grupo de volúmenes denominado rootvg. Sin embargo, de forma predeterminada, la partición del sistema operativo de la máquina virtual de reparación y sus volúmenes lógicos ya están asignados a un grupo de volúmenes que tiene el nombre rootvg. Debemos resolver este conflicto para poder continuar.
Use el
pvs
comando para mostrar las propiedades de los volúmenes físicos de LVM. Es posible que vea mensajes de advertencia, como en el ejemplo siguiente, que indican que la partición desbloqueada ("/dev/mapper/osencrypt") y otro dispositivo usa identificadores únicos universalmente duplicados (UUID). Como alternativa, es posible que vea dos particiones asignadas a rootvg.Nota
Solo quiere que la partición desbloqueada ("osencrypt") se asigne al grupo de volúmenes rootvg para que pueda acceder a sus volúmenes lógicos a través de la utilidad chroot. Para solucionar este problema, importará temporalmente la partición en un grupo de volúmenes diferente y activará ese grupo de volúmenes. A continuación, cambiará el nombre del grupo de volúmenes rootvg actual. Solo después de escribir el entorno chroot cambiará el nombre del grupo de volúmenes del disco cifrado como "rootvg".
Asignación de la partición desbloqueada (ejemplo)
Importe la partición recién desbloqueada en un nuevo grupo de volúmenes. En este ejemplo, se denomina temporalmente el nuevo grupo de volúmenes "rescuemevg". Importe la partición recién desbloqueada en un nuevo grupo de volúmenes. En este ejemplo, se denomina temporalmente el nuevo grupo de volúmenes "rescuemevg".
Active el nuevo grupo de volúmenes:
vgimportclone -n rescuemevg /dev/mapper/osencrypt vgchange -a y rescuemevg
Cambie el nombre del grupo de volúmenes rootvg anterior. En este ejemplo, usaremos el nombre "oldvg".
vgrename rootvg oldvg
Ejecute
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
para revisar los dispositivos disponibles. Ahora debería ver ambos grupos de volúmenes enumerados por los nombres que asignó a ellos.Monte el volumen lógico rescuemevg/rootlv en el directorio /investigateroot/ sin usar los UUID duplicados:
umount /investigateboot mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/
Ahora, la partición raíz de la máquina virtual con errores se desbloquea y monta, y debería poder acceder a la partición raíz para solucionar los problemas. Para obtener más información, consulte Solución de problemas de arranque de máquinas virtuales Linux debido a errores del sistema de archivos.
Sin embargo, si desea usar la utilidad chroot para solucionar problemas, siga estos pasos.
Monte la partición de arranque del disco cifrado en el directorio /investigateroot/boot/ sin usar los UUID duplicados. (Recuerde que la partición de arranque del disco cifrado es la segunda más grande que no tiene asignada ninguna etiqueta de partición). En nuestro ejemplo actual, la partición de arranque del disco cifrado es sda2.
mount -o nouuid /dev/sda2 /investigateroot/boot
Monte la partición del sistema EFI del disco cifrado en el directorio /investigateroot/boot/efi. Puede identificar esta partición por su etiqueta. En nuestro ejemplo actual, la partición del sistema EFI es sda1.
mount /dev/sda1 /investigateroot/boot/efi
Monte los volúmenes lógicos restantes desmontados en el grupo de volúmenes del disco cifrado en subdirectorios de "/investigateroot/":
mount -o nouuid /dev/mapper/rescuemevg-varlv /investigateroot/var mount -o nouuid /dev/mapper/rescuemevg-homelv /investigateroot/home mount -o nouuid /dev/mapper/rescuemevg-usrlv /investigateroot/usr mount -o nouuid /dev/mapper/rescuemevg-tmplv /investigateroot/tmp mount -o nouuid /dev/mapper/rescuemevg-optlv /investigateroot/opt
Cambie el directorio activo a la partición raíz montada en el disco cifrado:
cd /investigateroot
Escriba los siguientes comandos para preparar el entorno chroot:
mount -t proc proc proc mount -t sysfs sys sys/ mount -o bind /dev dev/ mount -o bind /dev/pts dev/pts/ mount -o bind /run run/
Escriba el entorno chroot:
chroot /investigateroot/
Cambie el nombre del grupo de volúmenes rescuemevg a "rootvg" para evitar conflictos o posibles problemas con grub e initramfs. Mantenga la misma convención de nomenclatura al volver a generar initramfs. Debido a los cambios de nombre de vg, trabaje en la máquina virtual de rescate. Ya no será útil si lo reinicias. La máquina virtual de rescate debe considerarse una máquina virtual temporal.
vgrename rescuemevg rootvg
Solución de problemas en el entorno chroot. Por ejemplo, puede leer registros o ejecutar un script. Para obtener más información, consulte Realización de correcciones en el entorno chroot.
Salga de chroot e intercambie el disco del sistema operativo.
Monte el disco desbloqueado y escriba el entorno chroot (RAW/non-LVM)
En el directorio raíz ("/") de la estructura de archivos, cree un directorio en el que montar la partición raíz del disco cifrado. Usará este directorio más adelante, después de desbloquear el disco. Para distinguirla de la partición activa del sistema operativo de la máquina virtual de reparación, asígnela el nombre "investigateroot".
mkdir /{investigateboot,investigateroot}
Monte la partición recién desbloqueada ("osencrypt") en el directorio /investigateroot/:
mount /dev/mapper/osencrypt /investigateroot/
Si se produce un error en el montaje de la partición y se devuelve un mensaje de error "tipo fs incorrecto, opción incorrecta, superbloqueo incorrecto", inténtelo de nuevo mediante el comando mount
-o nouuid
:mount -o nouuid /dev/mapper/osencrypt /investigateroot/
Intente mostrar el contenido del directorio /investigateroot/ para comprobar que la partición montada ahora está desbloqueada:
ls /investigateroot/
Ahora la partición raíz de la máquina virtual con errores se desbloquea y se monta, puede acceder a la partición raíz para solucionar los problemas. Para obtener más información, consulte Solución de problemas de arranque de máquinas virtuales Linux debido a errores del sistema de archivos.
Sin embargo, si desea usar la utilidad chroot para solucionar problemas, vaya al paso siguiente.
Use el comando
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
para revisar los dispositivos disponibles. Identifique la partición de arranque en el disco cifrado como la segunda partición más grande que no tiene asignada ninguna etiqueta.Monte la partición de arranque en el disco cifrado en el directorio "/investigateroot/boot/", como en el ejemplo siguiente:
mount /dev/sdc2 /investigateroot/boot/
Cambie el directorio activo a la partición raíz montada en el disco cifrado:
cd /investigateroot
Escriba los siguientes comandos para preparar el entorno chroot:
mount -t proc proc proc mount -t sysfs sys sys/ mount -o bind /dev dev/ mount -o bind /dev/pts dev/pts/ mount -o bind /run run/
Escriba el entorno chroot:
chroot /investigateroot/
Solución de problemas en el entorno chroot. Puede leer registros o ejecutar un script. Para obtener más información, consulte Realización de correcciones en el entorno chroot.
Salga de chroot e intercambie el disco del sistema operativo.
Método 3: Volver a cifrar el disco para recuperar el archivo de clave y desbloquear el disco cifrado
Cree la máquina virtual de reparación y conecte una copia del disco bloqueado a una máquina virtual de reparación:
- Para ver un disco administrado, consulte Solución de problemas de una máquina virtual Linux mediante la conexión del disco del sistema operativo administrado a una máquina virtual de reparación.
- Para un disco no administrado, use el Explorador de Storage para crear una copia del disco del sistema operativo de la máquina virtual afectada. Para más información, consulte Conexión de un disco no administrado a una máquina virtual para la reparación sin conexión.
Después de conectar el disco cifrado como disco de datos a la máquina virtual de reparación, use key Vault y la clave cifrada de clave (KEK) que se usó para que la máquina virtual original vuelva a cifrar este disco de datos. Este proceso generará y montará automáticamente un volumen BEK mediante un archivo de clave BKE en la máquina virtual de reparación. No debe usar la opción EncryptFormatAll porque la extensión ADE podría cifrar el sector de arranque en el disco de datos.
Si la máquina virtual original está cifrada mediante BEK encapsulada, ejecute el siguiente comando.
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --key-encryption-key "kek" --volume-type "data"
Si BEK cifra la máquina virtual original, ejecute el siguiente comando:
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --volume-type "data"
Para determinar los valores de disk-encryption-keyvault y key-encryption-key, ejecute el siguiente comando:
az vm encryption show --name "OriginalVmName" --resource-group "ResourceGroupName"
En la tabla siguiente, busque los valores en la salida. Si el valor keyEncryptionKey está en blanco, bek cifra la máquina virtual.
Parámetro Valor en la salida example disk-encryption-keyvault diskEncryptionKey:id /subscriptions/deb73ff9-0000-0000-0000-0000c7a96d37/resourceGroups/Thomas/providers/Microsoft.KeyVault/vaults/ContosoKeyvault key-encryption-key keyEncryptionKey:KeyURI https://ContosoKeyvault.vault.azure.net/keys/mykey/00000000987145a3b79b0ed415fa0000
Ejecute el siguiente comando para comprobar si hay un nuevo disco conectado:
lsblk -f
Si se conecta un nuevo disco, vaya a Identificar el archivo de clave ADE en el volumen BEK y, a continuación, siga los pasos proporcionados para desbloquear el disco.
Pasos siguientes
Si tiene problemas para conectarse a la máquina virtual, consulte Solución de problemas de conexiones SSH a una máquina virtual de Azure.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.