иллюстрация к ШИФРОВАНИЮ ДИСКОВ
  1. ПРОБЛЕМАТИКА
  2. ВВЕДЕНИЕ
  3. ИНСТРУКЦИЯ ПО ШИФРОВАНИЮ ДИСКА НА UBUNTU 22.04
  4. ВЫВОДЫ
  5. СПРАВОЧНАЯ ИНФОРМАЦИЯ
  6. ПОЛЕЗНЫЕ ССЫЛКИ

ПРОБЛЕМАТИКА

Безопасность и конфиденциальность очень важны, особенно для тех, кто хранит важные данные на компьютере.

Очень важно предотвратить утечку данных, например, в случае кражи ноутбука, так как операция по устранению такого “инцидента” может быть в десятки раз дороже, чем стоимость даже самого навороченного ноутбука. (Особенно это касается DevOps инженеров.)

И в целом для it специалиста наличие шифрованного диска является просто признаком профессионализма - например, как аккуратный внешний вид для банковского работника.

ВВЕДЕНИЕ

Эта статья для тех, кто хочет настроить шифрование дисков при помощи технологии LUKS на своем компьютере (под управлением Ubuntu 22.04). Тут приведена инструкция по настройке (в разделе “Инструкция”), выдержки из статей для тех, кто хочет разобраться в проблеме поглубже (в разделе “Справочная информация”), а также некоторые полезные статьи (в разделе “Источники”).

Если вы любите понимать, что описано в инструкции до того, как начать делать поэтапно задачи, то мы для вас составили краткое описание инструкции:

  1. Разделяем физический диск на логические части (разделы, тома).
  2. Создаем шифрованные разделы с использование виртуальных томов.
  3. Устанавливаем операционную систему.
  4. Настраиваем операционную систему.

Краткое описание технологии (можно пропустить)

Физический диск можно разделить на логические части (разделы, тома) для удобства использования. Например, на одном разделе диска у нас хранится вся информация о системе, файлы для загрузки операционной системы, на другом - информация пользователя (фотографии, контакты, важная информация), на третьем - игры и фильмы. Для того чтобы воспользоваться этими технологиями, нам необходимо произвести “разбивку” нашего диска на данные разделы на этапе установки операционной системы (это можно сделать и на уже установленной системе, мы рассмотрим вариант только с установкой операционной системы).

Как было сказано ранее, на одном из наших разделов будет храниться информация о загрузке операционной системы. Наше устройство, через которое мы используем диск, должно распознавать раздел, на котором хранится операционная система, чтобы после включения запустить ее, а также распознавать остальные разделы, чтобы ОС могла записывать в них данные.

Для внесения данных о разделах используют таблицы разделов. Существует две структуры разделения дисков: MBR и GPT. MBR (Главная загрузочная запись) и GPT (Таблица разделов GUID) представляют собой два различных способа хранения информации о разделах диска. Кратко о данных структурах можно узнать в разделе “Справочная информация”. После разделения диска нам необходимо определить, какие разделы нужно зашифровать, т.е. на каких разделах в дальнейшем будет хранится важная для нас информация.

В операционной системе Linux поддерживается несколько криптографических методов для защиты разделов, отдельных каталогов или полностью всего жесткого диска. Все данные в любом из этих способов автоматически зашифровываются и расшифровываются на лету. В данной статье будет рассмотрено шифрование диска при помощи технологии LUKS, кратко ознакомиться с которой можно в разделе “Справочная информация”, при установке ОС UBUNTU22.04.

Обращаем ваше внимание на то, что данные с диска при этом способе установки будут отформатированы, поэтому рекомендуем перенести их в более надежное место.

ИНСТРУКЦИЯ ПО ШИФРОВАНИЮ ДИСКА НА UBUNTU 22.04

Для того чтобы запустить установку ОС на устройстве, нам необходим образ этой ОС на переносном носителе информации (USB-накопитель, DVD-диск и др.). Как сделать загрузочный USB-накопитель с ОС Ubuntu смотрите по ссылке в разделе "Источники".

СОЗДАНИЕ РАЗДЕЛОВ

Как было сказано ранее, нам необходимо логически разделить диск (у нас он называется /dev/sda) на разделы (тома). В нашем случае будет два основных тома: том для загрузки операционной системы и раздел, который мы будем шифровать.

