понедельник, 18 ноября 2013 г.

Установка Gentoo на шифрованный раздел

Решил поэкспериментировать с шифрованием разделов в gentoo. Т.к. не нашлось готовых мануалов, по которым бы всё сразу завелось пришлось долго гуглить и ходить по граблям. В посте будет полное описание данного процесса. Нет, не неуклюжего хождения по граблям, а готового решения, которое сработало на моём ноутбуке.
Поехали. Имеем машину с не размеченным винчестером, livecd с ubuntu-13.1.

Разметка разделов:

# sudo su
# # далее размечаем раздел любым удобным способом. Например так:
# fdisk /dev/sda


Я обычно размечаю в следующей конфигурации (для винчестера ~160 Гб):
sda1 - 64 Мб - /boot
sda2 - 50 Гб - /
sda3 - 110 Гб - /home

Получаем 3 не отформатированных раздела. Корень и домашняя директория будут зашифрованы, поэтому выполняем (не забывая вводить `YES' заглавными буквами):

# cryptsetup luksFormat /dev/sda2
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
 

# cryptsetup luksFormat /dev/sda3
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:


# # успешность операции можно проверить этой командой:
# cryptsetup luksDump -v /dev/sda3

 
# # подготовили для использования dmcrypt-ом.
# # теперь подключим их:


# cryptsetup luksOpen /dev/sda2 root

# cryptsetup luksOpen /dev/sda3 home

Данные устройства отобразятся в `/dev/mapper'. Теперь создадим файловые системы:

# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/mapper/root

# mkfs.ext4 /dev/mapper/home

Работа с разделами закончена. Теперь нужно поставить саму систему. Для начала скачаем слепки:

$ # я обычно качаю с яндекса, но тут кому как удобней:
$ wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2
$ wget http://mirror.yandex.ru/gentoo-distfiles/releases/x86/current-stage3/stage3-i686-20131029.tar.bz2


# # примонтируем корень:
# mkdir gentoo
# mount /dev/mapper/root gentoo/
# cd gentoo/


# # распакуем слепок:
# tar -xjpvf /home/ubuntu/Downloads/stage3-i686-20131029.tar.bz2
# cd usr/
# tar -xjpvf /home/ubuntu/Downloads/portage-latest.tar.bz2
# cd ../


# # примонтируем всё остальное:
# mount /dev/sda1 boot/
# mount /dev/mapper/home home/


# # это нужно для работы интернета внутри gentoo
# cp /etc/resolv.conf ../gentoo/etc/


# # подключаем процессы и устройства
# mount -t proc proc ./proc
# mount --rbind /sys ./sys
# mount --make-rslave ./sys
# mount --rbind /dev ./dev
# mount --make-rslave ./dev

# # переходим в новое окружение
# chroot . /bin/bash
# env-update && source /etc/profile


Теперь все действия будут производиться внутри новой системы. Установим и настроим ядро:

# # синхронизируемся с актуальными версиями пакетов
# emerge --sync


# # качаем ядро
# USE="symlink" emerge gentoo-sources


# # теперь будем устанавливать нужные модули
# cd /usr/src/linux
# make menuconfig


Помимо конфигурации для наших железок необходимо также включить следующие модули, позволяющие работать с шифрованными разделами:
General setup  --->
  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers  --->
  Generic Driver Options  --->
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
  [*] Multiple devices driver support (RAID and LVM)  --->
    <*>   Device mapper support
    <M>     Crypt target support
  [*] Block devices  --->
    <*>   Loopback device support
    <*>     Cryptoloop Support
-*- Cryptographic API  --->
  <M>   SHA224 and SHA256 digest algorithm
  <M>   SHA384 and SHA512 digest algorithms
# # собираем ядро:
# make -j3 && make modules_install -j3
# cp arch/x86/boot/bzImage /boot/gentoo-3.10.17


Теперь сгенерим `initramfs', т.к. без него загрузка будет невозможной:

# USE="crypt cryptsetup" emerge genkernel

Я не люблю собирать ядро genkernel'ом (травма детства), поэтому будем использовать его только для создания initramfs:

# genkernel --install --luks initramfs
# mv /boot/initramfs-genkernel-x86-3.10.17-gentoo /boot/initramfs-3.10.17


Установим и настроим grub:

# USE="device-mapper truetype" emerge grub
# echo "GRUB_GFXMODE=1280x720" >> /etc/default/grub
# echo "GRUB_CRYPTODISK_ENABLE=true" >> /etc/default/grub


# # пропишем grub на диске
# grub2-install --modules="configfile linux crypto search_fs_uuid luks" /dev/sda

# # шрифты могли не подцепиться
# cp /usr/share/grub/*pf2 /boot/grub

# vim /etc/grub.d/40_custom


В этом файле пропишем наше ядро:
menuentry "Gentoo-3.10.17" {
set root=(hd0,2)
linux (hd0,1)/gentoo-3.10.17 root=/dev/mapper/root crypt_root=/dev/sda2
initrd (hd0,1)/initramfs-3.10.17
}
И сгенерируем необходимые настройки:

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

Теперь пропишем шифрованные разделы в конфигах dmcrypt и поставим его запуск при загрузке:

# vim /etc/conf.d/dmcrypt
target=root
source='/dev/sda2'

target=home
source='/dev/sda3'
Добавим dmcrypt на стадию загрузки:

# rc-update add dmcrypt boot
 
Настроим fstab

# vim /etc/fstab

/dev/sda1         /boot        ext2        noatime,nodiratime    1 2
/dev/mapper/root  /            ext4        noatime,nodiratime    0 1
/dev/mapper/home  /home        ext4        noatime,nodiratime    0 1
/dev/cdrom        /mnt/cdrom    auto       noauto,ro             0 0

И последний штрих - не забудем установить пароли и создать пользователей:

# passwd
# useradd -m -G users,wheel -s /bin/bash alex
# passwd alex


После этих несложных действий мне удалось загрузиться в систему, два раза во время загрузки она спросила меня пароль от разделов, после чего удалось успешно в неё залогиниться.

Источники (те, к которым обращался чаще всего):

http://gentoo.theserverside.ru/
http://wiki.enchtex.info/howto/gentoo/gentoo_dmcrypt
http://wiki.enchtex.info/howto/gentoo/gentoo_dmcrypt_root
http://wiki.gentoo.org/wiki/Initramfs/HOWTO/ru
http://ru.wikibooks.org/wiki/Grub_2
https://wiki.archlinux.org/index.php/GRUB2_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29
http://wiki.gentoo.org/wiki/GRUB2

5 комментариев:

  1. Всем пожалуйста, рад что кому-то понадобилось

    ОтветитьУдалить
  2. Привет.

    Спасибо за статью. Пара маленьких вопросов.
    - Какое влияние шифрование на производительность? Есть ли какая-то дополнительная нагрузка на диск или на процессор при шифровании, по сравнении с той ситуацией, когда шифрование не используется?
    - Вы написали, что пароль спрашивается два раза - почему два раза? Почему не один? Я правильно понимаю, что в двух словах механизм такой - после того как я ввожу пароль-ключ - он хранится в оперативной памяти и постоянно используется для чтения с диска любых данных?
    - И последнее - вы LVM не используете? Если я использую LVM - что мне надо шифровать: физический топ, группу томов или логические тома (root/home и т.п.) по отдельности?

    ОтветитьУдалить
    Ответы
    1. Привет.

      1. Не замерял. Скажу только что использую шифрование для десктоп машин, и на глаз различий нет.

      2. Это самый простой вариант настройки, при котором система последовательно монтирует все разделы. Т.е. загрузчик загружает ядро и монтирует шифрованный root раздел - это первый раз когда спрашивается пароль. Далее инициализация монтирует /home - это второй раз когда спрашивается пароль. Сейчас, например я запилил ещё один шифрованный раздел с мотнированием при загрузке - у меня в третий раз спрашивается пароль :)
      Вообще я где-то натыкался на рецепты как заставить систему сохранять информацию о введённом пароле и применять её к последующим монтированиям, но особой надобности в этом не испытывал.

      3. Нет, LVM не использую, тут скорей всего не смогу помочь. Но в интернете вроде как рецепты есть.

      Удалить