[[Шифрование корневого раздела dm-crypt на Getnoo]]

Gentoo

Шифрование корневого раздела 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
Переход в окружение новой системы
env-update && source /etc/profile

Настройки ядра будут немного отличаться:

  1. Все модули должны быть включены в само ядро
  2. Для возможности загрузиться, необходим образ 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

genkernel >=3.4.4

  • Now, you use crypt_root=/dev/blah instead of real_root=luks:/dev/blah.

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.

Ничего не загрузилось с первого раза - это нормально. Посмотрите внимательно сообщения, логи, что-то где-то пропустили.



Обсуждение

Сергей, 2015/02/12 14:06

Привет. Спасибо за простую статью, все предельно ясно. Один вопрос остался, кто задает вопрос при загрузке "Enter passphrase for …", ядро или cryptsetup? Если cryptsetup, то он находится же на зашифрованном разделе? (Я в исходниках ядра поиском не нашел "Enter passphrase for"). Не подскажите? :-)

Aleksey, 2015/02/12 14:20

Привет, вместе с ядром лежит образ initramfs, там все необходимое - скрипты, утилита

При сборке берется из /usr/share/initramfs-tools/ (хотя это в Ubuntu, нет сейчас генты под рукой, что бы точно посмотреть)

Вообщем гуглите initramfs, этот момент вы пропустили

Ваш комментарий. Вики-синтаксис разрешён:
29 -11 = ?
 
howto/gentoo/gentoo_dmcrypt_root.txt · Последние изменения: 2012/06/03 21:52 (внешнее изменение)
Gentoo Linux Driven by DokuWiki