Как стать автором
Обновить

Artix Linux. Установка с полным/частичным шифрованием

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров13K

Artix Linux - это systemd-free дистрибутив линукс на основе Arch Linux. Он использует свои репозитории, но присутствует частичная совместимость с репозиториями Arch и AUR. Artix Linux предоставляет выбор систем инициализации (OpenRC, Runit, s6, dinit). В этом гайде будет рассмотрен пример с использованием OpenRC.

Что будет рассматриваться

  • [BootPartial] - "Почти полное" шифрование диска, более быстрое время загрузки, но менее безопасное из-за возможности заложить эксплоит в незашифрованный раздел boot

  • [BootFull] - Полное шифрование диска, более медленное время загрузки.

  • [UEFI] - Зашифрованный корневой раздел с системным разделом EFI

Шифрование будет производиться с помощью Linux Unified Key Setup (LUKS).

Разделы дополнительно будут разделены с помощью Logical Volume Manager (LVM).

Boot device

Чтобы установить систему создадим загручное устройство. Скачаем образ LiveCD/LiveUSB c официального сайта. Для новичков советую скачать образ с графическим окружением, например xfce, это упростит копирование и вставку команд в консоль.

После скачивания берем устройство для создания LiveCD/LiveUSB (обычно используется флешка). На него нужно записать сам образ. Для Windows я использую Rufus. Для Linux используйте команду:

dd bs=4M if=path/to/artix.iso of=/dev/sdX oflag=nocashe status=progress

Где X в /dev/sdX это название блочного устройства.

Если вы используйте виртуальную машину, то укажите нужный iso образ при создании новой виртуальной машины

После загрузки с LiveCD/LiveUSB откройте терминал и введите:

sudo su

для запуска всех последующих команд от имени администратора

Начало установки

Установка с использованием Calamares рассматриваться не будет.

Для работы с разделами диска будет использоваться parted. Он не входит в стандартный пакет LiveCD/LiveUSB Artix Linux, поэтому скачаем его с репозиториев, прежде обновив базу:

pacman -Sy parted

Узнайте букву X желаемого целевого установочного диска:

parted -l

Убедитесь, что на этом диске нет ничего важного, затем удалите его таблицу разделов и перезапишите все ее содержимое с помощью:

dd bs=4096 if=/dev/urandom iflag=nocache of=/dev/sdX oflag=direct status=progress || true

В целях безопасности ДОЖДИТЕСЬ завершения этого длительного процесса. Затем запустите:

sync

Для очистки очереди запланированных операций ввода-вывода с диском. Кроме того, рекомендуется перезагрузиться после выполнения этого и снова запустить терминал.

Разделы диска

[BootPartial]

  • /dev/sdX - Физический диск с таблицей разделов MBR

  • /dev/sdX1 - Загрузочный незашифрованный раздел размером 1 GB

  • /dev/sdX2 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)

    • /dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти

    • /dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места

[BootFull]

  • /dev/sdX - Физический диск с таблицей разделов MBR

  • /dev/sdX1 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)

    • /dev/mapper/lvm-volBoot - Зашифрованный boot раздел размером 1 ГБ

    • /dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти

    • /dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места

[UEFI]

  • /dev/sdX - Физический диск с таблицей разделов GPT

  • /dev/sdX1 - Системный раздел EFI размером 512 MB

  • /dev/sdX2 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)

    • /dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти

    • /dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места

Создание разделов

[BootPartial]

Создайте новую таблицу разделов MBR:

parted -s /dev/sdX mklabel msdos

Настройте раздел /dev/sdX1 для /boot и установите boot флаг:

parted -s -a optimal /dev/sdX mkpart "primary" "fat16" "0%" "1024MiB"
parted -s /dev/sdX set 1 boot on

Создайте раздел /dev/sdX2, который займет оставшееся свободное место - после 1 ГБ /boot и установите флаг lvm:

parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "1024MiB" "100%"
parted -s /dev/sdX set 2 lvm on

Просмотрите является ли выравнивание разделов правильным:

parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1
parted -s /dev/sdX align-check optimal 2

[BootFull]

Создайте новую таблицу разделов MBR:

