Шифрование диска LUKS: как защитить данные и не потерять их
АйТи Фреш
Информационная безопасность

LUKS на сервере: кто откроет диск после перезагрузки

Автор: , директор ООО «АйТи-Фреш» · · ~15 мин чтения
Метафора LUKS: отключённый накопитель с мозаикой данных и отдельная карточка аварийного доступа
Защищённому диску нужен независимый аварийный доступ

Я применяю LUKS, чтобы защитить данные на выключенном носителе при краже или передаче оборудования. Для работающего сервера нужны ещё права доступа и резервные копии. Главный риск внедрения — потерять возможность разблокировки после перезапуска. Покажу, как выбрать схему ключей, подготовить восстановление и проверить загрузку до ввода в работу.

От чего LUKS защищает диск, а где бессилен

Я начинаю с конкретной угрозы: кто-то вынес выключенный сервер, забрал диск из офиса или получил списанный накопитель. LUKS помогает закрыть доступ к содержимому зашифрованного тома, если у постороннего нет подходящего секрета разблокировки. Это полезная часть защиты данных компании. Но включённое шифрование само по себе не доказывает, что конфиденциальные файлы действительно лежат внутри защищённого тома. Я отдельно проверяю расположение рабочих каталогов, копий и выгрузок.

LUKS расшифровывается как Linux Unified Key Setup. Это формат хранения метаданных и управления доступом к ключу тома. Шифрование блоков в обычной программной схеме Linux выполняет dm-crypt, а cryptsetup настраивает устройство. После открытия появляется блочное устройство, поверх которого работает файловая система. Поэтому я не привязываю существование LUKS к случайному номеру ядра: формат контейнера, механизм шифрования и средства загрузки — разные части системы. Для проекта проверяю их совместимость в выбранном дистрибутиве.

Когда том открыт и файловая система смонтирована, приложения получают данные в понятном им виде. Человек с достаточными правами, вредоносная программа или захваченная служба могут читать доступные им файлы. LUKS не исправляет лишние разрешения и не мешает программе испортить документы через обычную файловую систему. Я не записываю его в средство защиты от внутреннего злоупотребления доступом. Шифрование от кражи носителя и разграничение доступа решают разные задачи. Галочка в отчёте охранником не подрабатывает.

С виртуальной машиной вопрос тоже не сводится к отсутствию физического диска под столом. Нужно выяснить, кто читает образы, где хранятся снимки и какие секреты попадают в резервирование. Шифрование гостевого тома может защищать выключенный образ, если ключ хранится отдельно. При этом я не обещаю скрыть работающую машину от администратора платформы, контролирующего её память и выполнение. Для такого требования нужна отдельная модель доверия. Слово «облако» не отменяет необходимость разобраться, кому доступны данные.

Обычный заголовок LUKS остаётся на носителе. Его наличие не означает наличие открытого пароля или возможности сразу прочитать данные.
Сравнение доступа к закрытому и открытому тому LUKS
LUKS защищает закрытый том

Как устроены слоты, пароли и ключ тома

Я различаю ключ тома и секреты, которыми открываются ключевые слоты. В обычной схеме несколько паролей или файлов могут давать доступ к одному ключу тома. Добавление пароля не создаёт отдельную зашифрованную копию документов и обычно не требует их перезаписи. Отсюда практическое правило: назначать каждому ответственному свой секрет удобнее, чем раздавать общий пароль. Однако слот не превращается в журнал действий. Для учёта доступа всё равно нужны учётные записи, права и организационные правила.

У LUKS1 предусмотрено до 8 ключевых слотов, у LUKS2 — до 32; реальная вместимость LUKS2 зависит от выделенной области и размера ключей. Для получения ключа из пароля LUKS1 использует PBKDF2; LUKS2 поддерживает PBKDF2, Argon2i и Argon2id. Scrypt в этот список я не включаю. Параметры конкретного контейнера проверяю командой cryptsetup luksDump /dev/sdX. Здесь и далее /dev/sdX — обозначение примера, которое нужно заменить проверенным устройством LUKS, а не именем открытого тома.

