Вопрос или проблема
У меня есть система, в которой все разделы (/, /home и swap) зашифрованы, кроме /boot. /boot находится на внешнем устройстве, которое также содержит набор зашифрованных ключевых файлов, используемых для автоматического расшифрования всех разделов. Другими словами, я хотел бы получить двухфакторную аутентификацию с использованием внешнего устройства и пароля, который вводится один раз при загрузке, а загрузочные сценарии используют этот пароль для расшифровки всех разделов.
Я новичок в Ubuntu (и в Linux в общем), но я поэкспериментировал с модификацией различных сценариев, найденных в initrd.img, с помощью update-initramfs. Сценарий cryptroot на первый взгляд, казался тем, кто выполняет всю работу по монтированию разделов, но после некоторых экспериментов оказалось, что он отвечает только за расшифровку корневой файловой системы. Я изменил строку в сценарии, заменив Введите пароль на просто Пароль, что, казалось, работало, когда расшифровывалась корневая файловая система, но снова использовался старый запрос для расшифровки следующего раздела. Другими словами, это то, что я получаю:
- Сценарий cryptroot загружается.
- Сценарий запрашивает пароль для расшифровки ключевого раздела и монтирует его.
- Сценарий вызывает функцию setup_mapping для расшифровки корневой файловой системы.
- Сценарий пытается прочитать ключевой файл из ключевого раздела для расшифровки корневой файловой системы.
- Корневая файловая система расшифрована и смонтирована.
- Система предлагает ввести пароль для расшифровки следующего раздела…
Я думаю, что Ubuntu может запускать другую копию сценария cryptroot где-то, чтобы расшифровать все остальные разделы после корневого, но я не знаю, что еще можно изменить.
Сначала узнайте, где находится cryptroot
, какой пакет предоставляет cryptroot
и что еще (исходники, документация, примеры и т.п.) содержится в пакете. Для этого:
walt@squid:~(0)$ locate cryptroot
/usr/share/initramfs-tools/hooks/cryptroot
/usr/share/initramfs-tools/scripts/local-top/cryptroot
walt@squid:~(0)$ dpkg -S !$
dpkg -S cryptroot
cryptsetup: /usr/share/initramfs-tools/hooks/cryptroot
cryptsetup: /usr/share/initramfs-tools/scripts/local-top/cryptroot
walt@squid:~(0)$ dpkg -L cryptsetup
...
Ответ waltinator дает хорошее начало – выяснить, где сценарий находится в вашей файловой системе. Используйте любой инструмент поиска файлов, который у вас есть, и найдите нужный сценарий. Например, с помощью fd
вы можете искать в (обычных местах?) /etc
и /usr
:
fd cryptroot /etc
fd cryptroot /usr
Затем измените один или все эти сценарии – не уверен, как надежно определить, какой из них используется, я был заинтересован только в том, что находится под /usr/share/initramfs-tools/scripts/local-top
, так как мои логи сообщали мне о проблеме там.
Наконец, обновите / регенерируйте файловые системы initram, в ubuntu 22.04 с помощью:
sudo update-initramfs -c -k all
Я просто вставил несколько операторов echo для отладки; тем не менее, уже во время вызова update-initramfs
эти операторы echo выполнялись, и я мог видеть их вывод! Это может быть способом проверить, включен ли сценарий, который вы изменили, или нет.
Ответ или решение
Чтобы настроить скрипт cryptroot
для вашего случая с двойной аутентификацией (внешнее устройство и пароль), вам нужно выполнить несколько шагов. Прежде всего, вы правильно заметили, что скрипт отвечает за расшифровку корневой файловой системы и может не обрабатывать расшифровку других зашифрованных разделов должным образом.
Вот пошаговая инструкция:
-
Найдите местоположение скрипта
cryptroot
:Вы можете использовать команду
locate
для поиска местоположения скриптаcryptroot
, чтобы убедиться, где он находится и какие именно файлы вам нужно изменять:locate cryptroot
Это должно показать вам пути к файлам, например:
/usr/share/initramfs-tools/hooks/cryptroot /usr/share/initramfs-tools/scripts/local-top/cryptroot
-
Определите, какие пакеты содержат скрипт:
Далее используйте команду
dpkg
для получения информации о пакете, который предоставляет эти скрипты:dpkg -S /usr/share/initramfs-tools/scripts/local-top/cryptroot
Это покажет, что они являются частью пакета
cryptsetup
. -
Измените скрипт
cryptroot
:В вашем случае, вероятно, вам стоит изменить один из скриптов в каталоге
/usr/share/initramfs-tools/scripts/local-top/cryptroot
. Найдите строку, которая отвечает за запрос пароля, и замените текст на желаемый. Например, если хотите изменить "Enter the passphrase" на "Password", сделайте следующее:sudo nano /usr/share/initramfs-tools/scripts/local-top/cryptroot
После внесения изменений сохраните файл.
-
Добавьте обработку для дополнительных разделов:
Вы можете добавить дополнительные функции в этот скрипт для расшифровки дополнительных разделов (например,
/home
,swap
). Используйте существующую логику как пример для добавления дополнительных запросов необходимости ввода пароля для расшифровки остальных разделов. -
Обновите файловую систему initramfs:
После внесения изменений необходимо обновить образ initramfs, чтобы применить новые настройки:
sudo update-initramfs -c -k all
Это создаст новый образ initramfs с вашими изменениями. Чтобы убедиться, что ваш скрипт включен и работает, вы можете включить отладочные команды, такие как
echo
, чтобы выводить сообщения в процессе загрузки. Таким образом, вы будете видеть, запускается ли ваш измененный скрипт. -
Тестирование:
Перезагрузите систему и проверьте, работает ли ваш скрипт как задумано. Убедитесь, что он запрашивает пароль только один раз во время загрузки и расшифровывает все нужные разделы.
-
Дополнительные рекомендации:
Если вы все еще сталкиваетесь с проблемами, вам могут помочь журналы загрузки (например, с помощью
journalctl
) для поиска проблем с расшифровкой. Также рассмотрите возможность создания резервных копий важных данных перед внесением изменений в загрузочную конфигурацию.
Следуя этим шагам, вы сможете настроить скрипт cryptroot
так, чтобы он подходил под ваши требования.