Чтобы начать, нам нужно загрузить установку UBUNTU22.04 с USB-накопителя. На различных устройствах установка отличается, поэтому смотрите дополнительно, как это сделать именно на вашем устройстве.

Итак, начнем. Загружаем с USB-накопителя наш образ UBUNTU22.04. Начнется распаковка файлов, после чего на экране появится окно, как на изображении ниже. Нам необходимо выбрать «Попробуйте Ubuntu» или «Try Ubuntu».

try ubuntu button

После этого нужно зайти в терминал (CTRL+ALT+T) и, чтобы открыть редактор разделов, вписать команду gparted, подтвердить нажатием ENTER. После этого должен открыться редактор разделов. Здесь нам необходимо создать новую таблицу и разделы в ней. Создаем таблицу следующим образом: Device->Create Partition Table.

сreate a new table

Далее нам необходимо выбрать тип структуры разделов. В данном примере выбираем GPT, т.к. здесь используется компьютер с прошивкой UEFI.

file with information about the encrypted volume:

Исходя из цели данной статьи, нам необходимо создать два раздела. Первый раздел должен быть размером в несколько сотен мегабайт (от 300 до 1000 Мб) и отформатирован в файловую систему ext4 (информация о файловых системах изложена в разделе “Справочная информация”), он будет незашифрован и смонтирован в /boot (на скриншоте /dev/sda1 в конце текущего пункта). Это будет раздел загрузки ОС, который содержит конфигурационные файлы загрузчика GRUB, образы ядра Linux, initrd файлы, которые необходимы для процесса загрузки.

В примере ниже показано создание первого основного раздела с размером в 1024 МБ и файловой системой ext4.

creating the first primary partition with a size of 1024 MB

В примере ниже показано создание второго основного раздела с размером в 1024 МБ и файловой системой fat32.

creating the second primary partition with a size of 1024 MB

Третий основной раздел (/dev/sda3 на скриншоте в конце текущего пункта инструкции) будет зашифрован и иметь достаточно большой размер.

В этом примере все свободное место присваивается второму основному разделу без указания файловой системы:

creating the third primary partition with a size of 1024 MB

Далее нам необходимо подтвердить создание основных разделов:

confirmation of creation of main partitions

Результат должен получится примерно такой (видим три основных раздела /dev/sda1 /dev/sda2 /dev/sda3):

partition creation result

!!!Ваши разделы могут называться иначе, здесь показан пример. А также размер дискового пространства будет отличаться от приведенного выше.

СОЗДАНИЕ РАЗДЕЛА LUKS

В этом пункте мы будем из второго основного раздела /dev/sda2 делать шифрованный раздел, который, в свою очередь, разделим на подразделы / - корневой директории и /home - домашней директории (информация об иерархии директорий файловой системы Linux находится в разделе “Справочная информация”, более детально данную тему можно изучить на ресурсе из раздела “Источники”).

Для этого снова переходим в терминал (рекомендую вести команду sudo su, чтобы сразу работать c root-правами - правами суперпользователя). Нам необходимо создать раздел LUKS, т.е. зашифрованный раздел /dev/sda2. Утилита cryptsetup, которой мы воспользуемся, позволит облегчить шифрование раздела Linux с помощью модуля dm-crypt. Используем операции этой утилиты luksFormat и luksOpen.

sudo cryptsetup luksFormat /dev/sda3 - создание зашифрованного раздела/dev/sda3. После вопроса Are you sure? Вписываем в верхнем регистре YES. Запросится ключевая фраза: вводим, подтверждаем, запоминаем.

sudo cryptsetup luksOpen /dev/sda3 box - подключить виртуальное устройство (понадобится ключ, созданный в предыдущем действии) box к /dev/sda3. Где box - имя по вашему выбору.

Внутри раздела LUKS создаем физический том, LVM группу томов и два логических тома. Первый логический том будет подключен как /, а второй - /home. Разбиваем таким образом том, чтобы при дальнейших переустановках ОС не было необходимости стирать всю информацию пользователя.

Раздел / - root является главным в нашей системе. Здесь будут находиться все системные файлы, и к нему будут подключаться другие разделы. Сюда же мы будем устанавливать все свои программы и обновления. Если возьмете 50 Гигабайт под данный раздел - не ошибетесь.

Раздел /home - для наших файлов. Здесь будут наши пользовательские файлы, документы. Тут мало места быть не должно, поэтому берем все оставшееся. В данном случае 70 Гигабайт выделено на /, все остальное - /home.