С aes-xts-plain64 есть типичная путаница: XTS использует две части ключа. Общая длина 256 бит соответствует двум ключам AES по 128 бит, а 512 бит — двум по 256. Поэтому надпись «256» без режима и смысла параметра мало о чём говорит. Я выбираю параметры с учётом поддержки загрузчика и аварийной среды. Слепо копировать строку с самым внушительным числом — дорогой способ обнаружить несовместимость на перезагрузке. Для уже созданного тома сначала выясняю текущую конфигурацию.

Новый пароль добавляется командой cryptsetup luksAddKey /dev/sdX: потребуется действующий секрет и ввод нового. Если после устройства передать путь к файлу, содержимое этого файла станет новым секретом разблокировки. Это не экспорт и не создание мастер-ключа. Я сначала убеждаюсь, что новый способ открытия работает, затем вывожу старый из обращения. Смена пароля сама по себе не меняет ключ шифрования данных; поэтому последствия утечки ключа тома нельзя устранить простой заменой пароля.

Файл разблокировки — полноценный секрет. Права 0400 ограничивают обычный доступ в работающей системе, но не защищают открытый файл на украденном незашифрованном носителе.

Что резервировать, чтобы восстановить доступ

Я готовлю три вещи: резервную копию самих данных, копию заголовка LUKS и доступный аварийный секрет. Они не заменяют друг друга. Заголовок содержит метаданные и область ключевых слотов; обычного пароля недостаточно, если необходимый для него ключевой материал утрачен. Но диагноз «любое повреждение заголовка означает конец» тоже неверен: значение имеют масштаб повреждения, сохранившиеся слоты и доступные копии. Задача администратора — определить, что потеряно, прежде чем предпринимать запись на проблемный носитель.

Команда резервирования имеет вид cryptsetup luksHeaderBackup --header-backup-file /media/recovery/luks-header.img /dev/sdX. В этом примере /media/recovery — заранее подготовленное место на отдельном защищённом носителе, а имя файла выбрано для примера. Я проверяю, что копия действительно ушла на нужный носитель, отмечаю соответствующий том и дату. Копия заголовка не содержит файлов компании и не восстановит документы после отказа накопителя. Для отказа диска нужен бэкап данных, из которого мы уже умеем поднимать рабочую систему.

У копии заголовка есть неприятное свойство: вместе с паролем, действовавшим в момент её создания, она может открыть данные того же тома даже после удаления этого пароля из текущих слотов. Поэтому я учитываю старые копии, защищаю их от посторонних и пересматриваю доступ после увольнения ответственного. Незашифрованный заголовок сам по себе не раскрывает документы мгновенно, но даёт материал для перебора и сохраняет прежний способ открытия. Старая копия — это старый допуск, а не безобидный сувенир.

В схему резервирования я закладываю два конкретных требования из руководства CISA. Первое: хранить отдельную зашифрованную офлайн-копию важных данных. Под офлайн я понимаю копию, недоступную с рабочего сервера в обычном режиме: соседний подключённый каталог этого свойства не даёт. Второе: регулярно проверять доступность и целостность копии в сценарии восстановления. Поэтому я запускаю восстановленное приложение, открываю документы и измеряю затраченное время. Сообщение «архив создан» проверяет только оптимизм отчёта.

При ошибках чтения я сначала сохраняю доступные данные и привлекаю специалиста по восстановлению, если носитель нестабилен. Перезапись метаданных наугад может ухудшить ситуацию. Резервный заголовок проверяю на изолированном клоне соответствующего контейнера, заранее сохранив его состояние. Для регулярного контроля накопителей и заданий копирования полезен мониторинг дисков и бэкапов, но зелёный статус ещё не доказывает, что приложение из копии работает. Результат проверки я фиксирую отдельно от результата задания резервирования.

Секрет от бэкапа нельзя хранить только внутри этого бэкапа или на единственном зашифрованном сервере. Процедура должна работать при полной недоступности основной машины.
Мы в «АйТи-Фреш» проверим хранение секретов, подготовим копию заголовка и проведём восстановление на отдельной машине с понятной инструкцией для ответственного. Обсудить задачу
Схема восстановления LUKS с копиями данных, заголовка и аварийным секретом
Заголовок не заменяет копию данных

