Вопрос или проблема
Во-первых, приветствую и надеюсь, что у вас, читатель, всё хорошо.
Я провёл последние пять дней практически без сна. Я искал информацию на многих 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 являются:
-
Настройка TPM: Проверьте, что TPM активирован в BIOS и что у вас установлены все необходимые пакеты для работы с TPM, такие как
tpm2-tools
. -
Извлечение TPM Seal: Привяжите LUKS ключ к TPM через специальный механизм. Это означает «запечатывание» ключа, так что он может быть извлечен только с использованием TPM.
-
Интеграция с LUKS и initramfs: Сборка скриптов, которые используют TPM для извлечения ключа на ранних стадиях загрузки, переход от initramfs к корневой файловой системе. Эти скрипты должны быть частью вашего initramfs.
-
Настройка crypttab и fstab: Эти файлы конфигурации должны быть правильно настроены для автоматического разблокирования и монтирования зашифрованных томов.
Применение
Теперь, перейдем к предложениям, как реализовать это на практике:
-
Проверьте состояние TPM: Используйте
tpm2_getcap
иtpm2_pcrread
, чтобы убедиться в том, что TPM работает корректно и под управлением ваших ОС. Это шаг для диагностики возможных аппаратных проблем. -
Установите tpm2-tools: Если их еще нет, установите
sudo apt install tpm2-tools tpm2-abrmd
. -
Создайте 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.
-
Измените initramfs:
Вам потребуется скрипт, который будет встроен в initramfs для извлечения ключа из TPM при запуске системы. Это может быть небольшой Bash-скрипт, который вызоветtpm2_unseal
, чтобы извлечь LUKS ключ и разблокировать том. -
Настройка crypttab и fstab: В crypttab, вместо стандартного указания ключа, используйте скрипт для извлечения ключа:
luks-33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj UUID=33d0787e-jjjjj-jjjj-jjjj-jjjjjjjjjjj none luks,discard
Этот скрипт обеспечит извлечение ключа непосредственно в момент, необходимый для разблокировки.
-
Пересборка initramfs: После внесения изменений в initramfs вам понадобится его пересобрать:
sudo update-initramfs -u
. -
Тестирование: Перезагрузите сервер и следите за загрузкой системы. Проверьте, правильно ли происходит автоматическая разблокировка тома и монтирование.
-
Диагностика и отладка: Если что-то пошло не так, внимательно проверьте журналы системы (
journalctl -b
) и убедитесь, что все шаги выполнены корректно.
Если вы после выполнения этих шагов все еще сталкиваетесь с проблемами, имеет смысл обратиться за помощью в сообщества Debian/Ubuntu, предоставив как можно больше подробной информации о конфигурациях и шагах, которые вы выполняли.
Удачи, и надеюсь, вы скоро можете отдохнуть! Если проблема не решена, не стесняйтесь обращаться за дополнительной помощью.