Вопрос или проблема
Я зашифровал свой домашний раздел, используя dm-crypt и заголовок LUKS. У меня есть два слота в его заголовке: первый – это пароль, а второй – файл ключа. У меня есть файл ключа на внешнем диске, который я использую только как “устройство для шифрования”. Мой /etc/crypttab
выглядит так:
# <имя цели> <устройство источника> <файл ключа> <опции>
home UUID="..." /dev/sdb1:/home.key luks,keyscript=/lib/cryptsetup/scripts/passdev,discard
Сейчас все работает хорошо, но я хотел бы, чтобы мой компьютер запрашивал ввод пароля в случае, если он не может найти устройство с файлом ключа. Я пытался добавить home
в crypttab
дважды. Первая запись была настроена на использование пароля и имела опцию timeout
. Вторая была такой, как представлено выше. Это не работает.
Есть ли возможность настроить систему таким образом?
Что вам нужно, так это резервный пароль в слоте 1 – я размещу ссылку на учебник, который я использую с форумов Gentoo, но в общих чертах, направьте stdin (ваш kf) в fifo, что заставит запросить пароль, у вас получится kf + пароль и резервный пароль (в слоте 2)
СЛОТ 1: файл ключа + пароль
СЛОТ 2: резервный пароль (если слот 1 недоступен / поврежден или его пароль терпит ту же судьбу)
Ответ или решение
Для настройки вашего зашифрованного раздела домашней директории с использованием dm-crypt и LUKS, так что система запрашивает ввод пароля в случае ненахождения устройства с ключом, необходимо детально рассмотреть конфигурации и их возможности.
Общая конфигурация /etc/crypttab
Ваш текущий файл /etc/crypttab
выглядит следующим образом:
# <target name> <source device> <key file> <options>
home UUID="..." /dev/sdb1:/home.key luks,keyscript=/lib/cryptsetup/scripts/passdev,discard
В данной конфигурации используются два ключа: первый – это файл ключа на внешнем устройстве, а второй – это пароля для шифрования. Однако вы хотите, чтобы система запрашивала пароль, если устройство с ключом недоступно.
Как обеспечить резервный ввод пароля
К сожалению, не получится просто добавить строку в /etc/crypttab
дважды для одной и той же цели, так как это приведет к конфликтам. Вместо этого вы можете рассмотреть использование комбинации файла ключа и пароля таким образом, чтобы система требовала пароль в случае отсутствия ключа.
Шаги для реализации
-
Убедитесь, что вы используете два слота в заголовке LUKS. В первом слоте должен быть ключ (файл ключа + пароль), во втором – просто пароль. Это делается путем использования команды
cryptsetup luksAddKey
. -
Прочитайте ключ из файла и заранее подготовьте очередь для команд. Это можно сделать через FIFO (First In First Out) специальный файл, который будет использоваться в качестве интерфейса для передачи данных.
-
Настройка скрипта: вам понадобится подготовить небольшой скрипт, который будет проверять наличие ключа и при его отсутствии включать запрос пароля. Например, в классе скриптов
/lib/cryptsetup/scripts/
вы можете создать свой файлask_key.sh
со следующим содержимым:#!/bin/bash KEYFILE="/dev/sdb1:/home.key" if [ -e "$KEYFILE" ]; then cat "$KEYFILE" else echo "Введите пароль для шифрования:" read -s password echo "$password" fi
Не забудьте сделать скрипт исполняемым:
chmod +x /lib/cryptsetup/scripts/ask_key.sh
-
Обновление /etc/crypttab: обновите ваш
crypttab
, чтобы указать на новый скрипт:home UUID="..." /dev/sdb1:/home.key luks,keyscript=/lib/cryptsetup/scripts/ask_key.sh,discard
Заключение
Эта схема требует наличия общего для чтения ключ-файла и функции для его проверки, после чего или используется файл ключа, или запрашивается ввод пароля. Таким образом, вы получаете резервный механизм для доступа к вашей зашифрованной файловой системе. Этот подход повысит безопасность и удобство использования.
Для получения более подробных инструкций по конкретным командам и настройкам dm-crypt и LUKS, всегда стоит обращаться к официальной документации и руководству по administrированию.