Как проверить загрузку и не оставить ключ рядом

Для новой установки я предпочитаю штатную схему шифрования установщика дистрибутива. Если зашифрован корневой том, среда ранней загрузки должна содержать средства его открытия. Она должна также получить секрет до монтирования корня. В этой последовательности и возникает большинство вопросов: где появится запрос, кто увидит консоль и как будет действовать дежурный после отключения питания. Само наличие initramfs не означает автоматическую разблокировку. Оно даёт место, где может выполняться нужная процедура.

В Debian с initramfs-tools я проверяю поддержку cryptsetup в ранней загрузке и соответствие /etc/crypttab реальной схеме томов. После изменения относящейся к загрузке конфигурации пересобираю образ через update-initramfs -u и проверяю его использование загрузчиком. Для дистрибутива с другим инструментом сборки нужна его документация. Я не объявляю переход между произвольными версиями ядра причиной обязательной поломки LUKS. Проверяю конкретную установленную систему, её образ загрузки и доступность аварийного входа.

Открытый /boot встречается в штатных схемах, но не служит универсальным требованием LUKS. Я проверяю, какие компоненты доступны без разблокировки и как защищена их целостность. Особое внимание — файлу-ключу, случайно включённому в initramfs на незашифрованном разделе. Такой файл может уехать к постороннему вместе с украденным сервером. А если единственный ключ корневого тома лежит только внутри него, ранняя загрузка до него не доберётся. Запасной вход внутри закрытой комнаты — сильная архитектурная мысль.

Я выбираю между ручным вводом и автоматизацией по требованиям к запуску и допустимым угрозам. Ручной ввод требует доступной консоли и ответственного. Автоматический способ требует понимания, откуда приходит секрет и при каких условиях он выдаётся. Для каждого варианта я сохраняю независимый аварийный доступ. Проверяю перезагрузку после изменения загрузочной конфигурации в согласованное окно, записываю порядок действий и оставляю возможность отката. Проверка включает старт нужного приложения и доступность его данных, а не только появление приглашения командной строки.

Перед первой проверкой перезапуска я готовлю резервную копию и аварийный доступ. Удалённое подключение к уже работающей системе не доказывает доступность консоли ранней загрузки.

Условный разбор: проверка для сети «Ладога-М»

Для учебного разбора возьму условную сеть «Ладога-М». Все числа в этом разделе — исходные условия и критерии примера, а не отчёт о клиентском происшествии. Допустим, в офисе 30 рабочих мест, на файловом сервере 120 ГБ рабочих документов, целевое окно проверки запуска — 60 минут. Я выбираю LUKS2 для тома с документами. Причина — риск доступа к накопителю после его утраты; объём данных сам по себе не определяет необходимость шифрования.

Сначала я составляю карту хранения: где документы, куда приложения пишут временные выгрузки и как получается резервная копия. Затем на отдельном стенде воспроизвожу выбранную схему. Условия допуска к работе задаю заранее: том открывается рабочим и аварийным секретом, тестовая машина запускается через доступную консоль, документы из копии читаются. Если хотя бы одно условие не выполнено, настройку возвращаю на доработку. Факт существования двух секретов не считается проверкой: каждый нужно действительно использовать по назначению.

Для иллюстрации записи дополнительного тома в Debian crypttab я использую строку docs UUID=REPLACE_WITH_LUKS_UUID none luks. Здесь docs — выбранное имя открытого устройства, UUID требуется заменить идентификатором исходного LUKS-контейнера, none задаёт интерактивный ввод в описанной реализации Debian, luks указывает формат. Это учебная строка для отдельного тома, а не готовая конфигурация корня. Я отдельно настраиваю монтирование файловой системы и проверяю, что файловая служба не стартует с пустым каталогом вместо рабочего хранилища.

На проверке я засекаю время от запуска машины до открытия контрольного документа. Затем восстанавливаю копию данных в отдельное хранилище и проверяю результат без обращения к исходному диску. В акт записываю измеренное время; 60 минут остаются целевым пределом примера, пока стенд его не подтвердил. Результатом считаю допуск только после успешной проверки и передачи инструкции ответственным. Так я оцениваю передачу инфраструктуры администратору: чужой секрет в чьей-то памяти не должен быть единственным способом запустить компанию.

