Шифруем домашний раздел установленной системы

Совсем недавно мы рассматривали шифрование сменных накопителей посредством LUKS. После публикации нас спрашивали можно ли зашифровать уже существующий раздел /home с данными. В этой статье мы расскажем как.

Введение

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

Теперь нам необходимо записать загруженный ISO образ на DVD-диск (если он конечно ещё у кого-то присутствует в системе) или USB-флешку. Все образы Fedora гибридные с поддержкой как legacy загрузки (BIOS метод), так и UEFI boot. Запишем его на флешку:

sudo dd if=~/Fedora-Workstation-Live-x86_64-25-1.3.iso of=/dev/sdb status=progress

Здесь ~/Fedora-Workstation-Live-x86_64-25-1.3.iso — путь к загруженному файлу образа, а /dev/sdb — устройство USB-флешки. Указывать номер раздела не следует!

Через несколько минут (в зависимости от скорости USB-накопителя) dd сообщит нам об успешном завершении записи.

Перенос данных

Так как форматирование LUKS уничтожит все данные на шифруемом разделе, сначала мы должны переместить все данные на другой носитель с файловой системой с поддержкой прав доступа (подойдут ext3, ext4 и т.д., но ни в коем случае не FAT/NTFS). Если такого нет, то поможет упаковка содержимого в tar архив с сохранением прав доступа и затем перемещение этого файла.

Самое главное — не забывайте делать резервные копии перед любыми операциями с диском. Никто кроме вас не несёт никакой ответственности за возможные потери данных.

Прямой перенос

Загружаемся с созданного LiveCD или LiveUSB, открываем терминал, монтируем раздел /home установленной системы:

sudo mkdir /media/home
sudo mount -t ext4 /dev/sda2 /media/home

Здесь /dev/sda2 — раздел диска с /home установленной системы, а /media/home — временная точка монтирования внутри Live.

Монтируем раздел внешнего HDD с подходящей файловой системой (см. выше), на который мы будем копировать файлы:

sudo mkdir /media/external
sudo mount -t ext4 /dev/sdb1 /media/external

Здесь /dev/sdb1 — раздел диска внешнего накопителя, а /media/external — временная точка монтирования.

Создаём каталог на внешнем накопителе для файлов с источника:

sudo mkdir /media/external/home

Копируем файлы рекурсивно с сохранением прав доступа:

sudo cp -ap /media/home/* /media/external/home/

Размонтируем раздел /home установленной системы:

sudo umount /media/home

Если всё сделано верно, то получаем точную копию внутри /media/external/home.

Шифруем LUKS раздел /home

Итак, данные были успешно скопированы, поэтому можем приступать к форматированию /home установленной системы. Для начала добавим в LiveCD/USB утилиту cryptsetup если вдруг её не окажется:

sudo dnf install cryptsetup

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

Форматируем раздел с шифрованием:

sudo cryptsetup --verify-passphrase luksFormat /dev/sda2 -c aes-xts-plain64 -s 256 -h sha512

Подключаем зашифрованный раздел:

sudo cryptsetup luksOpen /dev/sda2 home

Создаём файловую систему внутри контейнера:

sudo mkfs -t ext4 -m 1 -L home /dev/mapper/home

Ждём окончания процесса и монтируем раздел:

sudo mount -t ext4 /dev/mapper/home /media/home

Копируем назад файлы с внешнего накопителя также с сохранением прав доступа:

sudo cp -ap /media/external/home/* /media/home/

Ждём завершения всех процессов по созданию файловых систем и всех inode и размонтируем разделы:

sudo umount /media/home
sudo umount /media/external

Размонтируем криптоконтейнер с новым /home:

sudo cryptsetup luksClose /dev/mapper/home

Настраиваем автоматическое монтирование

Теперь настроим систему так, чтобы systemd при старте операционной системы видел, что /home у нас расположен внутри зашифрованного LUKS контейнера и предлагал ввести пароль.

Смонтируем корневой раздел установленной системы:

sudo mkdir /media/rp
sudo mount -t ext4 /dev/sda1 /media/rp

Здесь /dev/sda1 — раздел с корневой ФС установленной ОС.

Исправим файл /etc/fstab так, чтобы идентификатор раздела указывал через /dev/mapper:

sudo vim /media/rp/etc/fstab

Пример верной строки для нового /home внутри /etc/fstab:

/dev/mapper/home /home ext4 defaults 1 2

Сохраняем изменения в файле и выходим из редактора (для vim — это :wq).

Теперь откроем файл /etc/crypttab в текстовом редакторе:

sudo vim /media/rp/etc/crypttab

Пропишем в нём строку вида:

home /dev/disk/by-uuid/PARTITION_ID

Здесь PARTITION_ID — UUID раздела с контейнером. Узнать его можно посредством blkid:

blkid -U /dev/sda2

Сохраняем изменения в файле и размонтируем корневой раздел:

sudo umount /media/rp

Перезагружаемся в установленную ОС. Если всё сделано верно, то systemd при запуске запросит у нас пароль для монтирования домашнего раздела.

2 commentary to post

  1. Правильно ли я понимаю, что /home придётся снести (сделать без форматирования) и создать по-новой?

    1. Да. Данные временно переносятся на другой носитель с подходящей файловой системой.

      После создания LUKS раздела и его форматирования, они будут возвращены.

Обсуждение закрыто.