Отчаявшись и не высыпавшись, после многих дней попыток все еще не могу автоматически разблокировать LUKS с TPM, хочется плакать, что я делаю не так?

Вопрос или проблема

Во-первых, приветствую и надеюсь, что у вас, читатель, всё хорошо.

Я провёл последние пять дней практически без сна. Я искал информацию на многих IT-сайтах, включая Stack Exchange, а также использовал ботов ChatGPT и Gemini для выполнения этой задачи, и до сих пор мне не удалось решить проблему.

Попробуете спросить меня, что я пытаюсь решить?

Я установил Debian на эту машину… Я произвёл простую, незашифрованную установку. В этом сервере три диска:

  • 1x NVMe диск, ёмкостью 1 ТБ, для разделов /EFI, /boot и /, а также для swap

  • 2x WD Red Pro диска емкостью 16 ТБ, которые зеркалятся в RAID1 LVM, где находится раздел /home, этот раздел до недавнего времени тоже был незашифрованным

Потом один из 16TB Red Pro HDD вышел из строя, что привело к деградации массива RAID1. Я вернул диск по гарантии, получил замену, установил его в машину и добавил в RAID, процесс синхронизации занял пару дней, но диск был синхронизирован. Теперь состояние массива стабильное.

Я использовал Debian 12. Я решил стереть NVMe и заново создать сервер, основываясь на Ubuntu (я знаю, что это производная система). Прежде чем я добавил заменённый диск для синхронизации, я зашифровал оригинальный диск с помощью LUKS при помощи следующей команды:

cryptsetup reencrypt --encrypt /dev/mapper/RAID-Home --reduce-device-size 32M --cipher aes-xts-plain64 --key-size 512

Я также уменьшил размер раздела, чтобы поместить заголовок LUKS. Процесс завершился, диск 1 из 2 в RAID зашифрован. После добавления и синхронизации второго диска у меня теперь есть два зашифрованных диска, предположительно являющихся зеркальными копиями, так что заголовок и ключи LUKS будут одинаковыми.

Результаты команды lsblk -fs:

Luks-33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj btrfs                                                       76f96749-7254-xxxxx-xxxx-xxxxxxx                  
└─RAID-Home                               crypto_LUKS       2                                         33d0787e-079e-yyyy-yyyy-yyyyyyyyyyyyu                  
  └─md0                                   LVM2_member       LVM2 001                                  O7T2lP-kQqv-zzzzz-zzzz-zzzz-zzzz-zzzzzz                
    ├─sda                                 linux_raid_member 1.2              ubuntu:raid_home         e9a3119b-e8b7-qqqq-qqqq-qqqqqqqqq                  
    └─sdb                                 linux_raid_member 1.2              ubuntu:raid_home         e9a3119b-e8b7-bbbbbb-bbbb-bbbbbbbbbbb                  
nvme0n1p1                                 vfat              FAT32                                     aaaa-aaaa                               479.9M     1% /boot/efi
└─nvme0n1                                                                                                                                                   
nvme0n1p2                                                                                                                                                   
└─nvme0n1                                                                                                                                                   
nvme0n1p3                                 swap              1                                         6b700b82-cccc-cccc-cccc-cccccccc                  [SWAP]
└─nvme0n1                                                                                                                                                   
nvme0n1p4                                 ext4              1.0                                       e7180d61-dddd-ddddd-dddd-dddddddd    791.3G     5% /var/snap/firefox/common/host-hunspell
│                                                                                                                                                           /
└─nvme0n1 

Мой /etc/crypttab:

#HomeDecrypted /dev/mapper/RAID-Home tpm2-device=auto,none,luks,discard
luks-33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj UUID=33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj tpm2-device=auto,none,luks,discard

И /etc/fstab:

#Home folder
# before encryption UUID=76f96749-nnnn-nnnn-nnnn-nnnnnnnnnnn  /home           btrfs    defaults        0       2
#after encryption:
/dev/mapper/HomeDecrypted   /home   btrfs   defaults,[email protected],[email protected]   0   0

Выше – только “последняя” итерация моих попыток. Я пробовал все возможные подходы, рекомендованные в интернете и ChatGPT/Gemini, с различным уровнем неудач.

Я буквально вымотан в данный момент. Хочу понять, где я ошибаюсь и как это исправить.

Моя цель:

оставить системные разделы (/EFI, /boot, / и swap) на NVMe диске нетронутыми, чтобы автоматически монтировать раздел /home с помощью TPM при перезагрузке, потому что если будет длительное отключение питания, дольше чем UPS может поддерживать систему в рабочем состоянии, в BIOS установлено автоматическое включение после восстановления питания. Это означает, что службы продолжат работу, даже если я не могу ввести пароль LUKS вручную на экране загрузки.

