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