В этом примере нет подтверждённой истории кражи, штрафа или спасённых миллионов. Проверяемый итог — выполнение заранее заданных условий на стенде.
Чеклист проверки LUKS для учебного примера с 30 рабочими местами
Допуск подтверждают проверкой на стенде

Когда внедрять LUKS, а когда сначала готовить эксплуатацию

Я не использую порог 50 ГБ для решения о шифровании и не обещаю, что отдельный LVM-том ускорит проверку пароля. На разблокировку влияют параметры обработки секрета и ресурсы машины; на работу с открытым томом — накопитель, процессор и характер нагрузки. Поэтому сначала определяю, какие данные требуется защищать и каков допустимый перерыв в работе. Уже затем выбираю расположение зашифрованного слоя. Дополнительные уровни хранения должны решать понятную задачу, иначе инструкция аварийного запуска просто становится длиннее.

Универсальные накладные расходы в процентах я не называю. Для предварительной оценки есть cryptsetup benchmark, однако он работает в памяти и не предсказывает скорость конкретного хранилища. Я сравниваю работу нужного приложения на сопоставимом стенде: чтение документов, запись, одновременный доступ и резервирование. Отдельно измеряю разблокировку и полный запуск сервиса. Быстрый тест алгоритма не доказывает, что бухгалтерия дождётся файла вовремя. Таблица мегабайт в секунду красивее жалобы, но проверять нужно обе стороны.

Режим круглосуточной работы не является причиной автоматически отказываться от LUKS. Он делает обязательной продуманную процедуру перезапуска и восстановления. Если консоли нет, аварийный секрет недоступен, а бэкап никто не поднимал, я сначала устраняю эти пробелы. При этом отсутствие копий не делает шифрование бессмысленным: риск утечки и риск потери данных существуют одновременно. Для защиты от удаления и вредоносного шифрования нужен отдельный план действий при атаке, а не надежда на закрытый диск.

При списании оборудования я не выдаю стирание заголовка за гарантию уничтожения информации. Нужно учитывать копии заголовков, прежние образы и особенности накопителя; на SSD запись по тому же адресу не доказывает удаления всех физических копий. Открытое устройство тоже может продолжать работу с уже загруженным ключом. Я сначала останавливаю использование, определяю процедуру очистки для конкретного носителя и учитываю все экземпляры секретов. Когда требования высокие, способ уничтожения согласуют отдельно. Продолжать работу и одновременно объявлять диск очищенным — плохой финал инструкции.

Я принимаю внедрение, когда ответственный может открыть том, запустить приложение и восстановить документы по инструкции. Установленный пакет сам по себе этого не подтверждает.

Частые вопросы

Сколько паролей можно добавить в LUKS?

У LUKS1 до 8 слотов, у LUKS2 до 32; вместимость LUKS2 зависит от области слотов и размера ключей. Новый пароль добавляют через cryptsetup luksAddKey, подтвердив действующий доступ.

Спасёт ли пароль при повреждении заголовка?

Только если сохранился нужный ключевой материал. При его утрате потребуется подходящая копия заголовка и действовавший для неё секрет либо восстановление самих файлов из отдельного бэкапа.

Можно ли хранить файл-ключ на том же сервере?

Можно только в осмысленной схеме защиты. Доступный постороннему файл на открытом разделе может позволить разблокировку. Единственный ключ корневого тома внутри самого тома недоступен на этапе его открытия.

Защитит ли LUKS от программы-вымогателя?

Я не рассчитываю на такую защиту. Программа с доступом к открытым файлам может изменить или удалить их. Нужны ограничения доступа и независимые копии с проверенным восстановлением.

Достаточно ли стереть заголовок перед продажей SSD?

Я не считаю это гарантией. Могут остаться копии заголовка и физические копии данных из-за устройства накопителя. Процедуру очистки выбирают для конкретного носителя и требований к уничтожению.

Сколько скорости потеряет сервер с LUKS?

Единого процента нет. Я измеряю задержки и скорость реального приложения. Cryptsetup benchmark проверяет алгоритмы в памяти и не заменяет испытание дисковой нагрузки.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи