Сменить пароль на LUKS2-разделе и добавить keyfile для автоматической разблокировки можно штатным cryptsetup, без перешифровки диска. Порядок строгий: сначала бэкап заголовков, потом добавление нового ключа, проверка, и только затем удаление старого. Все команды ниже проверены на реальной машине с Arch Linux.
Keyfile это обычный файл со случайными байтами. cryptsetup принимает его вместо пароля. Он занимает отдельный слот в заголовке LUKS2, рядом с паролем. Пароль и keyfile живут независимо: смена пароля не трогает keyfile-слот, и наоборот.
Зачем он нужен? Чтобы диск открывался без ввода пароля. На моей машине так устроен второй диск: sda целиком зашифрован, маппер hdd, ext4 на /mnt/hdd. При загрузке systemd сам подставляет ключ из /etc/cryptsetup-keys.d/root.key, и диск монтируется без вопросов. А системный раздел nvme0n1p2 (маппер root, btrfs на /) я открываю паролем вручную, там keyfile не нужен.
Если ставишь Arch с нуля и хочешь заложить шифрование сразу, пригодится чек-лист установки.
Порядок обязателен. Удалишь старый пароль до проверки нового, и при ошибке останешься без доступа к диску. Поэтому сначала добавляем, потом проверяем, потом удаляем.
Заголовок LUKS2 хранит все слоты ключей и метаданные. Потерял заголовок, потерял данные, даже с правильным паролем. Поэтому первым делом:
sudo mkdir -p /root/luks-backup
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file /root/luks-backup/nvme-root.img
Каждый бэкап весит 16 МБ. То же самое для второго диска:
sudo cryptsetup luksHeaderBackup /dev/sda --header-backup-file /root/luks-backup/sda.img
Хранить бэкапы только на самой машине нельзя, машина зашифрована. Скопируй оба файла на флешку и убери подальше. Удобно упаковывать их в GPG-архивы.
sudo cryptsetup luksAddKey /dev/nvme0n1p2
Команда спросит существующий пароль, потом новый дважды. Старый ключ при этом остаётся на месте: слоты LUKS2 позволяют держать несколько ключей одновременно.
sudo cryptsetup open --test-passphrase -v /dev/nvme0n1p2
Введи новый пароль. Увидишь «Key slot N unlocked», значит, ключ рабочий. Этот шаг пропускать нельзя.
sudo cryptsetup luksRemoveKey /dev/nvme0n1p2
Команда попросит ввести ключ, который нужно удалить, вводи старый пароль. Если слотов с ключами несколько, повторяй, пока не увидишь «Ключ недоступен». Это значит, старых ключей больше нет.
Проверь оба сценария. Старый пароль должен давать ошибку:
sudo cryptsetup open --test-passphrase -v /dev/nvme0n1p2
Новый должен открывать диск. Если старый вдруг ещё работает, вернись к шагу 3.
Проверка живости keyfile умещается в одну команду:
sudo cryptsetup open --test-passphrase -v --key-file /etc/cryptsetup-keys.d/root.key /dev/sda
Слот открылся, значит, ключ на месте и работает. Такую проверку полезно гонять после смены пароля: смена пароля не задевает keyfile-слот, но лишний раз убедиться не помешает.
Как устроена автоматическая разблокировка? На моей машине файла /etc/crypttab нет вообще. Юнит systemd-cryptsetup@hdd.service генерирует systemd-генератор при загрузке, ключ берётся из /etc/cryptsetup-keys.d/root.key. То есть для авторазблокировки достаточно положить keyfile в эту папку, и systemd сам подхватит его при старте.
Ловушка с sudo и glob. Команда вида sudo chmod 600 /root/luks-backup/*.img не сработает: звёздочку раскрывает оболочка пользователя, а не root. Пользователь не имеет прав на чтение /root, поэтому glob уходит в chmod как литерал. Пиши через sh:
sudo sh -c 'chmod 600 /root/luks-backup/*.img'
Бэкапы на зашифрованной машине. Если машина зашифрована, бэкап заголовка в /root сгорит вместе с ней. Копируй на флешку, в другое место, в облако. 16 МБ на файл, копейки.
Пропущенный шаг проверки. Самая частая ошибка при ротации: удалить старый пароль до проверки нового. Один неверный ввод, и диск остаётся без рабочих ключей. Порядок «добавить, проверить, удалить, проконтролировать» не для красоты.
Автоматизацию на уровне устройств можно докрутить правилами udev.
Смена пароля заденет keyfile-слот? Нет. Пароль и keyfile живут в разных слотах LUKS2. Ротация пароля не трогает keyfile, авторазблокировка продолжит работать.
Можно ли открывать диск и паролем, и keyfile одновременно? Да, это штатный режим. На моей машине так и есть: системный раздел открывается паролем, второй диск keyfile. Слоты независимы.
Что делать, если старый пароль не удаляется? Проверь, что вводишь именно старый ключ, а не новый. luksRemoveKey удаляет тот ключ, который вводишь. Если слотов несколько, повторяй до «Ключ недоступен».
Зачем бэкапить заголовок, если есть пароль? Заголовок LUKS2 хранит все слоты ключей и метаданные. Без него пароль бесполезен. Вернуть доступ можно только восстановлением из бэкапа.
Где хранить бэкап заголовка? Вне машины: флешка, второй компьютер, облако. На зашифрованной машине бэкап в /root не спасает, если диск умрёт целиком.
LUKS2 позволяет менять пароли и добавлять keyfile без перешифровки, это штатные операции cryptsetup. Главное, порядок: бэкап заголовков, добавление нового ключа, проверка, удаление старого. Пропустишь проверку, рискуешь остаться без доступа к диску. Keyfile для авторазблокировки кладётся в /etc/cryptsetup-keys.d/, и systemd сам подхватит его при загрузке.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии