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


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

Область применения: ✔️ виртуальные машины Linux

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

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

Симптомы

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

mount: wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error

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

Подготовка

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

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

Убедитесь, что ADE включен на диске

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

Портал Azure

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

Снимок экрана: колонка обзора для V M на портале Azure с указанием включения D 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 версии 0 (двойное сквозное шифрование), выполните действия, описанные в методе 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 или non-LVM.

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

  1. Создание моментального снимка зашифрованного диска ОС.

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

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

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

Внимание

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

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

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

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

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

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

    В следующем примере выходные данные указывают на то, что 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. В корневом каталоге ("/") структуры файла создайте каталог, к которому необходимо подключить корневую секцию зашифрованного диска. Вы будете использовать этот каталог позже после разблокировки диска. Чтобы отличить его от активной секции ОС для виртуальной машины восстановления, присвойте ему имя "расследовать".

    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. Список файлов, которые находятся в каталоге /расследуемого файла. Подкаталог "luks" содержит файл заголовка, который необходимо разблокировать диск.

  7. Список файлов, которые находятся в каталоге /расследуемого или 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 или non-LVM), используемой диском.

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

    lsblk -o NAME,FSTYPE 
    

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

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

Если диски используют платформу mapper устройств 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. При повторном создании инициамов сохраните то же соглашение об именовании. Из-за изменений имени vg работа на виртуальной машине спасения. Он больше не будет полезен, если перезапустить его. Виртуальная машина спасения должна рассматриваться как временная виртуальная машина.

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

  14. Закройте chroot и переключите диск ОС.

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

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

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

    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. Подключите загрузочный раздел на зашифрованном диске к каталогу "/расследуемая/загрузка/", как показано в следующем примере:

    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 и ключ key Encrypted (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"
      

      Чтобы определить значения для диска-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-000c7a96d37/resourceGroups/Thomas/providers/Microsoft.KeyVault/vaults/ContosoKeyvault
      ключ шифрования ключей keyEncryptionKey:KeyURI https://ContosoKeyvault.vault.azure.net/keys/mykey/00000000987145a3b79b0ed415fa0000
  3. Выполните следующую команду, чтобы проверить, подключен ли новый диск:

    lsblk -f
    

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

Следующие шаги

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

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

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