Шифрование корневого раздела dm-crypt на Getnoo
Модуль dm-crypt включен в ядро >=2.6.4
Статья рассматривает основные моменты установки и настройки Gentoo, на примере переноса рабочей системы на новый диск с зашифрованным корнем.
С небольшими изменениями, этой статьей, можно так же руководствоваться при установке с нуля.
Дано:
- /dev/sda - текущей диск на котором установлена Gentoo.
- /dev/sdb - новый чистый диск, который только что воткнули.
- Ввод пароля будет осуществятся с клавиатуры при включении компьютера.
Так же к ознакомлению : Шифрование разделов dm-crypt на Getnoo
Подготовка
Диск
Разобьем диск следующим образом:
Имя Флаги Тип раздела Тип ФС [Метка] Размер (МБ) ---------------------------------------------------------------- sdb1 Загрузочный Основной Linux 509,97 # Загрузочный ext2 sdb2 Основной Linux 3997,49 # SWAP sdb3 Основной Linux 100002,96 # Зашифрованный корень sdb4 Основной Linux 395597,46 # Не зашифрованный раздел для файл помойки
Утилиты и модули
Понадобятся cryptsetup
emerge sys-fs/cryptsetup -av
Модуль dm_crypt
modprobe dm_crypt
Если данного модуля у вас нету, то включите его я ядре
Настройки ядра
Device Drivers ---> [*] Block devices ---> [*] Multiple devices driver support (RAID and LVM) ---> <*> Device mapper support <M> Crypt target support -*- Cryptographic API ---> <M> SHA224 and SHA256 digest algorithm <M> SHA384 and SHA512 digest algorithms
Пересобрать ядро и перезагрузить
reboot
Проверить
modprobe dm_crypt
Форматирование
Создание шифрованного раздела
cryptsetup luksFormat /dev/sdb3
Подключение
cryptsetup luksOpen /dev/sdb3 root
Форматирование
mkfs.ext2 /dev/sdb1 mkswap /dev/sdb2 mkfs.ext3 -j /dev/mapper/root
Перенос системы
Копирование
mkdir /tmp/root mount /dev/mapper/root /tmp/root/ mkdir /tmp/root/boot mount /dev/sdb1 /tmp/root/boot/
Скопировать корень системы на новый диск
rsync -AaHSxv / /tmp/root/
Команда rsync скопирует данные с сохранением всех прав.
Копирование с ключом x, это значит, содержимое каталогов примантированных в текущей момент к корню не будет скопировано в корень новой системы.
Будьте внимательны если /usr /home и т.п. каталоги у вас примантированны с других разделов.
Папка /tmp/root/dev/ сейчас пуста, необходимо создать устройства
mknod /tmp/root/dev/console -m 0600 c 5 1 mknod /tmp/root/dev/null -m 0666 c 1 5
Ядро новой системы
mount -t proc none /tmp/root/proc/ mount -o bind /dev/ /tmp/root/dev/ chroot /tmp/root/ /bin/bash
<note warning > Переход в окружение новой системы </WRAP>
env-update && source /etc/profile
Настройки ядра будут немного отличаться:
- Все модули должны быть включены в само ядро
- Для возможности загрузиться, необходим образ initramfs, для этого нам и нужна утилита genkernel.
Установить
emerge sys-kernel/genkernel -av
Настроить
/etc/genkernel.conf
... SAVE_CONFIG="yes" LUKS="yes" DISKLABEL="yes"
Что бы genkernel не испортил текущий конфиг, своими настройками по умолчанию, мы укажем ему, что нужно использовать только наш конфиг, но для этого необходимо обязательно сделать копию.
cd /usr/src/linux cp .config .config_my genkernel --kernel-config=./.config_my --menuconfig all
Настройки ядра
General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support Device Drivers ---> Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs [*] Block devices ---> <*> Loopback device support <*> Cryptoloop Support <*> RAM block device support [*] Multiple devices driver support (RAID and LVM) ---> <*> Device mapper support <M> Crypt target support -*- Cryptographic API ---> -*- CBC support <*> SHA224 and SHA256 digest algorithm <*> SHA384 and SHA512 digest algorithms <*> AES cipher algorithms File systems ---> <*> Second extended fs support
После сборки ядра должны появиться файлы
gentoo linux # ls -la /boot/ итого 7319 drwxr-xr-x 4 root root 1024 Сен 7 13:44 . drwxr-xr-x 21 root root 4096 Сен 7 10:12 .. -rw-r--r-- 1 root root 1676834 Сен 7 16:19 initramfs-genkernel-x86_64-2.6.38-gentoo-r6 -rw-r--r-- 1 root root 3656720 Сен 7 16:19 kernel-genkernel-x86_64-2.6.38-gentoo-r6 -rw-r--r-- 1 root root 2107782 Сен 7 16:19 System.map-genkernel-x86_64-2.6.38-gentoo-r6
Конфиг текущего ядра genkernel сохранит
/etc/kernels/kernel-config-x86_64-2.6.38-gentoo-r6
и будет использовать его по умолчанию, поэтому в дальнейшем достаточно команды
genkernel --menuconfig all
GRUB
По прежнему находимся в окружении новой системы
Установка
emerge sys-boot/grub -av
Установка загрузчика на sdb (это hd1)
grub >root (hd1,0) >setup (hd1) >quit
Посмотрим UUID
gentoo linux # blkid /dev/sdb1: UUID="3ba6aaa8-c58b-48d7-a8eb-9a3062bf7514" TYPE="ext2" /dev/sdb2: UUID="4bce9506-2067-4642-878a-f13a36077179" TYPE="swap" /dev/sdb3: UUID="66482f3a-d8e4-47a0-8385-6b0a1ca9aefb" TYPE="crypto_LUKS" # crypt_root /dev/mapper/root: UUID="24222a99-f949-4e6c-9c9e-b1c73f1bf794" TYPE="ext3" # real_root
Настройка
/boot/grub/menu.lst
title Gentoo Linux 2.6.38-r6 root (hd1,0) kernel /boot/kernel-genkernel-x86_64-2.6.38-gentoo-r6 crypt_root=UUID="66482f3a-d8e4-47a0-8385-6b0a1ca9aefb" real_root=UUID="24222a99-f949-4e6c-9c9e-b1c73f1bf794" root=/dev/ram0 initrd /boot/initramfs-genkernel-x86_64-2.6.38-gentoo-r6 # Или так #title Gentoo Linux 2.6.38-r6 #root (hd1,0) #kernel /boot/kernel-genkernel-x86_64-2.6.38-gentoo-r6 crypt_root=/dev/sdb3 real_root=/dev/mapper/root root=/dev/ram0 udev #initrd /boot/initramfs-genkernel-x86_64-2.6.38-gentoo-r6
- Now, you use crypt_root=/dev/blah instead of real_root=luks:/dev/blah.
</blockquote>
FSTAB
По прежнему находимся в окружении новой системы
Внесем изменения
/etc/fstab
... # /boot = /dev/sdb1 UUID="3ba6aaa8-c58b-48d7-a8eb-9a3062bf7514" /boot ext2 noauto,noatime 1 2 # / = /dev/mapper/root UUID="24222a99-f949-4e6c-9c9e-b1c73f1bf794" / ext3 noatime 0 1 # swap = /dev/sdb2 UUID="4bce9506-2067-4642-878a-f13a36077179" none swap sw 0 0
Завершение
Выход из виртуального окружения
exit
Размонтирование
cd / umount /tmp/root/dev/ umount /tmp/root/proc/ umount /tmp/root/boot/ umount /tmp/root/
Перезагрузка
reboot
Не забыть в BIOS выбрать загрузку с диска sdb.
Ничего не загрузилось с первого раза - это нормально. Посмотрите внимательно сообщения, логи, что-то где-то пропустили.
Обсуждение
Привет. Спасибо за простую статью, все предельно ясно. Один вопрос остался, кто задает вопрос при загрузке "Enter passphrase for …", ядро или cryptsetup? Если cryptsetup, то он находится же на зашифрованном разделе? (Я в исходниках ядра поиском не нашел "Enter passphrase for"). Не подскажите?
Привет, вместе с ядром лежит образ initramfs, там все необходимое - скрипты, утилита
При сборке берется из /usr/share/initramfs-tools/ (хотя это в Ubuntu, нет сейчас генты под рукой, что бы точно посмотреть)
Вообщем гуглите initramfs, этот момент вы пропустили