sudo pvcreate /dev/mapper/box - создаем физический том на виртуальном устройстве box, находящимся на третьем основном разделе /dev/sda3 для дальнейшего создания в нем vg - группы томов.

sudo vgcreate vgbox /dev/mapper/box - создаем группу томов с названием vgbox в /dev/mapper/box.

sudo lvcreate -n lvboxroot -L 70g vgbox - создаем в группе томов vgbox логический том lvboxroot, в котором будет находится наша корневая директория(/) с размером 70ГБ.

sudo lvcreate -n lvboxhome -l 100%FREE vgbox - создаем в группе томов vgbox логический том lvboxhome, в котором будут находится наши пользовательские файлы(/home).

УСТАНОВКА СИСТЕМЫ

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

Чтобы начать установку ОС, нам необходимо открыть графический установщик (ярлык находится на рабочем столе). Следующим шагом будет выбор языка и раскладки клавиатуры. Затем попадаем в выбор инсталляции и, в данном примере, выбираем “Normal installation”, с помощью которого установится не только ОС, но и веб-браузер, полезные утилиты, офисное ПО, игры и медиа проигрыватели.

select “Normal installation” in the window

Далее выбираем “Somesing else”, чтобы мы снова могли попасть в разметку дисков и выбрать нашим виртуальным томам соответствующие точки монтирования и файловые системы.

choose “Somesing else”

Попадаем в разметку дисков. Далее изменяем разделы двойным кликом по ним, выбираем файловую систему и точку монтирования. Нам необходимо назначить:

  • точку монтирования / к /dev/mapper/vgbox-lvboxroot (нашему виртуальному диску с корневой директорией) с форматом ext4; 
  • точку монтирования /home к /dev/mapper/vgbox-lvboxhome (виртуальному диску с пользовательскими данными) с форматом ext4;
  • точку монтирования /boot к /dev/sda1(раздел загрузки) c форматом ext4;
  • точку монтирования efi к /dev/sda2 с форматом fat32.

Ниже приведен пример, где в таблице разделов показаны наши логические тома и раздел загрузки.

example where partition table shows logical volumes and boot partition

Также пример установки точки монтирования и формата файловой системы для /dev/mapper/vgbox-lvboxroot (корневой директории) приведен ниже.

example of setting mount point and file system format

В данном примере итоговая таблица получается такая:

summary table example

В поле с именем диска /dev/sda (имя диска может быть другим) - выбираем весь наш жесткий диск. Чтобы начать установку нажимаем “Install now”. Далее необходимо выбрать местоположение, ввести личные данные и пароли и запустить установку.

ВНИМАНИЕ!!! После установки не перезагружаем оборудование (этого попросит система), а переходим снова в терминал для монтирования разделов в установленную ОС.

go to the terminal to mount partitions in the installed OS

 

МОНТИРОВАНИЕ РАЗДЕЛОВ

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

sudo mount /dev/mapper/vgbox-lvboxroot /mnt - монтирование корневой директории в /mnt.

sudo mount /dev/mapper/vgbox-lvboxhome /mnt/home - монтирование домашней директории в /mnt/home.

sudo mount /dev/sda1 /mnt/boot - монтирование загрузочного раздела /dev/sda1 в /mnt/boot.

sudo mount --bind /dev /mnt/dev - перемонтирование директории /dev в /mnt/dev.

После проделываем следующие шаги:

  • sudo chroot /mnt - данную программу запускаем для изменения корневого каталога, делаем это для доступа к таким файловым системам, как proc, sysfs, devpts (смотрите в разделе “Справочная информация”). Эти файловые системы должны быть доступны из среды chroot для правильного функционирования основных программ;
  • mount -t proc proc /proc - монтируем файл устройства proc с файловой системой proc в корневой раздел /proc, который содержит файлы с информацией о процессах, которая используется ядром для представления информации о статусе системы;
  • mount -t sysfs sys /sys - монтируем файл устройства sys с файловой системой sysfs в корневой раздел /sys, который содержит данные непосредственно о системе. Тут можно узнать информацию о ядре, драйверах и устройствах. С помощью файловой системы sysfs вы можете задавать различные настройки ядра во время выполнения;
  • mount -t devpts devpts /dev/pts - монтируем файл устройства devpts с файловой системой devpts в корневой раздел /dev/pts, который работает с псевдотерминалами PTY/tty (подробнее можно узнать по ссылке в разделе “Источники”).

