Поделиться через


Разблокировка зашифрованного диска Linux для восстановления в автономном режиме

В этой статье описывается, как разблокировать диск ОС с поддержкой шифрования дисков Azure (ADE) для восстановления в автономном режиме.

Шифрование дисков Azure можно применять к виртуальным машинам Linux, рекомендованным корпорацией Майкрософт. Ниже приведены некоторые основные требования к включению шифрования дисков Azure на виртуальных машинах Linux.

Симптомы

Если на диске ОС включена функция ADE, после попытки подключения диска к виртуальной машине восстановления могут появиться следующие сообщения об ошибках:

mount: неправильный тип fs, недопустимый параметр, недопустимый суперблок в /dev/sda2, отсутствует кодовая страница или вспомогающая программа или другая ошибка

mount: неизвестный тип файловой системы "LVM2_member"

Подготовка

Прежде чем разблокировать зашифрованный диск ОС для восстановления в автономном режиме, выполните следующие задачи:

  1. Убедитесь, что на диске включена функция ADE.
  2. Определите, использует ли диск ОС ADE версии 0 (двойное шифрование) или ADE версии 1 (однопрохадное шифрование).
  3. Определите, является ли диск ОС управляемым или неуправляем.
  4. Выберите метод для разблокировки зашифрованного диска.

Убедитесь, что на диске включена функция ADE.

Этот шаг можно выполнить в портал Azure, PowerShell или интерфейсе командной строки Azure (Azure CLI).

Портал Azure

Просмотрите колонку Обзор для виртуальной машины, завершилось сбоем, в портал Azure. Под диском запись шифрования дисков Azure будет отображаться как Включено или Не включено, как показано на следующем снимке экрана.

Снимок экрана: колонка обзора для виртуальной машины на портале Azure, показывающая, что на диске включена функция AD E.

PowerShell

С помощью командлета Get-AzVmDiskEncryptionStatus можно определить, шифруются ли тома ОС или данных для виртуальной машины с помощью ADE. В следующем примере выходных данных указано, что шифрование ADE включено на томе ОС:

Get-AzVmDiskEncryptionStatus -ResourceGroupName "ResourceGroupName" -VMName "VmName" 

Дополнительные сведения о командлете см. в Get-AzureRmDiskEncryptionStatus разделе Get-AzVMDiskEncryptionStatus (Az.Compute).

Azure CLI

С помощью az vm encryption show команды можно проверка, включен ли ADE на дисках виртуальных машин:

az vm encryption show --name MyVM --resource-group MyResourceGroup --query "disks[].encryptionSettings[].enabled"

Дополнительные сведения о команде см. в az vm encryption show статье az vm encryption show.

Примечание.

Если ADE не включена на диске, ознакомьтесь со следующей статьей, чтобы узнать, как подключить диск к виртуальной машине восстановления: Устранение неполадок виртуальной машины Linux путем подключения диска ОС к виртуальной машине восстановления.

Определите, использует ли диск ОС ADE версии 0 (двойное шифрование) или ADE версии 1 (однопрохадное шифрование)

Вы можете определить версию ADE в портал Azure, открыв свойства виртуальной машины, а затем выбрав Расширения, чтобы открыть колонку Расширения. В колонке Расширения просмотрите номер версии AzureDiskEncryptionForLinux.

  • Если номер версии — 0.*, диск использует двойное шифрование.
  • Если номер версии — или 1.* более поздняя версия, диск использует однопроходитное шифрование.

Если диск использует ADE версии 0 (двойное шифрование), используйте метод 3 , чтобы разблокировать диск.

Определение управляемого или неуправляемого диска ОС

Если вы не знаете, является ли диск ОС управляемым или неуправляемным, см. раздел Определение того, является ли диск ОС управляемым или неуправляем.

Если диск ОС является неуправляемым диском, выполните действия, описанные в методе 3 , чтобы разблокировать диск.

Выберите метод для разблокировки зашифрованного диска

Выберите один из следующих способов разблокировки зашифрованного диска:

  • Если диск управляется и шифруется с помощью ADE версии 1, а политика инфраструктуры и компании позволяет назначать общедоступный IP-адрес виртуальной машине восстановления, используйте метод 1. Автоматическая разблокировка зашифрованного диска с помощью команды az vm repair.
  • Если диск одновременно управляется и шифруется с помощью ADE версии 1, но ваша инфраструктура или политика компании не позволяют назначать общедоступный IP-адрес виртуальной машине восстановления, используйте метод 2. Разблокировка зашифрованного диска с помощью файла ключа в томе BEK. Другой причиной выбора этого метода является отсутствие разрешений на создание группы ресурсов в Azure.
  • Если один из этих методов завершается ошибкой или диск неуправляем или зашифрован с помощью ADE версии 1 (двойное шифрование), выполните действия, описанные в методе 3 , чтобы разблокировать диск.

