Совсем недавно мы рассматривали шифрование сменных накопителей посредством 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 при запуске запросит у нас пароль для монтирования домашнего раздела.
Правильно ли я понимаю, что /home придётся снести (сделать без форматирования) и создать по-новой?
Да. Данные временно переносятся на другой носитель с подходящей файловой системой.
После создания LUKS раздела и его форматирования, они будут возвращены.