parted -s /dev/sdX mklabel msdos

Создайте раздел /dev/sdX1, который займет все пространство, и установите флаги загрузки и lvm:

parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "0%" "100%"
parted -s /dev/sdX set 1 boot on
parted -s /dev/sdX set 1 lvm on

Просмотрите является ли выравнивание разделов правильным:

parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1

[UEFI]

Создайте новую таблицу разделов GPT:

parted -s /dev/sdX mklabel gpt

Создайте раздел /dev/sdX1 для /boot/EFI и установите ESP флаг:

parted -s -a optimal /dev/sdX mkpart "primary" "fat32" "0%" "512MiB"
parted -s /dev/sdX set 1 esp on

Создайте раздел /dev/sdX2, который займет оставшееся свободное место - после 512 MB /boot/efi и установите флаг lvm:

parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "512MiB" "100%"
parted -s /dev/sdX set 2 lvm on

Просмотрите является ли выравнивание разделов правильным:

parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1
parted -s /dev/sdX align-check optimal 2

Настройка и шифрование логических томов

Шифрование диска будет использовать Linux Unified Key Setup (LUKS), который является частью расширенной версии cryptsetup.

Чтобы принудительно загрузить модули ядра Linux, связанные с Serpent и другими надежными шифрованиями, с вашего LiveCD/LiveUSB, запустите:

cryptsetup benchmark

Физический раздел LUKS можно создать и отформатировать следующим образом:

# [BootPartial]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX2

# [BootFull]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX1

# [UEFI]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX2

Описание опций:

  • verbose - Выводит дополнительную информацию о выполнении команды.

  • type luks1 - Для использования более общей версии LUKS (Из-за ограничений grub)

  • cipher serpent-xts-plain64 - Выбирает, какой шифр использовать

  • key-size 512 - Размер ключа шифра

  • hash sha512 - Алгоритм хеширования, используемый для получения ключа.

  • iter-time 10000 - Количество миллисекунд, затрачиваемое на обработку парольной фразы

  • use-random - Выбирает, какой генератор случайных чисел использовать

  • verify-passphrase - Используется для luksFormat и luksAddKey для парольной фразы

При выполнении программа попросит подтвердить перезапись данных. Введите капсом "YES":

# WARNING!
# ========
# This will overwrite data on /dev/sdX irrevocably.
# Are you sure? (Type 'yes' in capital letters): YES

Далее введите парольную фразу:

# Enter passphrase for /dev/sdX: 
# Verify passphrase: 
# Key slot 0 created.
# Command successful.

Раздел, зашифрованный с помощью LUKS, необходимо открыть и смонтировать с помощью LVM системы:

# [BootPartial]
cryptsetup luksOpen /dev/sdX2 lvm-system

# [BootFull]
cryptsetup luksOpen /dev/sdX1 lvm-system

# [UEFI]
cryptsetup luksOpen /dev/sdX2 lvm-system

Для открытия раздела введите парольную фразу

# Enter passphrase for /dev/sdX: 

Теперь можно создать физический том с LVM и ранее использовавшегося идентификатора (lvm-system) следующим образом:

pvcreate /dev/mapper/lvm-system

Имея физический том, можно создать группу логических томов с именем lvmSystem следующим образом:

vgcreate lvmSystem /dev/mapper/lvm-system

В саму группу добавляем логические тома (Для swap я задал 1 ГБ, но рекомендуется задать >= кол-ву оперативной памяти):

# [BootPartial]
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRoot

# [BootFull]
lvcreate --contiguous y --size 1G lvmSystem --name volBoot
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRoot

# [UEFI]
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRoot

Форматирование разделов

Загрузочный раздел:

# [BootPartial]
mkfs.fat -n BOOT /dev/sdX1 

# [BootFull]
mkfs.fat -n BOOT /dev/lvmSystem/volBoot 

# [UEFI]
mkfs.fat -n ESP -F 32 /dev/sdX1

Корневой раздел:

mkfs.ext4 -L ROOT /dev/lvmSystem/volRoot

Раздел подкачки:

mkswap -L SWAP /dev/lvmSystem/volSwap