Способ 1. Автоматическая разблокировка зашифрованного диска с помощью команды az vm repair

Этот метод использует команды az vm repair для автоматического создания виртуальной машины восстановления, подключения диска ОС виртуальной машины Linux, завершившемся сбоем, к этой виртуальной машине восстановления, а затем разблокировки диска, если он зашифрован. Этот метод требует использования общедоступного IP-адреса для виртуальной машины восстановления и разблокирует зашифрованный диск независимо от того, является ли ключ ADE распакованным или упакован с помощью ключа шифрования ключа (KEK).

Чтобы восстановить виртуальную машину с помощью этого автоматизированного метода, выполните действия, описанные в разделе Восстановление виртуальной машины Linux с помощью команд восстановления виртуальной машины Azure.

Если ваша инфраструктура и политика компании не позволяют назначить общедоступный IP-адрес или команда az vm repair не разблокирует диск, перейдите к следующему методу.

Способ 2. Разблокировка зашифрованного диска с помощью файла ключа в томе BEK

Чтобы разблокировать и подключить зашифрованный диск вручную, выполните следующие действия.

  1. Создайте новую виртуальную машину восстановления и подключите зашифрованный диск к ней во время создания виртуальной машины.

    При создании виртуальной машины восстановления необходимо подключить зашифрованный диск. Это связано с тем, что система обнаруживает, что подключенный диск зашифрован. Поэтому он извлекает ключ ADE из хранилища ключей Azure, а затем создает новый том с именем BEK VOLUME для хранения файла ключа.

  2. Войдите в виртуальную машину восстановления, а затем отключите все подключенные секции на зашифрованном диске.

  3. Определите файл ключа ADE в томе BEK.

  4. Определите файл заголовка в загрузочном разделе зашифрованной ОС.

  5. Разблокируйте зашифрованный диск с помощью файла ключа ADE и файла заголовка.

  6. Подключите раздел: LVM, RAW или не LVM.

Создание виртуальной машины восстановления

  1. Выполните snapshot зашифрованного диска ОС.

  2. Создайте диск из snapshot. Для нового диска выберите то же расположение и зону доступности, что и у проблемной виртуальной машины, которую требуется исправить.

  3. Создайте виртуальную машину на основе следующих рекомендаций:

    • В Azure Marketplace выберите тот же образ для виртуальной машины восстановления, который использовался для виртуальной машины, которая завершила сбой. (Версия ОС должна быть той же.)
    • Выберите размер, который выделяет не менее 8 ГБ памяти для виртуальной машины.
    • Назначьте эту новую виртуальную машину той же группе ресурсов, региону и параметрам доступности, которые использовались для нового диска, созданного на шаге 2.
  4. На странице Диски мастера создания виртуальной машины подключите новый диск (который вы только что создали из snapshot) в качестве диска данных.

Важно!

Так как параметры шифрования обнаруживаются только во время создания виртуальной машины, обязательно подключите диск при создании виртуальной машины. Это позволяет автоматически добавлять том, содержащий файл ключа ADE, на виртуальную машину.

Отключение всех подключенных секций на зашифрованном диске

  1. После создания виртуальной машины восстановления перейдите по протоколу SSH в виртуальную машину восстановления, войдите в систему с помощью соответствующих учетных данных, а затем поднимите учетную запись в корневой каталог:

    sudo -s 
    
  2. Выведите список подключенных устройств с помощью команды lsblk . В выходных данных должно появиться несколько подключенных дисков. Эти диски включают активный диск ОС и зашифрованный диск. Они могут отображаться в любом порядке.

  3. Определите зашифрованный диск, используя следующие сведения:

    • Диск будет иметь несколько секций
    • На диске не будет указан корневой каталог ("/") в качестве точки подключения ни для одной из его секций.
    • Диск будет соответствовать размеру, который вы указали при создании из snapshot.

    В следующем примере выходные данные указывают на то, что sdd — это зашифрованный диск. Это единственный диск, который содержит несколько секций и не содержит "/" в качестве точки подключения.

    Изображение первого примера

  4. Отключите все секции на зашифрованном диске данных, подключенные в файловой системе. Например, в предыдущем примере необходимо отключить и "/boot/efi"* и "/boot".

    umount /boot/efi 
    
    umount /boot 
    

