Версия: 20
Clevis - утилита, предназначенная для автоматической разблокировки зашифрованных томов и запутывающе закодированных файловых систем. Она используется в сочетании с инструментами шифрования, такими как LUKS, чтобы обеспечить гибкое управление доступом к зашифрованным данным. Clevis позволяет автоматически разблокировать тома, основываясь на заранее настроенных политике или условиях.
Контактная информация:
Проект GitHub
Лицензия:
GPL3
Синтаксис:
clevis КОМАНДА [ОПЦИИ]
| Команды | Описание |
|---|---|
| clevis decrypt | Дешифрует с использованием политики, определенной во время шифрования |
| clevis encrypt sss | Шифрует с использованием политики секретного разделения Шамира |
| clevis encrypt tang | Шифрует с использованием политики сервера привязки Tang |
| clevis encrypt tpm2 | Шифрует с использованием политики привязки чипа TPM2.0 |
| clevis luks bind | Привязывает устройство LUKS с использованием указанной политики |
| clevis luks edit | Редактирует привязку в слоте, привязанном с помощью clevis в устройстве LUKS |
| clevis luks list | Список пинов, привязанных к устройству LUKSv1 или LUKSv2 |
| clevis luks pass | Возвращает парольную фразу LUKS, используемую для привязки к конкретному слоту |
| clevis luks regen | Регенерирует привязку clevis |
| clevis luks report | Отчет о вращении ключей Tang |
| clevis luks unbind | Отвязывает пин, привязанный к тому LUKS |
| clevis luks unlock | Разблокирует том LUKS |
Для шифрования строки с помощью clevis следует открыть терминал и ввести:
clevis encrypt tpm2 '{}' <<< 'hello, world'
Где:
Примерный вывод:
eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA
Это длинное сообщение, закодированное в base64, — текст 'hello, world', зашифрованный внутренним ключом TPM. Его можно расшифровать только на текущем компьютере. Попытка расшифровать его с другого компьютера (или, скорее, с другого TPM-модуля) вернет ошибку.
Для дешифрования строки следует использовать 'decrypt' утилиты clevis отправляя на ввод зашифрованную строку:
$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'
Примерный вывод:
hello, world
Внимание! Следует установить надежный резервный пароль на случай, если процесс восстановления TPM не удастся, с помощью команды:
cryptsetup luksAddKey /dev/sdX
Для привязки тома LUKS к TPM следует выполнить команду в терминале:
clevis luks bind -d /dev/sdX tpm2 '{}'
Где:
Чтобы заблокировать ключ LUKS с учетом настроек UEFI и политики Secure Boot, следует использовать:
'{"pcr_ids":"1,7"}'Если команда не удается с ошибкой: ERROR: pcr-input-file filesize does not match pcr set-list, следует указать другой банк PCR:
'{"pcr_bank":"sha256","pcr_ids":"1,7"}'На август 2022 года Clevis поддерживает только банки sha1 (по умолчанию) и sha256. Посмотреть доступные и используемые банки можно с помощью команды:
tpm2_pcrread
Чтобы сгенерировать новый пин Clevis после изменений в конфигурации системы, которые приводят к изменению значений PCR, например, после обновления UEFI, когда используется PCR 0, следует выполнить:
cryptsetup luksDump /dev/sdX
Где:
Tokens:
token slot: clevis
Keyslot: keyslot
Найти слот, используемый для пина Clevis, затем следует выполнить:
clevis luks regen -d /dev/sdX -s keyslot
Чтобы удалить привязку Clevis, следует выполнить:
clevis luks unbind -d /dev/sdX -s keyslot
Предупреждение: Следует внимательно проверить, что выбран правильный слот, иначе есть риск потерять доступ к тому.
Для разблокировки тома, привязанного к TPM, следует использовать команду:
clevis luks unlock -d /dev/sdX
Для автоматической расшифровки томов в /etc/crypttab, следует включить clevis-luks-askpass.path.
Внимание! Настройка шифрования разделов — это ответственный и технически сложный процесс. Неправильные действия могут привести к потере или недоступности данных. Подобные операции должен выполнять квалифицированный специалист, несущий ответственность за свои действия. Автор статьи не несёт ответственности (явной или подразумеваемой) за возможные последствия.
Для настройки автоматической разблокировки дисков с помощью TPM следует открыть терминал и выполнить проверку функциональности:
test -c /dev/tpm0 && echo OK || echo FAIL
test -d /sys/firmware/efi && echo OK || echo FAIL
sudo -i
echo 'ublinux test' | clevis encrypt tpm2 '{}' > test.jwe
cat test.jwe | clevis decrypt tpm2
Если ответы всех команд "FAIL", а тестовый процесс шифрования завершился с ошибками, то разблокировка при помощи TPM невозможна.Для автоматической разблокировки тома, зашифрованного LUKS, следует определить устройство командой:
lsblk
Примерный вывод:
NAME S MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 256M 0 part /boot
├─sda2 8:2 0 1G 0 part /data
└─sda3 8:3 0 20G 0 part
└─luks-6d10b25b-003a-49ed-baca-89f69b2e69aa
253:0 0 20G 0 crypt
Перед настройкой разблокировки рекомендуется выполнить создание резервной копии LUKS-заголовка на случай возникновения каких-либо проблем:
sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file /media/data/header-sda3.img
Этот файл необходимо хранить в надежном месте на отдельном устройстве, так как он содержит LUKS-заголовок, включая все созданные ключевые слоты и соответствующие им ключи шифрования. Его использование позволяет восстановить состояние, предшествующее внесенным изменениям.
Далее необходимо привязать том к устройству TPM2.0 и сгенерировать ключевую пару:
sudo clevis luks bind -d /dev/sda3 tpm2 '{"hash":"sha256","key":"rsa"}'
Где:
Данная команда выполняет следующие действия:
При необходимости привязки данных к определенным состояниям регистров конфигурации платформы (PCR), а значения pcr_bank и pcr_ids - к команде clevis luks bind, следует выполнить команду:
sudo clevis luks bind -d /dev/sda3 tpm2 ‘{“hash”:”sha256”,”key”:”rsa”,”pcr_bank”:”sha256”,”pcr_ids”:”0,1”}’
Далее необходимо пересоздать образ initrd ядра, который будет включать в себя модуль работы с TPM для ранней стадии загрузки системы:
sudo dracut -f
И перезагрузить систему:
sudo systemctl reboot
После привязки можно выполнить разблокировку тома с помощью существующего пароля и политики Clevis, например:
sudo clevis luks unlock -d /dev/sda3
Чтобы разрешить системе загрузки обрабатывать привязку диска, следует использовать инструмент dracut:
sudo dracut -fv --regenerate-all
Для того чтобы просмотреть, какие политики были привязаны к зашифрованному тому LUKS, а также узнать, какие параметры (например, алгоритмы хеширования и ключи) используются для защиты ключа расшифровки, следует выполнить команду:
sudo clevis luks list -d /dev/sda3
Примерный вывод:
tpm2 '{"hash":"sha256","key":"rsa"}'
Установить можно отдельным модулем или пакетом:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Пакет, необходимый для установки:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы.