Современная, модная, защищенная


Современный мир, порой, подкидывает различные фортеля.
Calculate Linux позволяет “обезопасить” своих пользователей от ряда возможных последствий.

В этой мини-статье рассказывается как установить Calculate на современное железо, которое не знает за Legacy и умеет только в UEFI, и не бояться!

Эта статья актуализирует предыдущую тему Установка Calculate на LUKS

Итак, тестовый стенд - обычная виртуалка в Virtualbox, но с включенным режимом EFI.
Исходный образ - cldx-20191115-x86_64.iso

Грузимся. Разбиваем диск любимым способом примерно вот так:

01-disk-layout

Кратко поясню:
Разметка GPT
Первые 2 МиБ (можно и 1 МиБ) - оставим на вырост GPT
Раздел 1 - имеет тип 0xEF00 EFI System - раздел, куда GRUB положит файл прошивки для UEFI
Раздел 2 - будущий /boot раздел.
Раздел 3 - раздел, который будем шифровать, устанавливать в него систему, хранить пользовательские данные.

Примечание: раздел 3 имеет такой размер просто для примера. Для хранения реальных пользовательских данных может потребоваться много больше места :slight_smile:

Итак, едем дальше.

Устанавливаем пакет sys-fs/cryptsetup если он не установлен.
На исходном образе эта утилита присутствует.

Затираем раздел, который будем шифровать.

dd bs=1M if=/dev/urandom of=/dev/sda3

Шифруем раздел

cryptsetup luksFormat -v --type luks -c aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 4096 --use-urandom /dev/sda3

Подключаем зашифрованный диск

cryptsetup luksOpen /dev/sda3 cl_encrypted

В подключенном контейнере создаем LVM и нарезаем будущие разделы.

pvcreate /dev/mapper/cl_encrypted
vgcreate cl_vg_enc /dev/mapper/cl_encrypted
lvcreate -n swap -L 4G cl_vg_enc
lvcreate -n root -l 95%FREE cl_vg_enc

Получившиеся разделы можно не форматировать. Пусть об этом заботится установщик.
Устанавливаем Calculate Linux любимым способом.
Например вот так:

cl-install --uefi /dev/sda1 -d /dev/sda2:/boot:ext4:on \
-d /dev/mapper/cl_vg_enc-root:/:ext4:on -d /dev/mapper/cl_vg_enc-swap:swap \
-l en_US --timezone Europe/Moscow --keymap ru_RU --hwclock UTC \
–netconf openrc --iface eth0:dhcp --hostname cl-box.local --dns 77.88.8.8 --audio alsa \
–grub-terminal gfxterm --grub-passwd on --root-password -u user:all -a off -o on

Система установлена.

Теперь необходимо поправить пару системных настроек в установленной системе и всё!
Чрутимся в установленную систему:

mkdir /tmp/r
mount /dev/mapper/cl_vg_enc-root /tmp/r
mount /dev/sda2 /tmp/r/boot
for d in /dev{,/shm,/pts} /sys /proc ; do
mount --bind -v $d /tmp/r/$d
done
/bin/chroot /tmp/r /bin/bash
env-update && source /etc/profile

Добавляем в настройки dracut сведения о том, что нам необходим в будущем модуль crypt и обновляем initramfs системы. На всякий случай. Так как при использовании исходного образа, я убедился в том, что dracut использует модуль crypt по-умолчанию. Но, в мире Linux, умолчания, иногда меняются…

echo ‘add_dracutmodules+=" crypt"’ > /etc/dracut.conf.d/10-crypt.conf
dracut --force

Примечание: при использовании исходного образа этот шаг можно не выполнять.

Теперь необходимо будет на этапе загрузки сообщать ядру (точнее dracut’у) о нашем зашифрованном разделе. Это можно сделать добавив параметр rd.luks.uuid с UUID зашифрованного раздела (в нашем случае это /dev/sda3).
Для этого, узнаем UUID раздела

blkid /dev/sda3 -o udev | sed -nr ‘s/^ID_FS_UUID=(\S+)$/\1/p’

Сохраняем полученное значение, в нашем случае 79efff15-b566-4adc-8a3f-a00f3144d159
Открываем /etc/default/grub. Ищем строчку GRUB_CMDLINE_LINUX и добавляем в неё, в нашем случае, rd.luks.uuid=79efff15-b566-4adc-8a3f-a00f3144d159
Сохраняем файл и “запрещаем” изменения файла шаблонами Calculate :slight_smile:

cp /etc/default/grub /etc/default/grub.clt

Обновляем конфиг grub

grub-mkconfig -o /boot/grub/grub.cfg

Кстати, сейчас в установленную, но ещё не загруженную систему, можно установить/обновить/удалить пакеты, например, с прошивками ваших устройств, с драйверами видео и прочими радостями. Также при необходимости, сразу подкрутить конфиг Xorg…

А теперь перегружаемся и наслаждаемся результатом :slight_smile:

P.S.: можно создать в комментариях другую мини-статью с добавлением в такую конфигурацию возможности “ввода” пароля для расшифровки по ssh.

P.P.S.: так же можно написать краткую инструкцию как подготовить свой собственный образ Calculate готовый к использованию в том же VirtualBox, с установленными и настроенными дополнениями.

1 Like

dracut - это утилита для сборки initramfs, и в процессе загрузки никак не учавствует.
В данном случае информация о LUKS из командной строки ядра предназначена для init скрипта в initramfs. Именно init монтирует зашифрованный раздел и затем выполняет switch_root на него.

Статья полезная, спасибо!

1 Like

Да, конечно же. Мой недосмотр. Интересно, а как исправить свою тему? :slight_smile:

Внизу статьи многоточие, потом карандашик.

Действительно полезная информация. Спасибо большое.