Установка NixOS с шифрованным разделом /root на btrfs
Что получим в итоге:
- Шифрованные раздел с системой
- Голый NixOS без интерфейса, настройка будет в отдельной статье
Я делаю обычно себе систему с шифрованным диском, т.к. на моем ноуте хранятся доступы к прод окружениям и потенциальная кража ноутбука может наделать дел.
Однако я не доверяю по умолчанию никаким системам защиты и эти меры безопастности я использую исключительно для того, чтобы иметь запас по времени для смены всех ключей доступа.
Подготовка
На офф. сайте скачиваем Minimal ISO image под ваш процессор (64bit intel/amd в большинстве случаев).
Берем любую флешку, если вы читаете это не из 2000ых то размера вашей флешки должно хватить в любом случае. Для записи ISO на флешку из под винды рекомендую Rufus. Для записи из под линукс - dd.
После записи пихаем ее в наш ПК/ноут и грузимся с нее. Для того, чтобы загрузиться с внешнего устройства, надо после нажатия кнопки питания вашего компухтера нажимать F8 (если ПК) или F12 (если ноут) в большинстве случаев. Можете загуглить кнопку конкретно для вашего производителя ноута/материнки.
Разметка диска
Мы создадим всего 2 раздела, один FAT32 для /boot, второй BTRFS для системы.
Переходим сразу под рута
sudo -i
Смотри на наши диски в системe:
lsblk
Я пишу эту статью, используя виртуальную машину, чтобы наделать для вас скриншотов. На ВМ у меня диск называется sda (так обычно обозначается первый в системе сата диск, второй будет sdb), но на реальном ноутбуке у меня NVME диск и называется там он nvme0n1. Определитель какого типа у вас диск и далее по статье просто подменяйте на свой, в случаее необходимости.
Мы используем gdisk для разметки, вот cheatsheet с полезными командами:
- p (показать статус)
- d (удалить раздел)
- n (создать раздел)
- w (записать все, что сделали, на диск)
Запускаем утилиту разметки:
gdisk /dev/sda # В случае NVME диска /dev/nvme0n1, один раз подсказываю дальше сами
Я риспишу по пунктам, что нажать :)
- Вводим n и жмем Enter
- Еще раз Enter (указываем, что это 1 раздел)
- Еще раз Enter (первый сектор)
- Вводим +1Gi и жмем Enter (делаем бут раздел в 1 гигабайт)
- Вводим ef00 и жмем Enter (говорим, что это EFI раздел)
Мы создали бут раздел, теперь создадим раздел под систему:
- Вводим n и жмем Enter
- И просто жмем Enter на все вопросы, нас устраивают значения по умолчаню. Давайте посмотрим, что получилось:
- Вводим p и жмем Enter Вы должны увидеть вот такой результат:
- Если результат вас устраивает, то вводим w и жмем Enter
Шифрование диска
Вводим:
cryptsetup luksFormat /dev/sda2 # мы шифруем второй раздел (с системой)
Задаем пароль (он будет спрашиваться у вас каждый раз на этапе загрузки системы)
Сразу же открываем и диск:
cryptsetup open /dev/sda2 nixenc
(nixec - так диск замапится в системе на данный момент)
Создаем волумы в btrfs
Вводим команды по очереди, думать не надо, а то придется расписывать про BTRFS
pvcreate /dev/mapper/nixenc
vgcreate vg /dev/mapper/nixenc
lvcreate -n swap -L 8GB vg # Свап, можете сделать больше/меньше
lvcreate -n root -l +100%FREE vg # Все остальное отдаем под /root
Форматируем
Для начала форматнем /boot:
mkfs.vfat -n boot /dev/sda1
Создаем и включаем swap:
mkswap /dev/mapper/vg-swap
swapon /dev/mapper/vg-swap
Теперь форматируем рут:
mkfs.btrfs -L root /dev/mapper/vg-root
Установка
Если вы устанавливаете ОС на ноутбук, то вам нужно подключится к Wi-Fi или воткнуть кабель ноут.
Подключится к Wi-Fi можно вот так:
Запускаем сервис wpa_supplicant
systemctl start wpa_supplicant
Заходим в утилиту wpa_cli:
wpa_cli
И выполняем команды:
> add_network
> set_network 0 ssid "myhomenetwork"
> set_network 0 psk "mypassword"
> set_network 0 key_mgmt WPA-PSK
> enable_network 0
Приступаем к установке:
Монтируем рут:
mount /dev/mapper/vg-root /mnt
Монтируем бут:
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
Генерируем хардварный конфиг
nixos-generate-config --root /mnt
Теперь нам надо указать в конфиге как обращаться с нашим шифрованным разделом
Вводим команду
lsblk -o name,type,mountpoint,uuid
Получаем примерно такой вывод:
NAME TYPE MOUNTPOINT UUID
loop0 loop /nix/.ro-store
sda disk 1980-01-01-00-00-00-00
├─sda1 part /iso 1980-01-01-00-00-00-00
└─sda2 part 1234-5678
sda disk
├─sda1 part /mnt/boot 8C6D-DD63
└─sda2 part d6f3e071-f449-4aab-87f4-93ee3a3fbab1 # Нам нужно это значение
└─nixenc crypt qtCMVj-QKcW-0rcm-Pyud-Fqzc-tA8f-inZp3M
├─vg-swap lvm [SWAP] a7208e31-c1e7-44b8-895c-d01d0b930508
└─vg-root lvm /mnt
Берем UUID второго раздела (смотрите комментарий в выводе выше), можно сделать фотку на мобильник
Открываем файл /mnt/etc/nixos/hardware-configuration.nix
И добавляем туда строчки после boot
boot.initrd.luks.devices = {
root = {
device = "/dev/disk/by-uuid/<здесь полученны UUID>";
preLVM = true;
allowDiscards = true;
};
};
Если у вас ноутбук, то стоит сразу прописать данные от WiFi в конфиг, чтобы не мучаться в дальнейшем (мы эти данные потом удалим, при настройке системы)
Открываем файл /mnt/etc/nixos/configuration.nix и прописываем:
networking.wireless.enable = true;
networking.wireless.networks.ИМЯ_WiFi.psk = "Пароль WiFi";
Устанавливаем NixOS
nixos-install
Что дальше?
Вы можете вынуть флешку с установщиком и перезагрузить систему
Первая загрузка спросит у вас пароль от root пользователя
Если у вас что-то пошло не так, то вы всегда можете загрузиться с установщика еще раз и поправить конфигурацию, для этого надо расшифровать диск и примонтировать:
cryptsetup open /dev/sda2 nixenc
mount /dev/mapper/vg-root /mnt
mount /dev/sda1 /mnt/boot
swapon /dev/mapper/vg-swap