Эта команда выведет сообщение типа:

# Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) 
# LABEL=SWAP, UUID=d91f0877-4b84-40c3-82f9-88d2398303b3

Скопируйте куда-нибудь свой swap UUID. Он понадобится вам позже.

Монтирование разделов

Корнем будет /mnt, куда мы и будем устанавливать систему

swapon /dev/lvmSystem/volSwap
mount /dev/lvmSystem/volRoot /mnt
mkdir /mnt/boot

# [BootPartial]
mount /dev/sdX1 /mnt/boot

# [BootFull]
mount /dev/lvmSystem/volBoot /mnt/boot

# [UEFI]
mount --mkdir /dev/sdX1 /mnt/boot/efi

Обязательно проверьте точки монтирования (Вывод для UEFI):

artix-live:[root]:/home/artix# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
loop0                     7:0    0 73.3M  1 loop  /run/artix/sfs/livefs
loop1                     7:1    0  1.1G  1 loop  /run/artix/sfs/rootfs
sda                       8:0    0    8G  0 disk  
├─sda1                    8:1    0  511M  0 part  /mnt/boot/efi
└─sda2                    8:2    0  7.5G  0 part    
  └─lvm-system          254:0    0  7.5G  0 crypt
    ├─lvmSystem-volSwap 254:1    0    1G  0 lvm   [SWAP]
    └─lvmSystem-volRoot 254:2    0  6.5G  0 lvm   /mnt
sr0                      11:0    1  1.2G  0 rom   /run/artix/bootmnt

Настройка и установка пакетов.

Для начала части операционной системы нужно загрузить и установить следующим образом:

basestrap /mnt base base-devel openrc elogind-openrc linux-hardened linux-hardened-headers nano

Вместо стандартного ядра будет установлена предпочтительная защищенная версия

Теперь генерируем fstab:

fstabgen -U /mnt >> /mnt/etc/fstab

Зайдем на установленную среду:

artix-chroot /mnt /bin/bash

Дальше все операции будут производиться в ней

Установите пароль для root:

passwd

Для этого введите пароль два раза:

# New password: 
# Retype new password: 
# passwd: password updated successfully

Обновите базу пакетов:

pacman -Sy

Язык, часовой пояс

Настройка часового пояса:

# ln -s /usr/share/zoneinfo/Continent/City /etc/localtime

Где Continent/City имя вашего местоположения. Например Europe/Moscow:

ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Настройка аппаратных часов:

hwclock --systohc

Генерация локалей:

echo -e "en_US.UTF-8 UTF-8" >> /etc/locale.gen

Данная команда добавит в конец файла строчку с английской локалью, но если вам нужен другой язык, то откройте файл /etc/locale.gen в любом редакторе.

Например используя nano:

nano /etc/locale.gen

Находим строчку с нужным языком и раскомментируемеё. Для русского это:

#ru_RU.UTF-8 UTF-8

CTRL+Q поиск, CTRL+O сохранение, CTRL+X выход

Английскую локаль раскомментировать обязательно, остальные языки опционально.

Чтобы проверить раскомментированные локали введите следующую команду:

grep -v '^#' /etc/locale.gen

После выполняем генерацию выбранных локалей:

locale-gen

Настройка языка системы:

Сам язык системы задаётся в файле /etc/locale.conf:

echo "LANG=en_US.UTF-8" > /etc/locale.conf

Вместо en_US.UTF-8 вставьте нужную локаль

Настройка сети и хоста

Далее изменяйте your_host_name на нужное имя хоста.

Настройка имени хоста (это обязательно для OpenRC):

echo "hostname=your_host_name" > /etc/conf.d/hostname

Теперь добавите записи в hosts. это удобнее делать через редактор:

nano /etc/hosts

Добавьте данные строчки в этот файл:

127.0.0.1        localhost
::1              localhost
127.0.1.1        your_host_name.localdomain  your_host_name

Если система имеет постоянный IP-адрес, его следует использовать вместо 127.0.1.1.

Установите DHCP клиент:

pacman -S dhcpcd dhclient

Желательным выбором для управления сетевыми интерфейсами является Network Manager, для установки и активации службы необходимо запустить следующее:

