Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

LUKS2: keyfile, смена паролей, авторазблокировка

Сменить пароль на LUKS2-разделе и добавить keyfile для автоматической разблокировки можно штатным cryptsetup, без перешифровки диска. Порядок строгий: сначала бэкап заголовков, потом добавление нового ключа, проверка, и только затем удаление старого. Все команды ниже проверены на реальной машине с Arch Linux.

Что такое keyfile в LUKS2 и зачем он нужен

Keyfile это обычный файл со случайными байтами. cryptsetup принимает его вместо пароля. Он занимает отдельный слот в заголовке LUKS2, рядом с паролем. Пароль и keyfile живут независимо: смена пароля не трогает keyfile-слот, и наоборот.

Зачем он нужен? Чтобы диск открывался без ввода пароля. На моей машине так устроен второй диск: sda целиком зашифрован, маппер hdd, ext4 на /mnt/hdd. При загрузке systemd сам подставляет ключ из /etc/cryptsetup-keys.d/root.key, и диск монтируется без вопросов. А системный раздел nvme0n1p2 (маппер root, btrfs на /) я открываю паролем вручную, там keyfile не нужен.

Если ставишь Arch с нуля и хочешь заложить шифрование сразу, пригодится чек-лист установки.

Как безопасно сменить пароль LUKS2

Порядок обязателен. Удалишь старый пароль до проверки нового, и при ошибке останешься без доступа к диску. Поэтому сначала добавляем, потом проверяем, потом удаляем.

Шаг 0. Бэкап заголовков

Заголовок 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-архивы.

Шаг 1. Добавить новый ключ

sudo cryptsetup luksAddKey /dev/nvme0n1p2

Команда спросит существующий пароль, потом новый дважды. Старый ключ при этом остаётся на месте: слоты LUKS2 позволяют держать несколько ключей одновременно.

Шаг 2. Проверить новый ключ

sudo cryptsetup open --test-passphrase -v /dev/nvme0n1p2

Введи новый пароль. Увидишь «Key slot N unlocked», значит, ключ рабочий. Этот шаг пропускать нельзя.

Шаг 3. Удалить старый ключ

sudo cryptsetup luksRemoveKey /dev/nvme0n1p2

Команда попросит ввести ключ, который нужно удалить, вводи старый пароль. Если слотов с ключами несколько, повторяй, пока не увидишь «Ключ недоступен». Это значит, старых ключей больше нет.

Шаг 4. Контроль

Проверь оба сценария. Старый пароль должен давать ошибку:

sudo cryptsetup open --test-passphrase -v /dev/nvme0n1p2

Новый должен открывать диск. Если старый вдруг ещё работает, вернись к шагу 3.

Как проверить keyfile и настроить авторазблокировку

Проверка живости 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 сам подхватит его при старте.

Какие ловушки подстерегают при работе с LUKS2

Ловушка с 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 сам подхватит его при загрузке.

Полезные ресурсы



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max