При установке любого дистрибутива мы имеем возможность зашифровать партиции на диске, иногда я шифрую корень системы
Но что делать, если хочется снять шифрование?
Загружаемся через 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