ЗАВЕРШЕНИЕ УСТАНОВКИ

В этом пункте мы должны дать информацию загрузке системы о зашифрованном разделе. Для этого нужно найти UUID нашего зашифрованного раздела (/dev/sda2). UUID - это универсальный уникальный идентификатор раздела жесткого диска. Сам UUID необходимо скопировать.

sudo blkid /dev/sda3 - данной командой выведем UUID на экран и скопируем его.

Далее необходимо создать файл с именем /etc/crypttab, в котором разместим информацию о зашифрованном томе.

box (имя нашего контейнера LUKS) UUID=<идентификатор блочного устройства, которое содержит зашифрованные данные> none luks (возможность ввода пароля),retry=1,lvm=vgbox (имя нашей группы LVM)

Должно получится примерно так, как на примере ниже:

file with information about the encrypted volume:

Выполняем следующую команду:

update-initramfs -k all -c - данной командой мы прописываем новые правила запуска в файле initrd, который находится в /boot, чтобы система распознавала зашифрованный раздел и перед началом работы запрашивала парольную фразу.

Перезагружаем систему. После перезагрузки будет запрошена парольная фраза, которую указывали при создании раздела LUKS.

ВЫВОДЫ

В данной статье мы разобрали, как установить операционную систему Ubuntu22.04 на полностью зашифрованный том и разбить этот том на логические подразделы для корневой и домашней директорий.

СПРАВОЧНАЯ ИНФОРМАЦИЯ

MBR(MASTER BOOT RECORD)

Главная загрузочная запись - MBR находится в начале дискового пространства. Информация о размещении разделов на жёстком диске хранится в таблице разделов, которая является частью главной загрузочной записи (MBR). Раздел может быть либо первичным, либо расширенным. В первом секторе каждого первичного раздела находится загрузочный сектор, отвечающий за загрузку ОС с этого раздела. Информация о том, какой раздел будет использован для загрузки операционной системы, тоже записана в главной загрузочной записи. В MBR под таблицу разделов выделено 64 байта. Каждая запись занимает 16 байт. Таким образом, всего на жестком диске может быть создано не более 4 разделов. Чтобы обойти ограниченное максимальное количество разделов, был придуман расширенный раздел. Расширенный раздел сильно отличается от остальных типов разделов. Он описывает не раздел, а некое пространство, где находятся логические диски. MBR использует 32-битную адресацию, поэтому эта устаревшая структура умеет работать только с дисками, объем которых не превышает 2 ТБ. Информация о разделе хранится только в одном месте — в MBR. Если повредить главную загрузочную запись, то диск станет нечитаемым. Как загружается система при использовании структуры диска MBR: После включения питания выполняется самотестирование -> Затем BIOS обнаруживает видеокарту -> Отображается стартовый экран BIOS -> Начинается проверка памяти RAM -> Выполняется конфигурация подключенных устройств -> Определяется загрузочное устройство. Как только BIOS определяет загрузочное устройство, он считывает первый сектор, в котором располагается MBR. MBR проверяет таблицу разделов и загружает в оперативную память загрузочный сектор. В загрузочном секторе сначала запускается начальный загрузчик, который уже инициирует процесс загрузки ОС.

GPT(GUID PARTITION TABLE)

Согласно Википедии, GPT — это стандарт формата размещения таблиц разделов на физическом жестком диске. Он является частью расширяемого микропрограммного интерфейса (Unified Extensible Firmware Interface, UEFI) — стандарта, предложенного Intel на замену BIOS. Таким образом, GUID Partition Table — это новое поколение разметок дисков, пришедшее на смену устаревшей MBR. GUID расшифровывается как «глобальный уникальный идентификатор» (Globally Unique Identifier). Диск GPT состоит из трех частей:

  • первичная таблица разделов. Здесь содержится защитная разметка MBR, в которой по-прежнему хранится главная загрузочная запись для Legacy BIOS, заголовок GPT и таблица разделов, которая необходима системе для загрузки информации и доступа к логическим разделам;
  • обычные разделы данных. Это физическое место, где хранятся ваши данные и логические файлы;
  • резервная таблица разделов. Область для диска GPT, в которой хранится информация о резервном копировании для таблицы заголовков и разделов GPT. Используется в случае потери или повреждения первичной таблицы.

LUKS (ОТ LINUX UNIFIED KEY SETUP)