pacman -S gcr networkmanager networkmanager-openrc
rc-update add NetworkManager default

Загрузчик и ядро

Mkinitcpio

Файл /etc/mkinitcpio.conf позволяет настраивать различные параметры ядра. В части HOOKS. Между ключевыми словами block и filesystems необходимо поместить encrypt lvm2, чтобы включить полное шифрование диска. Также может быть полезно включить ключевое слово resume, чтобы включить параметры приостановки на диске.

Откройте файл:

nano /etc/mkinitcpio.conf

Вставьте хуки: encrypt, lvm2, resume в нужные места

HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck)

Должно быть так:

HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 resume filesystems fsck)

Дабы избежать возможных проблем в будущем стоит удалить пакет artix-grub-theme, если он присутствует:

pacman -Rc artix-grub-theme

Так как мы используем защищенное ядро, то стандартное стоит удалить, если оно присутствует:

pacman -Rc linux linux-headers

Чтобы избежать ошибок установки cryptsetup, одновременно обновите pacman и openssl и установите устаревший openssl:

pacman -S openssl openssl-1.1 pacman

Теперь нужно установить эти пакеты:

pacman -S lvm2 cryptsetup nano glibc mkinitcpio

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

mkinitcpio -p linux-hardened

Grub

Система установлена, теперь нужно установить загрузчик. Используем мультисистемный GRUB

Для начала его нужно установить:

pacman -S grub

Как вы помните мы записывали swap UUID, теперь нужно записать root UUID:

# [BootPartial]
blkid -s UUID -o value /dev/sdX2

# [BootFull]
blkid -s UUID -o value /dev/sdX1

# [UEFI]
blkid -s UUID -o value /dev/sdX2

Вывод будет примерно такой. Это и есть наш root UUID:

# 896c201f-f454-4d41-9b67-345a8b6a217c

Чтобы grub нашел зашифрованные LUKS разделы, нужно настроить это. Откроем /etc/default/grub:

nano /etc/default/grub  

Теперь изменим строку GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=xxx:lvm-system loglevel=3 quiet resume=UUID=yyy net.ifnames=0"

Где xxx это root UUID, а yyy это swap UUID.

Должно выглядеть примерно так:

GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=896c201f-f454-4d41-9b67-345a8b6a217c:lvm-system loglevel=3 quiet resume=UUID=d91f0877-4b84-40c3-82f9-88d2398303b3 net.ifnames=0"

Раскомментируйте, чтобы включить загрузку с зашифрованных устройств LUKS:

GRUB_ENABLE_CRYPTODISK="y"

Затем вы можете установить GRUB и сгенерировать его config:

# [Boot]
grub-install --target=i386-pc --boot-directory=/boot --bootloader-id=artix --recheck /dev/sdX 
grub-mkconfig -o /boot/grub/grub.cfg

# [UEFI]
pacman -S efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg

Примечание. Каждое изменение в конфигурации GRUB должно сопровождаться командой выше.

Другие пакеты

Для расшифровки и использования томов LUKS/LVM необходимо установить и активировать следующие службы:

pacman -S device-mapper-openrc lvm2-openrc cryptsetup-openrc
rc-update add device-mapper boot 
rc-update add lvm boot 
rc-update add dmcrypt boot

Служба udev (eudev / eudev-openrc) должна быть запущена по умолчанию на уровне выполнения sysinit. Его активацию можно подтвердить следующим образом:

rc-status sysinit | grep udev

Должен вывести это:

# udev            [ stopped ]
# udev-trigger    [ stopped ]

Dbus должна быть установлена и активирована. Если это не так, это можно сделать следующим образом:

rc-update add dbus default

Логин systemd проектов должен быть установлен как часть базовых мета пакетов:

rc-update add elogind boot

Haveged — это простой демон энтропии, полезный для генерации непредсказуемых случайных чисел:

pacman -S haveged haveged-openrc
rc-update add haveged default

Cronie стандартный демон UNIX, который запускает определенные программы в запланированное время:

pacman -S cronie cronie-openrc
rc-update add cronie default

Демоны NTP, ACPI, Syslog-NG можно установить и активировать следующим образом:

