Полнодисковое шифрование с помощью cryptsetup/LUKS#
✓ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
✓ |
В этом руководстве показано, как настроить тома с LUKS-шифрованием для аутентификации при загрузке с помощью Nitrokey Pro или Nitrokey Storage.
Для справки: cryptsetup-initramfs теперь поддерживает использование смарт-карт OpenPGP, таких как Nitrokey Pro и Nitrokey Storage, для разблокирования томов с LUKS-шифрованием. После завершения настройки вам нужно будет просто вставить Nitrokey при загрузке и ввести PIN-код пользователя вместо ввода обычной парольной фразы шифрования диска.
Эти инструкции были протестированы на Ubuntu 20.04 и Debian 10.
Предупреждение
Следующее руководство может потенциально заблокировать ваш компьютер. Вы должны знать об этих рисках, и мы рекомендуем вам использовать приведенный ниже сценарий на дополнительном компьютере или после полного резервного копирования, поскольку вы можете потерять свои данные.
Требования#
Компьютер Ubuntu или Debian с хотя бы одним томом с LUKS-шифрованием.
См. раздел ниже, чтобы определить, какой метод совместим с данным руководством.
Nitrokey Pro 2 или Nitrokey Storage 2 инициализированный с ключами.
Известные проблемы#
Пока сценарий работает только с томами, разбитыми вручную, которые состоят из незашифрованного раздела /boot
и зашифрованного корневого раздела /
.
Пожалуйста, не выбирайте автоматическое шифрование всего диска, предусмотренное операционной системой, которую вы используете для данного руководства. Вы столкнетесь с повторяющимися ошибками при автоматическом разбиении на разделы, используя интерфейс установки на Ubuntu и Debian.
Инструкции#
Установите зависимости
$ sudo apt install scdaemon opensc gnupg2
Создайте каталог smartcard-luks
$ mkdir smartcard-luks && cd smartcard-luks
Скачать скрипт smartcard-luks-script
$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks $ sudo chmod +x smartcard-key-luks
Экспорт открытого ключа
Чтобы экспортировать свой открытый ключ из связки ключей GnuPG:
$ gpg2 --armor --export KeyID > pubkey.asc
Если вы уже загрузили открытый ключ на сервер ключей (или храните его где-то еще), вам следует получить его тем способом, который вам удобен, и перейти к шагу 5.
Определите и проверьте правильность имени устройства LUKS для корневого раздела:
$ cat /etc/crypttab # if there is only one entry, you want the 1st column of this entry
Подсказка
Обычно это должно быть что-то вроде nvme0n1p3_crypt (для NitroPC) или sda3_crypt (для NitroPads). Вы можете и должны проверить, что UUID, указанный в /etc/crypttab, является назначенным разделом, проверив символическую ссылку в /dev/disks/by-uuid/.
Выполните скрипт, указав в качестве аргументов имя устройства luks (например, nvme0n1p3_crypt) и pubkey.asc.
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
После запуска скрипта с открытым ключом OpenPGP в качестве аргумента, он автоматически устанавливает новый секрет LUKS, шифрует его с помощью этого открытого ключа и устанавливает crypttab, LUKS, initramfs и GRUB.
Сначала вам будет предложено ввести User PIN
.
После разблокировки Nitrokey вам будет предложено ввести OLD passphrase
. Это парольная фраза, которую вы ввели для шифрования вашего тома при установке.
Примечание
Это запасной вариант на случай, если вы потеряете Nitrokey или он будет недоступен. Пока он не был протестирован, и пользователи должны помнить о риске блокировки компьютера, если запасной способ не сработает.
После ввода парольной фразы сценарий завершит настройку примерно за одну минуту. Не прерывайте выполнение сценария, иначе вы можете получить блокировку компьютера после перезагрузки.
Готово!
К этому моменту вы должны перезагрузиться, и вы сможете использовать Nitrokey для разблокировки зашифрованного диска.
Использование#
После перезагрузки вам будет предложено ввести PIN-код пользователя.
Введите PIN-код пользователя, чтобы разблокировать накопитель
Дальнейшие советы#
Изменить парольную фразу#
После выполнения этой настройки вы больше не должны использовать (gnome) утилиту disks для изменения (резервной) парольной фразы. Правильный способ сделать это - вызвать cryptsetup напрямую следующим образом:
$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3
При этом nvme0n1p3 будет разделом, для которого вы установили ключи.
Используйте несколько клавиш#
Легко использовать несколько (аппаратных) ключей безопасности, чтобы каждый из них мог разблокировать диск LUKS независимо. Просто экспортируйте несколько открытых ключей, а также передайте несколько ключей в сценарий настройки следующим образом:
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc
Установить имя держателя карты#
Во время ввода PIN-кода при загрузке для расшифровки корневого раздела LUKS пользователю представляется владелец карты, для установки используйте $ gpg --edit-card
и внутри подсказки введите admin
и name
для установки владельца карты OpenPGP Card (Nitrokey Storage 2 или Nitrokey Pro 2).
Замена/удаление клавиш#
Невозможно добавить/удалить ключи напрямую. Поэтому вам необходимо удалить/удалить старую установку и запустить установку заново с назначенным(и) ключом(ами):
Удалите ключевой файл (путь, если вы использовали сценарий выше) из luks-device (nvme0n1p3):
$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg
Удалите сам ключевой файл:
$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg
Повторно выполните вышеуказанную настройку.
Разблокировка LUKS2 с помощью сертификата X509#
SystemD поддерживает разблокировку раздела LUKS2 с помощью сертификата X509, найдите отличную запись в блоге о том, как это реализовать на Личный блог Владимира Тимофеенко.