Согласно Википедии, спецификация формата шифрования дисков, изначально нацеленная на использование в ОС на основе ядра Linux. Первоочередной целью технологии было обеспечить удобный для пользователя стандартизированный способ управления ключами расшифровки. Чтобы выполнить шифрование диска linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с прозрачным для файловой системы и пользователя шифрованием. Фактически все данные лежат на зашифрованном физическом разделе. Если пользователь пытается записать данные на виртуальное устройство, они на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция - данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю.

Структура раздела LUKS:

  • заголовок LUKS;
  • хранилища содержимого ключей KM1 — KM8;
  • зашифрованные данные.

Заголовок LUKS вместе с содержимым секции ключа KM представляют собой всю необходимую информацию для доступа к зашифрованному разделу. При утрате заголовка или секций содержимого ключей получить доступ к зашифрованным данным становится невозможно. Более детально с данной темой можно ознакомится на ресурсах losst.ru, wikipedia.org.

КОМАНДЫ РАБОТЫ С БЛОЧНЫМИ УСТРОЙСТВАМИ

  • lsblk - Показать информацию о жестком диске;
  • df -h - Показывает свободное пространство на смонтированных разделах;
  • fdisk -l - Показывает информацию о диске, разделах и файловой системе;
  • du -sh - Отображает нераспределенное пространство на смонтированных разделах в MB, GB, TB;
  • findmnt - Отображает все точки монтирования;
  • mount /dev/sdb1 /mnt - Монтирует раздел 1 диска sdb в /mnt;
  • pvcreate /dev/sda1 - помечаем диск, который будем использовать для LVM;
  • vgcreate [опции] <имя группы>- создание группы дисков;
  • lvcreate [опции] <имя группы томов> - создание логического тома.

ТИПЫ ФАЙЛОВЫХ СИСТЕМ ДЛЯ LINUX

  • Ext2, Ext3, Ext4 или Extended Filesystem – стандартная файловая система. Содержит максимальное количество функций и является наиболее стабильной в связи с редкими изменениями кодовой базы. Начиная с ext3 в системе используется функция журналирования. Сегодня версия ext4 присутствует во всех дистрибутивах Linux;
  • JFS или Journaled File System разработана в IBM в качестве альтернативы для файловых систем ext. Сейчас она используется там, где необходима высокая стабильность и минимальное потребление ресурсов (в первую очередь в многопроцессорных компьютерах). В журнале хранятся только метаданные, что позволяет восстанавливать старые версии файлов после сбоев;
  • ReiserFS так же разработана в качестве альтернативы ext3, поддерживает только Linux. Динамический размер блока позволяет упаковывать несколько небольших файлов в один блок, что предотвращает фрагментацию и улучшает работу с небольшими файлами. Недостатком является риск потери данных при отключении энергии;
  • XFS рассчитана на файлы большого размера, поддерживает диски до 2 терабайт. Преимуществом системы является высокая скорость работы с большими файлами, отложенное выделение места, увеличение разделов на лету, незначительный размер служебной информации. К недостаткам относится невозможность уменьшения размера, сложность восстановления данных и риск потери файлов при аварийном отключении питания;
  • Btrfs или B-Tree File System легко администрируется, обладает высокой отказоустойчивостью и производительностью. Используется как файловая система по умолчанию в OpenSUSE и SUSE Linux.

ИЕРАРХИЯ ПАПОК ФАЙЛОВОЙ СИСТЕМЫ

file system folder hierarchy
Источник изображения: https://serverspace.by/

СПЕЦИАЛЬНЫЕ ФАЙЛОВЫЕ СИСТЕМЫ

Ядро Linux использует специальные файловые системы, чтобы предоставить доступ пользователю и программам к своим настройкам и информации. Наиболее часто вы будете сталкиваться с такими вариантами:

  • tmpfs позволяет размещать любые пользовательские файлы в оперативной памяти компьютера. Достаточно создать блочное устройство нужного размера, затем подключить его к папке, и вы можете писать файлы в оперативную память;
  • procfs(proc) - по умолчанию смонтирована в папку proc и содержит всю информацию о запущенных в системе процессах, а также самом ядре;
  • sysfs - с помощью этой файловой системы вы можете задавать различные настройки ядра во время выполнения;
  • devpts - обеспечивает доступ к терминалам pseudo (PTY).

ПОЛЕЗНЫЕ ССЫЛКИ