pacman -S ntp ntp-openrc acpid acpid-openrc syslog-ng syslog-ng-openrc
rc-update add ntpd default
rc-update add acpid default
rc-update add syslog-ng default

Необязательные зависимости:

pacman -S dosfstools gptfdisk libisoburn mtools btrfs-progs os-prober

Пакеты микрокодов ядра для дополнительных инструкций процессора:

# intel
sudo pacman -S intel-ucode iucode-tool

# amd 
sudo pacman -S amd-ucode iucode-tool

Последние шаги

Выйдите из chroot и размонтируйте тома:

exit
umount -R /mnt
swapoff -a

Для очистки очереди запланированных операций ввода-вывода с диском:

sync

Теперь систему можно перезагрузить:

reboot

При запуске системы нужно дважды ввести парольную фразу, после этого система запуститься.

Устранение ошибок при загрузке

Если ваша система не загрузилась по той или иной причине, то надо сначала загрузиться с LiveCD/LiveUSB.

Теперь расшифруем LVM и смонтируем разделы:

# [BootPartial]
cryptsetup luksOpen /dev/sdX2 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/sdX1 /mnt/boot
swapon /dev/lvmSystem/volSwap

# [BootFull]
cryptsetup luksOpen /dev/sdX1 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/lvmSystem/volBoot /mnt/boot
swapon /dev/lvmSystem/volSwap

# [UEFI]
cryptsetup luksOpen /dev/sdX2 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/sdX1 /mnt/boot/efi
swapon /dev/lvmSystem/volSwap

Если вы видите подобную ошибку при попытке монтирования:

# mount: /mnt: special device /dev/lvmSystem/volRoot does not exist.
#    dmesg(1) may have more information after failed mount system call.

То выполните эту команду и заново выполните монтирование LVM:

vgchange -a y lvmSystem

Зайдём в смонтированную среду:

artix-chroot /mnt /bin/bash

При завершении работ выполняем:

exit
umount -R /mnt
swapoff -a
sync
reboot

Minimal GRUB

Если после введения парольной фразы вы видите Minimal GRUB как показано на скриншоте, то скорее всего GRUB не нашёл файл /boot/grub/grub.cfg или его директорию.

Заходим в систему через LiveCD/LiveUSB и выполняем:

# [Boot]
grub-install --target=i386-pc --boot-directory=/boot --bootloader-id=artix --recheck /dev/sdX 
grub-mkconfig -o /boot/grub/grub.cfg

# [UEFI]
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg

Если вы загрузили LiveCD/LiveUSB в boot режиме, но вам нужно сконфигурировать GRUB для UEFI, то выполните только эту команду:

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

Это сработает, если до этого вы запускали grub-install с нужными аргументами.

Hibernation device not found

Если после введения парольной фразы вы видите: "hibernation device 'UUID=xxx' not found" и "device '/dev/mapper/lvmSystem-volRoot' not found", то скорее всего GRUB не смог найти UUID устройства или в mkinitcpio.conf отсутствует какой-то HOOK.

Неправильный UUID

Заходим в систему через LiveCD/LiveUSB и откроем /etc/default/grub:

nano /etc/default/grub

Перепроверяем, строчку GRUB_CMDLINE_LINUX_DEFAULT. Возможно вы не правильно написали UUID или пропустили какой-либо аргумент. Просмотрите выше пунт по настройке GRUB.

Если нашли ошибку выполняем:

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

Отсутствует HOOK

Заходим в систему через LiveCD/LiveUSB.

Для принудительной загрузки модулей ядра Linux, связанных с Serpent выполним:

cryptsetup benchmark

Откроем /etc/mkinitcpio.conf:

nano /etc/mkinitcpio.conf

Проверяем все ли хуки на месте:

HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 resume filesystems fsck)

Применим изменения:

mkinitcpio -p linux-hardened

Литература

Artix Installation Full Disk Encryption with BOOT

Artix Installation Full Disk Encryption with UEFI

Artix Standart Installation

Device encryption

Теги:
Хабы:
Всего голосов 7: ↑7 и ↓0+7
Комментарии11

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург