Вопрос или проблема
Я частично следовал этому
Что на самом деле делает /lib/cryptsetup/scripts/passdev?
/etc/crypttab
2tb UUID=... /dev/disk/by-label/STICK:/logfile luks,nofail,keyscript=/lib/cryptsetup/scripts/passdev,tries=2
У меня подключена флешка, отформатированная в ext2, с меткой STICK и с logfile, содержащим фразу-пароль. Ранее я использовал “обычный” метод, читая фразу-пароль с первого диска, описываемого с помощью ввода с клавиатуры.
2tb UUID=.. /etc/luks-keys/2tb luks,nofail,tries=1
И да, я неоднократно выполнял sudo update-initramfs -u -k all && systemctl reboot
, но это просто не работает.
Я пытаюсь заставить это работать, чтобы в конечном итоге разблокировать всю систему только с помощью подключенной флешки, но это не срабатывает.
Я нахожусь в системе UEFI с отключенной безопасной загрузкой, если это имеет значение. Я читал что-то о модуле на похожую тему. Нужно ли мне что-то особенное загружать?
Также где находится лог для этого?
Для меня было бы идеальным, если бы я мог просто иметь небольшую флешку с фразой-паролем, которая разблокировала бы диск. Это было бы удобно не только для серверов (где вы могли бы оставить флешку в сервере – цель состоит в том, чтобы вернуть сломанные жесткие диски, не беспокоясь о конфиденциальных данных), но также и для моего ноутбука: вставьте флешку при загрузке и уберите ее после разблокировки криптодиска.
Теперь я написал патч, который будет искать в корневом каталоге всех устройств файл ‘cryptkey.txt’ и пытаться расшифровать его с каждой строки в качестве ключа. Если это не удается: вернуться к вводу фразы-пароля.
Это означает, что ключ не может содержать \n, но это применимо и к любому введенному ключу. Хорошая новость в том, что вы можете использовать один и тот же USB-диск для хранения ключа для нескольких машин: вам не нужен отдельный USB-диск для каждой. Так что, если у вас есть USB-накопитель в вашем физическом брелке, вы можете использовать тот же накопитель для всех машин, которые вы загружаете, находясь в непосредственной близости.
Вы добавляете ключ, используя:
cryptsetup luksAddKey /dev/sda5
А затем поместите тот же ключ в виде строки в файл на USB/MMC-диске с именем ‘cryptkey.txt’. Патч находится здесь:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=746806
Если драйверы USB, драйверы MMC или файловые системы отсутствуют в вашем initramfs, вам нужно добавить их, добавив в /etc/initramfs-tools/modules:
uhci_hcd
ehci_hcd
usb_storage
nls_utf8
nls_cp437
vfat
fat
sd_mod
mmc_block
tifm_sd
tifm_core
mmc_core
tifm_7xx1
sdhci
sdhci_pci
Когда все будет сделано, обновите initramfs:
update-initramfs -u
После использования установщика для создания зашифрованных устройств с помощью пароля в 16.04 и 18.04 вам нужно добавить следующее (это, похоже, связано с ошибкой):
Скрипт, который читает ключ при загрузке /etc/decryptkeydevice/decryptkeydevice.sh
Измените конфигурацию /etc/initramfs-tools/conf.d/cryptroot
Убедите initramfs использовать файл cryptroot /etc/initramfs-tools/hooks/decryptkeydevice.hook
и измените initramfs /etc/initramfs-tools/modules
https://github.com/Codeuctivity/UnlockLuksOnBootByToken объединяет шаги в initAutoUnlockOnBootConfig.sh – выполните как root:
sudo dd if=/dev/urandom of=/dev/sdb bs=512 seek=1 count=60
sudo dd if=/dev/sdb bs=512 skip=1 count=4 > tempKeyFile.bin
sudo cryptsetup luksAddKey /dev/sda5 tempKeyFile.bin
# копировать конфигурацию
mkdir /etc/decryptkeydevice
# обновить идентификаторы устройств в этом файле
cp decryptkeydevice.sh /etc/decryptkeydevice/decryptkeydevice.sh
chmod +x /etc/decryptkeydevice/decryptkeydevice.sh
cp cryptroot /etc/initramfs-tools/conf.d/cryptroot
chmod +x /etc/initramfs-tools/conf.d/cryptroot
cp decryptkeydevice.hook /etc/initramfs-tools/hooks/decryptkeydevice.hook
chmod +x /etc/initramfs-tools/hooks/decryptkeydevice.hook
cat modules >> /etc/initramfs-tools/modules
update-initramfs -u
Ответ или решение
Проблема разблокировки LUKS-раздела с помощью ключевого файла на USB-накопителе
Если вы столкнулись с проблемой разблокировки LUKS-раздела с помощью ключевого файла, хранящегося на USB-накопителе, это может быть вызвано несколькими факторами. Давайте подробно разберем ключевые моменты, чтобы помочь вам найти решение.
Понимание сценария
Ваш сценарий предполагает использование файла с паролем на USB, который считывается при загрузке для разблокировки LUKS-раздела. Вы указали, что ваш USB-накопитель отформатирован в ext2 и имеет метку STICK. Важно, что вы также используете /lib/cryptsetup/scripts/passdev, чтобы указать скрипту, как управлять ключами.
Конфигурация вашего файла /etc/crypttab выглядит следующим образом:
2tb UUID=... /dev/disk/by-label/STICK:/logfile luks,nofail,keyscript=/lib/cryptsetup/scripts/passdev,tries=2
Роль скрипта passdev
Скрипт /lib/cryptsetup/scripts/passdev предназначен для предоставления пароля или ключа для LUKS-разделов во время загрузки. Важно, что скрипт должен уметь успешно находить и извлекать файл с паролем, иначе разблокировка будет невозможна.
Возможные причины проблемы
-
Проблемы с доступностью файловой системы: Если драйвера USB не загружены в initramfs, это может стать причиной, по которой скрипт не может получить доступ к вашему USB. Убедитесь, что в файле /etc/initramfs-tools/modules добавлены нужные модули для поддержки USB-накопителей:
uhci_hcd ehci_hcd usb_storage vfat sd_mod
После добавления модулей не забудьте обновить initramfs командой:
sudo update-initramfs -u
-
Неправильный путь к файлу: Убедитесь, что указанный путь к файлу с паролем (например, /logfile) корректен и доступен в момент загрузки.
-
Ошибки в формате ключа: Убедитесь, что ваш ключ в файле "logfile" не содержит дополнительных символов или неправильно отформатированных строк. Обычно рекомендуется, чтобы каждая строка содержала один пароль, без символов перевода строки.
-
Логи и отладка: Для понимания того, в чем именно дело, необходимо посмотреть логи. В стандартной конфигурации логирование происходящих ошибок можно найти в журнале загрузки, который можно проверить с помощью команды:
journalctl -b
Путь к решению
Если вы все еще не можете решить проблему, попробуйте следующее:
-
Проверьте настройки cryptsetup, следуя рекомендациям по документации.
-
Рассмотрите возможность испытания другой файловой системы на USB-накопителе, чтобы исключить возможные проблемы с совместимостью, например FAT32.
-
Проверьте, правильно ли настроены права доступа на файл с паролем.
-
Попробуйте использовать другой скрипт для автоматической разблокировки, если ваш текущий метод не работает должным образом. Например, использование упомянутого скрипта decryptkeydevice.sh может оказаться полезным.
-
Вам также необходимо убедиться, что secure boot отключен, как вы упоминали, поскольку это может препятствовать загрузке некоторых модулей.
Заключение
Использование USB-накопителя для разблокировки LUKS-разделов может быть удобным и безопасным решением. Важно следить за конфигурацией системы, проверять наличие всех необходимых драйверов и модулей, а также правильность пути к файлу с паролем. Надеюсь, эти рекомендации помогут вам успешно наладить автоматическую разблокировку вашего LUKS-раздела.