Пожалуйста, научите меня, как это исправить, с инструкциями о том, что необходимо сделать, а также объяснением, почему и для чего это нужно.

Спасибо! Я отчаянно нуждаюсь в сне и у меня больше нет сил 🙁 Мне действительно нужна помощь, чтобы решить это.

PS-должно быть понятно, что некоторая информация, как и идентификаторы разделов, была скрыта по соображениям конфиденциальности.

PS2-если вам потребуется дополнительная информация о моей системе (например, конкретные apt-пакеты), то, пожалуйста, скажите, какие команды мне нужно выполнить, и я отредактирую этот вопрос, чтобы предоставить соответствующие данные.

Заранее благодарю за вашу помощь!

Ответ или решение

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

Теория

Давайте разберемся с тем, что вы пытаетесь сделать: автоматическое разблокирование LUKS с помощью TPM (Trusted Platform Module) на сервере с Debian/Ubuntu. Это задача по созданию безопасного и автоматизированного решения для шифрования, чтобы система могла самостоятельно загружаться и восстанавливать работу после перебоев питания без вашего вмешательства. Вы уже выполнили шифрование дисков LUKS, но автоматическое разблокирование с помощью TPM вызывает трудности.

TPM — это микросхема, предназначенная для обеспечения аппаратной безопасности. Она может хранить криптографические ключи и выполнять операции, которые сложно обойти или скомпрометировать. Используя TPM для разблокировки LUKS, ваша стратегия состоит в том, чтобы TPM автоматически предоставлял ключи, необходимые для разблокировки зашифрованного тома во время загрузки.

Пример

Основными шагами в автоматизации LUKS с TPM являются:

  1. Настройка TPM: Проверьте, что TPM активирован в BIOS и что у вас установлены все необходимые пакеты для работы с TPM, такие как tpm2-tools.

  2. Извлечение TPM Seal: Привяжите LUKS ключ к TPM через специальный механизм. Это означает «запечатывание» ключа, так что он может быть извлечен только с использованием TPM.

  3. Интеграция с LUKS и initramfs: Сборка скриптов, которые используют TPM для извлечения ключа на ранних стадиях загрузки, переход от initramfs к корневой файловой системе. Эти скрипты должны быть частью вашего initramfs.

  4. Настройка crypttab и fstab: Эти файлы конфигурации должны быть правильно настроены для автоматического разблокирования и монтирования зашифрованных томов.

Применение

Теперь, перейдем к предложениям, как реализовать это на практике:

  1. Проверьте состояние TPM: Используйте tpm2_getcap и tpm2_pcrread, чтобы убедиться в том, что TPM работает корректно и под управлением ваших ОС. Это шаг для диагностики возможных аппаратных проблем.

  2. Установите tpm2-tools: Если их еще нет, установите sudo apt install tpm2-tools tpm2-abrmd.

  3. Создайте TPM ключ: Введите команду для связывания LUKS ключа с TPM, например:

    dd if=/dev/urandom bs=1 count=32 of=/etc/luks-keyfile
    cryptsetup luksAddKey /dev/your-encrypted-device /etc/luks-keyfile
    tpm2_sealdata -i /etc/luks-keyfile -o /etc/luks-keyfile-sealed

    Эти команды создают случайный ключ и связывают его с TPM.

  4. Измените initramfs:
    Вам потребуется скрипт, который будет встроен в initramfs для извлечения ключа из TPM при запуске системы. Это может быть небольшой Bash-скрипт, который вызовет tpm2_unseal, чтобы извлечь LUKS ключ и разблокировать том.

  5. Настройка crypttab и fstab: В crypttab, вместо стандартного указания ключа, используйте скрипт для извлечения ключа:

    luks-33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj UUID=33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj none luks,discard

    Этот скрипт обеспечит извлечение ключа непосредственно в момент, необходимый для разблокировки.

  6. Пересборка initramfs: После внесения изменений в initramfs вам понадобится его пересобрать: sudo update-initramfs -u.

  7. Тестирование: Перезагрузите сервер и следите за загрузкой системы. Проверьте, правильно ли происходит автоматическая разблокировка тома и монтирование.

  8. Диагностика и отладка: Если что-то пошло не так, внимательно проверьте журналы системы (journalctl -b) и убедитесь, что все шаги выполнены корректно.

Если вы после выполнения этих шагов все еще сталкиваетесь с проблемами, имеет смысл обратиться за помощью в сообщества Debian/Ubuntu, предоставив как можно больше подробной информации о конфигурациях и шагах, которые вы выполняли.

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

Оцените материал
Добавить комментарий

Капча загружается...