Определение файла ключа ADE

Для разблокировки зашифрованного диска необходимо иметь файл ключа и файл заголовка. Файл ключа хранится в томе BEK, а файл заголовка находится в загрузочном разделе зашифрованного диска ОС.

  1. Определите, какая секция является томом BEK:

    lsblk -fs | grep -i bek 
    

    В следующем примере выходных данных указано, что sdb1 является томом BEK:

    >sdb1  vfat   BEK VOLUME      04A2-FE67 
    

    Если том BEK не существует, повторно создайте виртуальную машину восстановления, подключив зашифрованный диск. Если том BEK по-прежнему не присоединяется автоматически, попробуйте метод 3 , чтобы получить том BEK.

  2. Создайте каталог с именем "azure_bek_disk" в папке /mnt:

    mkdir /mnt/azure_bek_disk 
    
  3. Подключите том BEK в каталоге /mnt/azure_bek_disk. Например, если sdb1 является томом BEK, введите следующую команду:

    mount /dev/sdb1 /mnt/azure_bek_disk 
    
  4. Снова выведите список доступных устройств:

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT  
    

    Примечание: Вы увидите, что раздел, который вы определили как том BEK, теперь подключен в "/mnt/azure_bek_disk".

  5. Просмотрите содержимое в каталоге "/mnt/azure_bek_disk/".

    ls -l /mnt/azure_bek_disk
    

    В выходных данных должны отобразиться следующие файлы (файл ключа ADE — "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
    

    Если к зашифрованной виртуальной машине подключено несколько дисков LinuxPassPhraseFileName, может появиться несколько дисков. Значение "LinuxPassPhraseFileName" будет перечислено в соответствии с количеством дисков в том же порядке, что и их логические номера единиц (LUN).

Определение файла заголовка

Загрузочный раздел зашифрованного диска содержит файл заголовка. Этот файл вместе с файлом ключа LinuxPassPhraseFileName будет использоваться для разблокировки зашифрованного диска.

  1. Используйте следующую команду, чтобы отобразить выбранные атрибуты доступных дисков и секций:

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
    
  2. На зашифрованном диске определите раздел ОС (корневой раздел). Это самая большая секция на зашифрованном диске. В предыдущем примере выходных данных раздел ОС имеет значение sda4. Этот раздел необходимо указать при выполнении команды разблокировки.

  3. В корневом каталоге ("/") файловой структуры создайте каталог, к которому нужно подключить корневой раздел зашифрованного диска. Этот каталог будет использоваться позже, после того как диск будет разблокирован. Чтобы отличить ее от активной секции ОС на виртуальной машине восстановления, присвойте ей имя "investigateroot".

    mkdir /{investigateboot,investigateroot}
    
  4. На зашифрованном диске определите загрузочный раздел, содержащий файл заголовка. На зашифрованном диске загрузочный раздел является второй по величине секцией, которая не отображает значения в столбце LABEL или PARTLABEL. В предыдущем примере выходных данных загрузочный раздел зашифрованного диска — "sda2".

  5. Подключите загрузочный раздел, определенный на шаге 4, в каталог /investigateboot/. В следующем примере загрузочным разделом зашифрованного диска является sda2. Однако расположение в системе может отличаться.

    mount /dev/sda2 /investigateboot/ 
    

    Если подключение секции завершается сбоем и возвращает сообщение об ошибке "неправильный тип fs, неправильный параметр, неправильный суперблок", повторите попытку mount -o nouuid с помощью команды, как показано в следующем примере:

    mount -o nouuid /dev/sda2 /investigateboot/ 
    
  6. Список файлов, которые находятся в каталоге /investigateboot/. Подкаталог luks содержит файл заголовка, необходимый для разблокировки диска.

  7. Список файлов, которые находятся в каталоге /investigateboot/luks/. Файл заголовка называется osluksheader.

    ls -l /investigateboot/luks 
    

Разблокировка диска с помощью файла ключа ADE и файла заголовка

  1. Используйте команду , cryptsetup luksOpen чтобы разблокировать корневой раздел на зашифрованном диске. Например, если путь к корневому разделу, который содержит зашифрованную ОС, — /dev/sda4 и вы хотите присвоить разблокированной секции имя osencrypt, выполните следующую команду:

    cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt 
    
  2. Теперь, когда диск разблокирован, отключите загрузочный раздел зашифрованного диска из каталога /investigateboot/:

    umount /investigateboot/ 
    

    Примечание: Позже вам придется подключить этот раздел к другому каталогу.

    Следующим шагом является подключение секции, которую вы только что разблокировали. Метод, используемый для подключения секции, зависит от платформы сопоставителя устройств (LVM или не LVM), используемой диском.

  3. Выведите сведения об устройстве вместе с типом файловой системы:

    lsblk -o NAME,FSTYPE 
    

    Вы увидите разблокированную секцию и назначенное ей имя (в нашем примере это имя —osencrypt):

Подключите разблокированную секцию и войдите в среду chroot (только LVM)

Если диски используют платформу сопоставителя устройств LVM, необходимо выполнить дополнительные действия, чтобы подключить диск и войти в среду chroot. Чтобы использовать средство chroot вместе с зашифрованным диском, разблокированную секцию ("osencrypt") и его логические тома необходимо распознать как группу томов с именем rootvg. Однако по умолчанию раздел ОС виртуальной машины восстановления и его логические тома уже назначены группе томов с именем rootvg. Прежде чем продолжить, мы должны устранить этот конфликт.

  1. pvs Используйте команду для отображения свойств физических томов LVM. Вы можете увидеть предупреждающие сообщения, как показано в следующем примере, которые указывают на то, что разблокированный раздел ("/dev/mapper/osencrypt") и другое устройство используют повторяющиеся универсальные уникальные идентификаторы (UUID). Кроме того, вы можете увидеть две секции, назначенные rootvg.

    Примечание.

    Вы хотите назначить группе томов rootvg только разблокированную секцию (osencrypt), чтобы получить доступ к ее логическим томам с помощью программы chroot. Чтобы устранить эту проблему, вы временно импортируете раздел в другую группу томов и активируете эту группу томов. Затем вы переименуете текущую группу томов rootvg. Только после входа в среду chroot группа томов зашифрованного диска будет переименована в rootvg.

Назначение разблокированного раздела (пример)

  1. Импортируйте недавно разблокированный раздел в новую группу томов. В этом примере мы временно именуем новую группу томов "rescuemevg". Импортируйте недавно разблокированный раздел в новую группу томов. В этом примере мы временно именуем новую группу томов "rescuemevg".

  2. Активируйте новую группу томов:

    vgimportclone -n rescuemevg /dev/mapper/osencrypt
    vgchange -a y rescuemevg
    
  3. Переименуйте старую группу томов rootvg. В этом примере мы будем использовать имя "oldvg".

    vgrename rootvg oldvg 
    
  4. Выполните команду lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT , чтобы просмотреть доступные устройства. Теперь обе группы томов должны отображаться в списке по именам, назначенным им.

  5. Подключите логический том rescuemevg/rootlv к каталогу /investigateroot/ без использования повторяющихся идентификаторов UUID:

    umount /investigateboot
    mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/ 
    

    Теперь корневой раздел неработоспособной виртуальной машины разблокирован и подключен, и вы сможете получить доступ к корневому разделу для устранения неполадок. Дополнительные сведения см. в статье Устранение неполадок с загрузкой виртуальной машины Linux из-за ошибок файловой системы.

    Однако если вы хотите использовать программу chroot для устранения неполадок, выполните следующие действия.

  6. Подключите загрузочный раздел зашифрованного диска к каталогу /investigateroot/boot/ без использования повторяющихся идентификаторов UUID. (Помните, что загрузочный раздел зашифрованного диска является вторым по величине, которому не назначена метка секции.) В нашем текущем примере загрузочный раздел зашифрованного диска — sda2.

    mount -o nouuid /dev/sda2 /investigateroot/boot
    
  7. Подключите системный раздел EFI зашифрованного диска к каталогу /investigateroot/boot/efi. Эту секцию можно определить по метки. В нашем текущем примере системный раздел EFI имеет значение sda1.

    mount /dev/sda1 /investigateroot/boot/efi
    
  8. Подключите остальные отключенные логические тома в группе томов зашифрованного диска к подкаталогам "/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
    
  9. Измените active Directory на подключенный корневой раздел на зашифрованном диске:

    cd /investigateroot
    
  10. Введите следующие команды, чтобы подготовить среду 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/
    
  11. Введите среду chroot:

    chroot /investigateroot/
    
  12. Переименуйте группу томов rescuemevg в rootvg, чтобы избежать конфликтов или возможных проблем с grub и initramfs. При повторном создании initramfs сохраните одно и то же соглашение об именовании. Из-за изменения имени vg работайте на виртуальной машине спасения. Он больше не будет полезен при перезапуске. Виртуальную машину для спасения следует рассматривать как временную.

    vgrename rescuemevg rootvg
    
  13. Устранение неполадок в среде chroot. Например, можно прочитать журналы или запустить скрипт. Дополнительные сведения см. в статье Выполнение исправлений в среде chroot.

  14. Выйдите из chroot и переключите диск ОС.

Подключите разблокированный диск и войдите в среду chroot (RAW/non-LVM)

  1. В корневом каталоге ("/") файловой структуры создайте каталог для подключения корневого раздела зашифрованного диска. Этот каталог будет использоваться позже, после того как диск будет разблокирован. Чтобы отличить ее от активной секции ОС виртуальной машины восстановления, присвойте ей имя "investigateroot".

    mkdir /{investigateboot,investigateroot}
    
  2. Подключите недавно разблокированную секцию (osencrypt) к каталогу /investigateroot/:

    mount /dev/mapper/osencrypt /investigateroot/ 
    

    Если подключение секции завершается сбоем и возвращает сообщение об ошибке "неправильный тип fs, неправильный параметр, неправильный суперблок", повторите попытку с помощью команды подключения -o nouuid :

    mount -o nouuid /dev/mapper/osencrypt /investigateroot/ 
    
  3. Попробуйте отобразить содержимое каталога /investigateroot/, чтобы убедиться, что подключенная секция теперь разблокирована:

    ls /investigateroot/ 
    
  4. Теперь корневой раздел виртуальной машины разблокирован и подключен. Вы можете получить доступ к корневому разделу для устранения неполадок. Дополнительные сведения см. в статье Устранение неполадок с загрузкой виртуальной машины Linux из-за ошибок файловой системы.

    Однако если вы хотите использовать программу chroot для устранения неполадок, перейдите к следующему шагу.

  5. Используйте команду lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT для просмотра доступных устройств. Определите загрузочный раздел на зашифрованном диске как второй по величине раздел, которому не назначена метка.

  6. Подключите загрузочный раздел на зашифрованном диске к каталогу "/investigateroot/boot/", как показано в следующем примере:

    mount /dev/sdc2 /investigateroot/boot/ 
    
  7. Измените active Directory на подключенный корневой раздел на зашифрованном диске:

    cd /investigateroot 
    
  8. Введите следующие команды, чтобы подготовить среду 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/ 
    
  9. Введите среду chroot:

    chroot /investigateroot/ 
    
  10. Устранение неполадок в среде chroot. Вы можете читать журналы или запускать скрипт. Дополнительные сведения см. в статье Выполнение исправлений в среде chroot.

  11. Выйдите из chroot и переключите диск ОС.

Способ 3. Повторное шифрование диска для получения файла ключа и разблокировка зашифрованного диска

  1. Создайте виртуальную машину восстановления и подключите копию заблокированного диска к виртуальной машине восстановления:

  2. После присоединения зашифрованного диска в качестве диска данных к виртуальной машине восстановления используйте Key Vault и ключ шифрования ключа (KEK), которые использовались для исходной виртуальной машины, чтобы повторно зашифровать этот диск данных. Этот процесс автоматически создает и подключает том BEK с помощью файла ключа BKE на виртуальной машине восстановления. Не следует использовать параметр EncryptFormatAll , так как расширение ADE может зашифровать загрузочный сектор на диске данных.

    • Если исходная виртуальная машина зашифрована оболочкой BEK, выполните следующую команду.

       az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault"  --key-encryption-key "kek" --volume-type "data"
      
    • Если исходная виртуальная машина зашифрована bek, выполните следующую команду:

      az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault"  --volume-type "data"
      

      Чтобы определить значения для disk-encryption-keyvault и key-encryption-key, выполните следующую команду:

      az vm encryption show --name "OriginalVmName" --resource-group "ResourceGroupName"
      

      В следующей таблице найдите значения в выходных данных. Если значение keyEncryptionKey пустое, виртуальная машина шифруется с помощью BEK.

      Параметр Значение в выходных данных пример
      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
  3. Выполните следующую команду, чтобы проверка, подключен ли новый диск:

    lsblk -f
    

    Если подключен новый диск, перейдите в раздел Определение файла ключа ADE в томе BEK, а затем выполните указанные действия, чтобы разблокировать диск.

Дальнейшие действия

Если у вас возникли проблемы с подключением к виртуальной машине, см. статью Устранение неполадок SSH-подключений к виртуальной машине Azure.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.