Шифрование реальных дисков и разделов «Кузнечиком»¶
НАЙС.ОС CLOUD позволяет использовать ГОСТ-шифрование не только в лабораторном файле, но и на отдельных физических и виртуальных дисках, в том числе на накопителях для файлов, резервных копий, контейнерных данных и прикладных служб. Шифрование осуществляется dm-crypt с режимом kuznyechik-xts-plain64, а управление доступом — средствами LUKS2.
Следующий сценарий предназначен только для нового пустого диска
Команда luksFormat уничтожает имеющуюся структуру тома. Все операции выполняют после подтверждённой резервной копии, проверки нужного диска и остановки приложений. Никогда не применяйте их к /dev/vda3, /, /boot, существующему разделу базы данных или любому неизвестному устройству. Если диск содержит информацию — используйте миграцию на отдельный новый диск, а не прямое форматирование.
1. Планируем схему диска¶
Возможны два варианта:
А. Шифрование целого дополнительного диска без таблицы разделов: LUKS2 располагается непосредственно на выбранном /dev/disk/by-id/.... Это простой вариант для выделенного диска с одним защищённым томом; он удобен для первого стенда.
Б. Шифрование раздела: на отдельном диске создаётся GPT и нужный раздел; LUKS2 располагается на /dev/disk/by-id/...-part1. Это полезно, когда требуется системная разметка, несколько разделов или специальные метаданные.
Для больших серверов следует отдельно решить, что располагается под LUKS, а что над ним: RAID/LVM, файловая система, снапшоты и резервирование. Не стоит смешивать несколько схем без понимания порядка восстановления.
2. Безопасно находим устройство¶
Перед любыми изменениями:
lsblk -e7 -o NAME,PATH,MAJ:MIN,SIZE,MODEL,SERIAL,FSTYPE,TYPE,MOUNTPOINTS
findmnt -no SOURCE,TARGET /
findmnt -no SOURCE,TARGET /boot 2>/dev/null || true
blkid
ls -l /dev/disk/by-id/ 2>/dev/null | head -n 60
Выберите физический или виртуальный диск, выделенный исключительно под новый зашифрованный том. Вы должны однозначно отличать его от системного по размеру, модели, постоянному идентификатору и подключению в гипервизоре.
В примерах ниже имя /dev/disk/by-id/ID_ПУСТОГО_ДИСКА является условным. Заменять его нужно вручную на реально выбранный путь, а не копировать как есть.
# Замените значение на постоянный путь только к проверенному ПУСТОМУ диску.
DEV='/dev/disk/by-id/ID_ПУСТОГО_ДИСКА'
test -b "$DEV" || { echo 'Устройство не найдено'; false; }
readlink -f "$DEV"
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTS "$(readlink -f "$DEV")"
wipefs -n "$DEV"
wipefs -n выполняет просмотр сигнатур без изменения данных. Если обнаружены LUKS, ext4, LVM2, RAID или другие сигнатуры, не пытайтесь «исправить» ситуацию удалением подписи — выясните происхождение устройства.
Если устройство уже смонтировано или содержит используемые системой разделы, процедура на этом диске прекращается. Не полагайтесь на один findmnt в качестве защиты: вложенные файловые системы, swap, RAID и LVM требуют отдельной проверки состава.
3. Подготавливаем ГОСТ для тома¶
Проверка версии запущенного ядра и доступности встроенных ГОСТ-алгоритмов приведена в основном руководстве. На новом диске убедитесь, что CONFIG_CRYPTO_NICEOS_GOST_KUZNYECHIK=y, и проверьте доступность xts(kuznyechik) через AF_ALG.
Установите cryptsetup штатным менеджером пакетов:
Для дополнительных дисков, открываемых после старта системы, не требуется включать в initramfs средства открытия именно этих томов. Но если том будет содержать корень /, компоненты ранней загрузки обязательны — см. отдельную главу.
4. Создаём защищённый том на пустом устройстве¶
Перед форматированием ещё раз сверьте DEV со списком дисков и сделайте документированное подтверждение. Само форматирование — отдельная интерактивная команда, запускаемая после проверки.
printf 'ФОРМАТИРОВАНИЕ ВСЕХ ДАННЫХ НА: %s\n' "$DEV"
readlink -f "$DEV"
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTS "$(readlink -f "$DEV")"
Только после независимой проверки оператором:
cryptsetup luksFormat \
--type luks2 \
--cipher kuznyechik-xts-plain64 \
--key-size 512 \
--verify-passphrase \
"$DEV"
Парольную фразу выбирают длинной, уникальной и пригодной для ввода через консоль восстановления. Не записывайте её в shell history. Сложность пароля контролируется настроенной в НАЙС.ОС системой проверки качества паролей.
Затем открываем том:
cryptsetup isLuks "$DEV"
cryptsetup luksUUID "$DEV"
cryptsetup open "$DEV" niceos_secure
cryptsetup status niceos_secure
Проверка cryptsetup status должна показывать type: LUKS2, cipher: kuznyechik-xts-plain64 и корректное реальное устройство.
5. Файловая система и монтирование¶
Следующая команда форматирует только вновь созданное отображение, поэтому она допустима лишь при отсутствии нужных данных и после проверки cryptsetup status.
mkfs.ext4 /dev/mapper/niceos_secure
mkdir -p /srv/niceos-secure
mount /dev/mapper/niceos_secure /srv/niceos-secure
findmnt /srv/niceos-secure
Проверяем запись:
printf '%s\n' 'НАЙС.ОС: защищённое хранилище ГОСТ' \
> /srv/niceos-secure/verification.txt
sync
cat /srv/niceos-secure/verification.txt
sha256sum /srv/niceos-secure/verification.txt
Можно использовать и XFS или Btrfs, если они соответствуют требованиям нагрузки; алгоритм шифрования блоков не зависит от конкретной файловой системы над /dev/mapper.
6. Резервирование до ввода в эксплуатацию¶
Для диска с реальными данными LUKS-заголовок обязательно резервируют до передачи в работу:
umask 077
cryptsetup luksHeaderBackup "$DEV" \
--header-backup-file '/root/niceos-secure-header.backup'
chmod 600 '/root/niceos-secure-header.backup'
Скопируйте файл резервной копии за пределы шифруемого диска и передайте его в защищённое хранилище резервных копий. Хранить единственный экземпляр заголовка внутри самого шифрованного тома бессмысленно: при повреждении контейнера он может оказаться недоступен.
Для рабочего тома также задайте способ восстановления при утрате пароля, периодическую проверку резервной копии и процедуру отзыва уволенных пользователей.
7. Ручное открытие в режиме без автозапуска¶
На удалённых серверах не всегда имеется возможность ввести пароль во время загрузки. Поэтому безопасный начальный профиль — не открывать дополнительный диск автоматически, а активировать его после штатного входа администратора:
Закрытие:
Если том используется базой данных, контейнерами или приложениями, сначала остановите их штатные службы и дождитесь завершения записи, иначе размонтирование может не пройти или данные приложения окажутся несогласованными.
8. Настраиваем /etc/crypttab и /etc/fstab¶
Для служебного тома рекомендуется использовать LUKS UUID, поскольку имя физического диска может измениться.
Получаем UUID:
Здесь первая команда выводит UUID LUKS, вторая — UUID файловой системы внутри. В /etc/crypttab используется первый идентификатор.
Структура записи /etc/crypttab:
А /etc/fstab для подключения вручную:
noauto предотвращает автоматическое открытие или монтирование при старте сервера. После изменения конфигурации выполните:
После этого том можно открывать и монтировать вручную, как в предыдущем разделе. Такая схема особенно удобна для SSH-сервера без консоли ввода пароля на загрузке.
Если принято решение автоматически запрашивать пароль при загрузке и физическая или гипервизорная консоль всегда доступна, в тестовой системе можно удалить noauto из обеих записей и проверить поведение отдельной перезагрузкой. На промышленном сервере сначала отработайте этот сценарий на стенде.
Запрос пароля во время загрузки
Если зашифрованный диск обязателен для старта службы, а ключ нельзя получить автоматически, система может ждать ввода пароля на консоли и не поднять зависимые приложения. Не делайте автоматическую разблокировку обязательной на удалённом сервере, пока не обеспечены консоль, ключ восстановления и порядок аварийного старта.
Для корневого раздела / настраиваются другие механизмы ранней активации (rd.luks.*, initramfs, параметры GRUB). /etc/crypttab внутри закрытого корня не сможет помочь сама по себе; читайте раздел о dracut.
9. Что делать с уже существующими данными¶
Для существующего физического раздела с ценной информацией используйте перенос:
- Создайте проверенную независимую резервную копию данных и конфигурации приложений.
- Создайте новый ГОСТ-зашифрованный том на отдельном носителе или на свободном диске.
- Остановите приложения, использующие исходное хранилище.
- Перенесите данные с сохранением владельцев, прав, ACL, xattr и жёстких ссылок, если они используются.
- Выполните контрольное сравнение и реальное чтение документов, контрольные тесты приложений.
- Переключите точку монтирования и конфигурацию приложения.
- Сохраните исходные данные до завершения предусмотренного срока отката.
Для файловых деревьев Linux могут использоваться rsync -aHAX --numeric-ids и последующая проверка rsync --dry-run --checksum. Набор параметров выбирайте с учётом типа файловой системы и служебных файлов приложений. Для работающей базы данных нужна согласованная копия средствами самой СУБД либо снимок по утверждённой процедуре.
Отдельно учтите, что cryptsetup reencrypt — специализированная потенциально опасная операция, которую не следует применять к рабочему системному диску без испытания и полной резервной копии. Здесь она намеренно не используется как сокращение процедуры миграции.
10. Контроль после внедрения¶
- [ ] Физический диск однозначно определён и не содержит системных разделов.
- [ ]
cryptsetup statusпоказываетkuznyechik-xts-plain64. - [ ] Файл прочитан после закрытия и повторного открытия тома.
- [ ] Копия заголовка создана и размещена отдельно.
- [ ] Ключевые слоты и второй способ восстановления проверены.
- [ ]
/etc/crypttabсодержит LUKS UUID правильного носителя. - [ ]
/etc/fstabиспользует/dev/mapper/niceos_secureлибо UUID файловой системы. - [ ] Настроен порядок работы зависимых служб.
- [ ] Проверено поведение при недоступном диске.
- [ ] После обновления ядра контролируется встроенный ГОСТ и готовность initramfs, если корень зашифрован.
Связанные разделы: основной курс, восстановление, ошибки и диагностика, загрузка с ГОСТ-зашифрованного корня.