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

  • Загружаемся через LiveCD
    Пакеты cryptsetup cryptsetup-bin должны быть установлены

  • Снимаем шифрование

Снятие LUKS-шифрования у версии 1 и версии 2 немного отличаются
Посмотрим какой из дисков у нас зашифрован, затем узнаем версию LUKS

user@debian:~$ lsblk -o NAME,FSTYPE
NAME   FSTYPE
sda
...
└─sda5 crypto_LUKS

Зашифрованным диском является /dev/sda5
Для проверки версии LUKS:

user@debian:~$ sudo cryptsetup luksDump /dev/sda5 | grep -i version
Version:         2

Чтобы снять шифрование для LUKS1:

user@debian:~$ sudo cryptsetup reencrypt --decrypt /dev/sda5

Чтобы снять шифрование для LUKS2, нам необходимо указать обязательный параметр --header, это файл куда будут записаны заголовки LUKS2 при расшифровке диска
В случае прерывания расшифровки - мы сможем продолжить процедуру используя этот файл (лучше писать файл на отдельный диск, который не относится к LiveCD и зашифрованному диску)

Выполняем команду для расшифровки LUKS2, капсом соглашаемся на экспорт заголовков в указанный файл, указываем пароль для зашифрованного диска:

user@debian:~$ sudo cryptsetup reencrypt --decrypt --header headers.out /dev/sda5

WARNING!
========
Header file headers.out does not exist. Do you want to initialize LUKS2 decryption of device /dev/sda5 and export LUKS2 header to file headers.out?

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda5:
Progress:   1.0%, ETA 10m38s, 1056 MiB written, speed 157.5 MiB/s

По окончанию в строке прогресса мы увидим Finished
Если расшифровка прервалась, ее можно продолжить, указав файл с LUKS2 заголовками:

user@debian:~$ sudo cryptsetup reencrypt --decrypt --resume-only --header headers.out /dev/sda5

Примонтируем расшифрованный диск в /mnt, заглянем в /etc/crypttab и удалим оттуда наш старый шифрованный диск sda5_crypt

user@debian:~$ sudo mount /dev/sda5 /mnt/
user@debian:~$ sudo sed -i '/sda5_crypt/d' /mnt/etc/crypttab

В /etc/fstab у нас осталась запись, которая указывает, что корень системы находится на диске /dev/mapper/sda5_crypt, нам нужно ее заменить на UUID расшифрованного диска /dev/sda5:

# Узнаем UUID нашего расшифрованного диска
user@debian:~$ ls -l /dev/disk/by-uuid/ | grep sda5
lrwxrwxrwx 1 root root 10 Jan 20 09:51 012a6bb3-b624-4b33-aecd-4043ab27a58f -> ../../sda5

# UUID - 012a6bb3-b624-4b33-aecd-4043ab27a58f
# Заменяем запись шифрованного диска на нешифрованный
user@debian:~$ sudo sed -i 's/\/dev\/mapper\/sda5_crypt/UUID=012a6bb3-b624-4b33-aecd-4043ab27a58f/g' /mnt/etc/fstab

Уже можно загружаться в систему на расшифрованный диск, но при загрузке cryptsetup будет у нас просить ввести пароль от sda5_crypt, через несколько секунд система загрузится успешно
Чтобы такой ошибки не было, нам осталось выполнить команду sudo update-initramfs -u, это можно сделать как в самой системе, так и через chroot

Как ребутаться я рассказывать, конечно, не буду
Но chroot мы рассмотрим. Для начала узнаем, какая у нас загрузочная партиция:

user@debian:~$ sudo fdisk /dev/sda -l -o Device,Boot
...
Device     Boot
/dev/sda1  *
/dev/sda2
/dev/sda5

В данном случае загрузочной партицией является /dev/sda1, примонтируем ее в /mnt/boot, а также смонтируем специальные каталоги для корректной работы chroot

user@debian:~$ sudo mount /dev/sda1 /mnt/boot/
user@debian:~$ sudo mount --bind /dev /mnt/dev
user@debian:~$ sudo mount --bind /dev/pts /mnt/dev/pts
user@debian:~$ sudo mount --bind /proc /mnt/proc
user@debian:~$ sudo mount --bind /sys /mnt/sys

Чрутимся, выполняем команду апдейта initramfs, выходим с чрута и ребутаемся без LiveCD:

user@debian:~$ sudo chroot /mnt
root@debian:/# update-initramfs -u
root@debian:/# exit
exit
user@debian:~$ sudo reboot

Фиксируем, что система успешно загружена с расшифрованного диска
Возможно, у вас подвиснет загрузка на минуту-две и ОС запустится. В таком случае рекомендую проверить /etc/crypttab на отсутствие лишних записей (По-умолчанию файл пустой или отсутствует)

Еще больше заметок про Linux администрирование, DevOps и сетевую инженерию можно найти в моем телеграм-канале @sdnv_funkhole

Комментарии (0)