Как зашифровать существующую систему Ubuntu 24.04
Это пошаговое руководство показывает, как зашифровать Ubuntu, сохранив при этом ее данные, после установки на свой компьютер.
Если при установке Ubuntu 24.04 вы не выбрали использование всего диска, графической возможности включить шифрование не будет. Однако впоследствии вы можете вручную зашифровать всю систему Ubuntu.
Таким образом, при каждой загрузке системы Ubuntu она запрашивает ввод пароля для разблокировки загрузочной записи (если /boot
также зашифрован) и раздела диска, прежде чем пользователь сможет войти в систему.
он дважды запрашивает пароль, чтобы разблокировать загрузочную запись, а затем корневой раздел
Это руководство протестировано в Ubuntu 24.04 LTS с загрузчиком Grub по умолчанию. В настройку системы входят:
- Безопасная загрузка: отключена. Не уверен, что это необходимо.
/boot/efi
в отдельном разделе/dev/sda3
.- все остальные системные файлы (включая /boot, /home, область подкачки) в одном разделе Ext4 /dev/sda4.
Это также должно работать, если вы разделили /boot
, /home
и swap. Но для файловой системы, отличной от Ext4, процесс сжатия может отличаться.
ПРИМЕЧАНИЕ. Процесс шифрования, описанный в этом руководстве, МОЖЕТ СЛОМАТЬ ВАШУ СИСТЕМУ!!! Не делайте этого на рабочей машине, если не знаете, как восстановить.
Шаг 1: Подготовка
Прежде чем приступить к работе, всегда рекомендуется выполнить резервное копирование, резервное копирование и резервное копирование! Сохраните важные данные, потому что любая неправильная конфигурация и аппаратное прерывание могут сломать вашу систему!
1. Сначала загрузитесь и войдите в Ubuntu 24.04. Затем нажмите Ctrl+Alt+T
, чтобы открыть окно терминала. Когда он откроется, выполните команду:
df -h
Команда поможет узнать корневой раздел /, куда установлен загрузчик, а также отдельные разделы для /boot
и /home
, если таковые имеются.
В моем случае (см. снимок экрана ниже) у меня есть только /dev/sda4 для root и /dev/sda3 для загрузчика /boot/efi. Для SSD NVMe имена устройств будут иметь вид /dev/nvmeXnYpX (например, /dev/nvme0n1p3).
Вам необходимо записать их выполненными или запомнить (включая отдельные /home /boot, если они существуют) для дальнейшего использования.
2. Затем установите необходимый пакет cryptsetup
, выполнив команду:
sudo apt install cryptsetup
Также проверьте, включен ли SELinux, выполнив в терминале следующую команду:
sudo apt install policycoreutils && sestatus
Шаг 2. Загрузите на компьютер другую ОС Linux (или LiveUSB).
Чтобы зашифровать Ubuntu, вам необходимо сначала отключить файловую систему. Это означает, что вам необходимо загрузить компьютер с другой ОС Linux для выполнения процесса шифрования.
Если на вашем компьютере установлена система Linux с двойной загрузкой, просто перезагрузитесь в нее. Если НЕТ, создайте загрузочный USB-установщик, например, Ubuntu, Mint, Debian, а затем загрузите работающую систему с USB.
Шаг 3. Зашифруйте вашу систему Ubuntu
После загрузки работающей системы закройте мастер установки, чтобы перейти на рабочий стол.
Затем определите корневой раздел Ubuntu 24.04, /boot/efi (и отдельный /home /boot, если он существует), либо запустив Диски GNOME (доступно в Linux, Ubuntu и других Linux с GNOME), либо путем монтирования и проверки в файловом менеджере.
В моем случае это «/dev/sda4» (root) и «/dev/sda3» (/boot/efi). Замените их на свои во всех командах ниже!
1. Уменьшите размер, чтобы освободить место для заголовка LUKS.
При монтировании вручную отключите все разделы диска. Затем откройте терминал (Ctrl+Alt+T) и выполните команду:
sudo e2fsck -f /dev/sda4
Эта команда заставляет проверить файловую систему Ubuntu, что необходимо, прежде чем ее можно будет сжать. Замените /dev/sda4 на свой корень Ubuntu.
Затем уменьшите файловую систему Ubuntu, чтобы осталось место для заголовка LUKS:
sudo resize2fs /dev/sda4 91G
Замените /dev/sda4
и 91G (в моем случае немного меньше 92G) в соответствии с тем, что вы получили в «Шаге 1: Подготовка».
2. Зашифруйте раздел Ubuntu.
Как только у вас будет достаточно свободного места (минимум 32 МБ) для заголовка LUKS, выполните приведенную ниже команду, чтобы зашифровать корневую файловую систему Ubuntu:
sudo cryptsetup reencrypt --encrypt --type luks2 --hash sha256 --pbkdf pbkdf2 --reduce-device-size 32M /dev/sda4
Кроме того, замените /dev/sda4
на корневой раздел Ubuntu, и вот описание параметров команды:
--type luks2
— необязательно для Ubuntu 24.04, поскольку используется по умолчанию. Для старых Ubuntu и других Linux с GRUB старше версии 2.06luks2
НЕ поддерживается. GRUB 2.06 имеет начальную поддержку, но с ограничениями. Поэтому для старого Grub вместо этого используйте--type luks1
.--hash sha256
— укажите, какую хэш-функцию использовать, также необязательно, посколькуsha256
является значением по умолчанию.--pbkdf pbkdf2
– обязательно, поскольку загрузчик Grub пока НЕ поддерживает режимArgon2id
по умолчанию, но толькоpbkdf2
.
После запуска команды введите YES в вывод терминала, чтобы подтвердить операцию. Затем введите пароль и еще раз подтвердите (без визуальной обратной связи, просто введите его в уме), пароль будет использоваться для разблокировки вашей системы Ubuntu во время загрузки.
ПРИМЕЧАНИЕ. Эта команда может занять несколько минут! Для ноутбука подключите блок питания и отключите приостановку в случае сбоя!
По выбору вы можете добавить другой пароль для резервного копирования или другого использования с помощью команды:
sudo cryptsetup luksAddKey --type luks2 --hash sha256 --pbkdf pbkdf2 /dev/sda4
(НЕ проверялось) Если вы отделили файловый раздел /home
и хотите его зашифровать, повторите последние команды, чтобы сжать его, чтобы освободить место, и зашифруйте с помощью команды cryptsetup reencrypt
. .
Шаг 3. Настройте загрузчик Grub и сообщите Ubuntu, чтобы он разблокировался при загрузке.
После шифрования вам необходимо заново создать запись меню загрузки Grub и указать Ubuntu, чтобы она разблокировала корень при каждой загрузке.
Этот шаг также выполняется либо в ОС Linux с двойной загрузкой, либо в работающей системе, загружаемой с USB.
1. Разблокировать корневую файловую систему
Сначала выполните команду ниже, чтобы разблокировать (/dev/sda4 теперь является зашифрованным контейнером, а не корневым разделом):
sudo cryptsetup open /dev/sda4 sda4_crypt
Эта команда запросит у вас пароль (вы установили на последнем шаге) для разблокировки, а затем сопоставит корневую файловую систему с /dev/mapper/sda4_crypt
. Измените sda4_crypt на любое имя по вашему желанию, хотя вам также необходимо заменить его во всех командах ниже.
Затем измените его размер, чтобы увеличить его (вы уменьшили его на последнем шаге):
sudo resize2fs /dev/mapper/sda4_crypt
В команде замените sda4_crypt
согласно последней команде.
2. Подключите файловую систему и выполните Chroot.
Затем смонтируйте корневую файловую систему, которая в моем случае сопоставлена с /dev/mapper/sda4_crypt
, выполнив команду:
sudo mount /dev/mapper/sda4_crypt /mnt
Если есть отдельный раздел /boot
(например, /dev/sdaX), то смонтируйте его с помощью:
sudo mount /dev/sdaX /mnt/boot
И смонтируйте /boot/efi (в моем случае /dev/sda3) в соответствующий каталог:
sudo mount /dev/sda3 /mnt/boot/efi
Кроме того, псевдофайловые системы с привязкой-монтированием:
sudo mount --rbind /proc /mnt/proc
sudo mount --rbind /sys /mnt/sys
sudo mount --rbint /dev /mnt/dev
Наконец, выполните chroot в корневую файловую систему, чтобы вы могли работать так же, как при удаленном входе в систему.
sudo chroot /mnt /bin/bash
После этой команды вы обнаружите, что приглашение терминала изменилось на «root@ubuntu:/#».
3. Настройте Grub и Crypttab
Корневой UUID НЕ меняется после шифрования корневого (и/или /home) системного раздела, но изменяется имя устройства. В моем случае корень больше НЕ /dev/sda4, теперь это /dev/mapper/sda4_crypt.
Если вы когда-либо редактировали /etc/fstab, чтобы использовать имя устройства (например, /dev/sdaX, /dev/nvme0nXpY) вместо UUID для монтирования системных разделов при загрузке, вам необходимо изменить их соответствующим образом. Если НЕТ, просто пропустите и оставьте этот файл без изменений.
В этой среде chroot выполните команду ниже, чтобы отредактировать файл конфигурации grub:
nano /etc/default/grub
Затем вам нужно добавить новую строку GRUB_ENABLE_CRYPTODISK=y, чтобы указать Grub разблокировать /boot
при каждой загрузке (не требуется, если он смонтирован в отдельном незашифрованном разделе). , затем нажмите Ctrl+S для сохранения и Ctrl+X для выхода.
Если в вашей Ubuntu включен SELinux (обычно он отключен по умолчанию), добавьте параметр ядра enforcing=0 в качестве значения GRUB_CMDLINE_DEFAULT, чтобы указать ему работать в разрешительном режиме, иначе ваш Ubuntu может отказаться загружаться. Затем вы можете удалить параметр ядра после первой загрузки зашифрованной системы Ubuntu.
Затем отредактируйте /etc/crypttab
с помощью команды ниже:
nano /etc/crypttab
Затем добавьте строку ниже, чтобы указать, что нужно разблокировать зашифрованный контейнер (указанный UUD) и сопоставить его с /dev/mapper/sda4_crypt
при каждой загрузке.
sda4_crypt UUID=xxxxx-xxx-xxx-xxx-xxxx none luks,retries=3
Вот UUID «/dev/sda4». Запустите команду udevadm info -q all -n /dev/sda4 |grep by-uuid
в другом окне терминала (Ctrl+Alt+T), чтобы узнать, пока bkid
выведет данные. неправильный.
Если также зашифрован отдельный раздел /home
, добавьте в файл новую строку:
sdaX_crypt UUID=xxxxx-xxx-xxx-xxx-xxxx none luks,retries=3
В этой строке замените UUID в соответствии с выводом команды udevadm info -q all -n /dev/sdaX |grep by-uuid
в другом терминале. Однако вам необходимо заменить /dev/sdaX
в соответствии с тем, где вы находитесь /home
.
4. Применить изменения
Кроме того, в среде chroot переустановите загрузчик grub с помощью команды:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI/ubuntu --recheck
Здесь параметры команды сообщают:
--target=x86_64-efi
— установить GRUB для платформы amd64 (Intel/AMD). Значением также может бытьarm-efi
,arm64-efi
и т. д., в зависимости от архитектуры вашего процессора.--efi-directory=/boot/efi
— укажите раздел EFI, он смонтирован в /boot/efi на последнем шаге.--boot-directory=/boot/efi/EFI/ubuntu
— в Ubuntu по умолчанию для каталога загрузки установлено значение/boot
. Однако в моем случае он зашифрован. Итак, используйте этот вместо этого.--recheck
сообщает об удалении существующей карты устройств.
Наконец, обновите конфигурацию grub с помощью команды:
grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg
ПРИМЕЧАНИЕ. Команда update-grub
здесь больше не работает, поскольку она автоматически генерирует /boot/grub/grub.cfg
. В то время как опция --boot-directory=
в последней команде предписывала установить файл конфигурации в /boot/efi/EFI/ubuntu, который не зашифрован.
Кроме того, вам необходимо запустить команду ниже, чтобы восстановить образы initramfs.
update-initramfs -c -k all
Размонтировать и перезагрузить
Когда все будет сделано хорошо, выйдите из среды chroot, выполнив команду:
exit
Затем размонтируйте с помощью следующих команд. Для монтирования --rbind
вам необходимо повторно запустить команду монтирования с опцией --make-slave
, чтобы разрешить рекурсивное изменение типа всех монтирований. Или он откажется размонтироваться и скажет, что занят.
sudo umount /mnt/boot/efi
sudo mount --make-slave /mnt/proc
sudo umount -R /mnt/proc
sudo mount --make-slave /mnt/sys
sudo umount -R /mnt/sys
sudo mount --make-slave /mnt/dev
sudo umount -R /mnt/dev
И закройте (заблокируйте) зашифрованный раздел:
sudo cryptsetup close sda4_crypt
Наконец, выключите компьютер, выполнив команду:
shutdown -P now
Для ленивых: вы можете запустить команду завершения работы сразу после выхода из chroot, поскольку она автоматически размонтирует и закроет зашифрованный раздел.
Теперь перезагрузите компьютер, чтобы увидеть волшебство (или сломайте систему😅. На устранение неполадок у меня уходит несколько часов).