Часть 3: Юбикей 4 и LUKS
Введение
В этой статье обсуждается, как реализовать двухфакторную аутентификацию с использованием ключа Yubikey 4 для монтирования зашифрованного раздела LUKS. Процесс реализации двухфакторной аутентификации с использованием ключа Yubikey 4 для монтирования зашифрованного раздела LUKS можно разбить на три части: 1. Подготовка раздела LUKS. 2. Подготовка к использованию ключа Yubikey 4 в операционной системе.3. Непосредственно используйте ключ Yubikey 4 для двухфакторной аутентификации.
Первоначальные условия:
- Linux Mint 18 Сара 64-битная
- Юбикей 4
Подготовка раздела LUKS
Необходимо провести предварительный анализ существующего раздела LUKS. Для использования двухфакторной аутентификации с помощью ключа Yubikey 4 нам понадобится один свободный слот LUKS на разделе.
Поэтому вам необходимо знать, сколько слотов свободно и какие.
Кроме того, было бы неплохо ввести дополнительный (резервный) ключ на случай утери (случайной перезаписи) основного ключа.
В качестве дополнительной меры безопасности можно создать дамп MasterKey. Важно отметить, что в реальной системе может использоваться устройство, отличное от /dev/sdb1. Команды в статье приведены для наглядности.
Например, в вашей системе это может быть /dev/sdb5.
Восемь слотов для ключей LUKS
LUKS использует восемь слотов на зашифрованный раздел, каждый из которых может хранить отдельный ключ.Для расшифровки раздела можно использовать любой из восьми ключей.
Вы можете использовать только одну клавишу или назначить все восемь.
Для просмотра всех слотов нужно использовать команду установка крипты :
В этом примере:# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
- /dev/sdb1 — раздел LUKS.
- Слоты ключей начинаются с номера 0. Таким образом, можно использовать слоты от 0 до 7.
- ENABLED – слот содержит ключ, назначенный разделу LUKS.
- Для хранения ключей отведено два слота.
Добавление нового ключа
Чтобы добавить новый ключ — парольную фразу — в зашифрованный раздел LUKS, используйте команду luksAddKey: # cryptsetup luksAddKey /dev/sdb1
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:
В этом примере:
- /dev/sdb1 — зашифрованный раздел
- Введите любую парольную фразу: - введите любой существующий ключ
- Введите новую парольную фразу для слота ключа: - введите новый ключ
- Проверьте парольную фразу: — повторите ввод нового ключа.
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Добавление нового ключа в указанный слот
Чтобы добавить ключ в указанный слот, используйте опцию -S, указывающую номер слота: # cryptsetup luksAddKey /dev/sdb1 -S 5
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: <b>ENABLED</b>
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Удаление существующего ключа
Чтобы удалить существующий ключ, используйте команду luksRemoveKey: # cryptsetup luksRemoveKey /dev/sdb1
Enter LUKS passphrase to be deleted:
При удалении ключа номер слота не используется; необходимо ввести именно парольную фразу – ключ (тот, который был присвоен целевому слоту).
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Удаление ключа
Чтобы удалить ключ, используйте команду luksKillSlot. Эта команда используется, если у вас нет ключа для целевого слота, но вы просто хотите удалить ключ из этого слота.Извлечение ключа из слота №2. Вам будет предложено ввести любой назначенный LUKS-ключ.
# cryptsetup luksKillSlot /dev/sdb1 2
Enter any remaining LUKS passphrase:
Результат: # cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Добавление нового ключа LUKS из файла
Также возможно добавить новый ключ из файла: # cryptsetup luksAddKey /dev/sdb1 masterkeyfile
Enter any passphrase:
В этом примере:
- masterkeyfile содержит новый ключ, который вы хотите добавить.
Это должен быть бинарный (двоичный) файл.
- Когда будет предложено ввести парольную фразу, вы должны ввести любой из существующих ключей для указанного раздела /dev/sdb1.
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Сброс забытого LUKS ключа – установка нового ключа
Если вы перезагрузили (ваш) сервер и не можете смонтировать зашифрованный раздел LUKS, потому что забыли пароль LUKS, у вас нет вариантов.Данные потеряны.
Вам придется снова работать с разделом (зашифровать, возможно переразбить, создать файловую систему, заполнить данными).
Однако если зашифрованный раздел LUKS все еще открыт, вы не перезагрузили систему и забыли пароль LUKS для этого раздела, который все еще смонтирован, вы можете назначить новый ключ LUKS. В сценарии «Я забыл свой пароль LUKS» вы можете выполнить следующие два шага:
- Выберите текущий ключ шифрования из раздела LUKS.
- Создайте новый ключ LUKS, используя предварительно назначенный ключ.
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 127G 44G 76G 37% /
/dev/mapper/home1 93G 188M 88G 1% /home1
Имя тома находится в первом столбце вывода команды «df -h» после «/dev/mapper/», в этом примере имя тома — «home1».
Следующая команда покажет список всех ключей шифрования для всех разделов, смонтированных в системе: # dmsetup table --showkeys
home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096
Поле после «aes-cbc-essiv:sha256» представляет собой зашифрованный пароль.
Давайте получим зашифрованный ключ LUKS и сохраним его в файл: # vi existinglukskey.txt
607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c
Итак, теперь преобразуем полученный ключ из текстового файла в бинарный файл.
Для этого используйте команду «xxd»: # xxd -r -p existinglukskey.txt existinglukskey.bin
В этом примере:
- Опция -r для обратного преобразования.
Это преобразует шестнадцатеричный дамп в двоичный.
- Опция -p для обработки постскриптума.
Здесь мне сложно адекватно перевести руководство man (вывод в стиле постскриптум непрерывного шестнадцатеричного кода.
Также известный как стиль простого шестнадцатеричного кода).
- существующий входной файл lukskey.txt.
- Выходной файл существующегоlukskey.bin. Он будет содержать существующий зашифрованный пароль LUKS в двоичном файле.
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin)
Enter new passphrase for key slot:
Verify passphrase:
В этом примере:
- --master-key-file Указывает двоичный файл.
Не используйте входной файл suchlukskey.txt. Используйте выходной файл существующийlukskey.bin.
- Как видите, команда «cryptsetup luksAddKey» не запрашивает существующий пароль LUKS, поскольку он берется из бинарного файла.
- Когда появится приглашение командной строки «Введите новую парольную фразу для слота ключа:», введите новый пароль LUKS. И на этот раз не забудь его.
Дамп LUKS MasterKey
Вы также можете сбросить MasterKey и сохранить его в безопасном месте.
Помните, что с помощью дампа MasterKey любой может получить доступ к вашему разделу LUKS. # cryptsetup luksDump --dump-master-key /dev/sdb1
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
LUKS header information for /dev/sdb1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Payload offset: 4096
UUID: 146d639a-757c-4bcb-aee6-8fe815345104
MK bits: 256
MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e
aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c
Итак, используя описанные выше способы, для дальнейших действий необходимо сделать следующее:
- Определите устройство(а) с зашифрованным разделом LUKS.
- Определите, какие слоты свободны для записи ключа(ов).
- При необходимости добавьте новый ключ (резервный).
Полное обсуждение того, как работает утилита cryptsetup, выходит за рамки этой статьи.
Желающие могут ознакомиться с использованием и возможностями утилиты cryptsetup. Вот несколько ресурсов, с которых можно начать: wiki.archlinux.org , gitlab.com .
Подготовка к использованию ключа Yubikey 4 в операционной системе
Для работы с ключом Yubikey 4 необходимо установить программное обеспечение.
В системах на базе Ubuntu версии 16.04 и старше выполните следующие команды: 1. sudo apt-get установить yubikey-luks 2. sudo apt-get установить yubikey-персонализацию 3. Вставьте ключ Yubikey 4 в USB-слот и выполните команду: ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Yubikey имеет два слота.
Здесь используется слот №2, поэтому слот №1 можно использовать в обычном режиме «OTP».
4. Чтобы «привязать» ключ Yubikey 4 к слоту LUKS, используйте команду «yubikey-luks-enroll».
Исполняемый файл (скрипт) находится по адресу /usr/bin/yubikey-luks-enroll. Сценарий предполагает, что раздел LUKS расположен на устройстве /dev/sda5. Если в вашем случае это не так, скопируйте скрипт в свой домашний каталог и измените строку: DISK="/dev/sda5"
Следует отметить, что существует разница между именованием устройств, используемых для зашифрованного раздела в системах BIOS и UEFI. Для систем, загружающихся с использованием BIOS, имя тома по умолчанию для шифрования — /dev/sda5. Для загрузочных систем UEFI имя тома по умолчанию для зашифрованных разделов — /dev/sda3. 5. После настройки параметров в скрипте yubikey-luks-enroll запустите его.
При выполнении скрипта будет запрошен новый пароль, который будет отправлен на Yubikey 4 для создания ответа (режим запрос-ответ) и который вы сможете использовать для двухфакторной аутентификации при загрузке системы.
Использование ключа Yubikey 4 для двухфакторной аутентификации
- Вставьте Yubikey 4 в USB-разъем вашего компьютера.
- Включите компьютер.
- В поле ввода пароля введите проверочный пароль — пароль, созданный при запуске скрипта yubikey-luks-enroll. Нажмите клавишу Enter на клавиатуре.
- После отправки пароля вызова на ключ Yubikey и получения ответа начнется процесс расшифровки раздела LUKS, после чего произойдет загрузка операционной системы.
- После завершения процесса расшифровки Yubikey 4 можно вынуть из USB-слота.
Если, конечно, парольная фраза была предварительно введена и сохранена в одном из LUKS-слотов раздела.
Заключение
Использование устройства Yubikey в качестве ключа в качестве второго фактора в процессе аутентификации позволяет существенно повысить безопасность работы с зашифрованными LUKS-разделами.
Теги: #luks #yubikey #yubico #linux #crypto #информационная безопасность #Криптография
-
Толкать
19 Oct, 24 -
Railsclub 2016: Интервью С Заком Бриггсом
19 Oct, 24 -
Почему Вы Остановились На Habrahabr.ru?
19 Oct, 24