- PVSM.RU - https://www.pvsm.ru -
В статье рассматривается реализация двухфакторной аутентификации с помощью ключа Yubikey 4 для монтирования зашифрованного раздела LUKS.
Процесс реализации двухфакторной аутентификации с помощью ключа Yubikey 4 для монтирования зашифрованного раздела LUKS можно разбить на три части:
1. Подготовка LUKS раздела.
2. Подготовка к использованию ключа Yubikey 4 в операционной системе.
3. Непосредственно использование ключа Yubikey 4 для двухфакторной аутентификации.
Начальные условия:
Необходимо провести предварительный анализ существующего LUKS раздела.
Для использования двухфакторной аутентификации с помощью ключа Yubikey 4 нам необходим один свободный слот LUKS раздела. Поэтому нужно знать, сколько слотов свободно и каких именно.
Кроме того, неплохо будет ввести дополнительный (резервный) ключ на случай потери (случайной перезаписи) основного ключа. Как дополнительная мера безопасности, может быть создан дамп MasterKey.
Важно отметить, что на реальной системе может использоваться не /dev/sdb1, а другое устройство. Команды в статье даны для иллюстрации. В вашей системе, например, это может быть устройство /dev/sdb5.
В LUKS для одного зашифрованного раздела используются восемь слотов, в каждом из которых может храниться отдельный ключ. Любой из восьми ключей может быть использован для расшифровки раздела. Можно использовать только один ключ, либо можно назначить все восемь.
Для просмотра всех слотов необходимо воспользоваться командой cryptsetup:
# 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 используется команда luksAddKey:
# cryptsetup luksAddKey /dev/sdb1
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:
В данном примере:
Новый ключ будет добавлен в следующий по порядку доступный слот. В данном случае, это будет слот 2.
# 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
Для удаления ключа используется команда luksRemoveKey. Эта команда используется в том случае, если вы не имеете ключа для целевого слота, но просто хотите удалить ключ из этого слота.
Удаление ключа из слота №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
Также возможно добавление нового ключа из файла:
# cryptsetup luksAddKey /dev/sdb1 masterkeyfile
Enter any passphrase:
В этом примере:
Результат:
# 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 пароль» вы можете сделать следующие два шага:
В этом примере смонтирован раздел /home1, являющийся зашифрованным 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
В этом примере:
И, наконец, добавим новый LUKS ключ используя выделенный в двоичный файл существующий ключ:
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin)
Enter new passphrase for key slot:
Verify passphrase:
В этом примере:
Вы также можете сделать дамп 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
Итак, используя вышеописанные методы, необходимо для дальнейших действий сделать следующее:
Полное рассмотрение работы утилиты cryptsetup не входит в рамки данной статьи.
Желающие могут самостоятельно познакомиться с применением и опциями утилиты cryptsetup. Вот ресурсы для начального ознакомления: wiki.archlinux.org [2], gitlab.com [3].
Необходимо установить программное обеспечение для работы с ключом Yubikey 4. В системах на основе Ubuntu версий 16.04 и старше выполняются следующие команды:
1. sudo apt-get install yubikey-luks
2. sudo apt-get install yubikey-personalization
3. Вставить в USB слот ключ Yubikey 4 и выполнить команду:
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 для создания ответа (режим challenge-response) и который вы можете использовать для двухфакторной аутентификации при загрузке системы.
В случае утери (отсутствия) ключа Yubikey 4 всё ещё остаётся возможность использовать ранее введённую парольную фразу для дешифрования раздела. Если, конечно, парольная фраза была предварительно введена и сохранена в одном из слотов LUKS раздела.
Применение устройства Yubikey для использования в качестве ключа как второго фактора процесса аутентификации, существенно может повысить безопасность работы с зашифрованными разделами LUKS.
Автор: ElderMan
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/256395
Ссылки в тексте:
[1] сайта: http://www.thegeekstuff.com/2016/03/cryptsetup-lukskey/
[2] wiki.archlinux.org: https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption
[3] gitlab.com: https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
[4] Источник: https://habrahabr.ru/post/329648/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.