Решил поэкспериментировать с шифрованием разделов в gentoo. Т.к. не нашлось готовых мануалов, по которым бы всё сразу завелось пришлось долго гуглить и ходить по граблям. В посте будет полное описание данного процесса. Нет, не неуклюжего хождения по граблям, а готового решения, которое сработало на моём ноутбуке.
Поехали. Имеем машину с не размеченным винчестером, livecd с ubuntu-13.1.
Разметка разделов:
Я обычно размечаю в следующей конфигурации (для винчестера ~160 Гб):
sda1 - 64 Мб - /boot
sda2 - 50 Гб - /
sda3 - 110 Гб - /home
Получаем 3 не отформатированных раздела. Корень и домашняя директория будут зашифрованы, поэтому выполняем (не забывая вводить `YES' заглавными буквами):
Данные устройства отобразятся в `/dev/mapper'. Теперь создадим файловые системы:
Работа с разделами закончена. Теперь нужно поставить саму систему. Для начала скачаем слепки:
Теперь все действия будут производиться внутри новой системы. Установим и настроим ядро:
Помимо конфигурации для наших железок необходимо также включить следующие модули, позволяющие работать с шифрованными разделами:
Теперь сгенерим `initramfs', т.к. без него загрузка будет невозможной:
Я не люблю собирать ядро genkernel'ом (травма детства), поэтому будем использовать его только для создания initramfs:
Установим и настроим grub:
В этом файле пропишем наше ядро:
Теперь пропишем шифрованные разделы в конфигах dmcrypt и поставим его запуск при загрузке:
Настроим 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
И последний штрих - не забудем установить пароли и создать пользователей:
После этих несложных действий мне удалось загрузиться в систему, два раза во время загрузки она спросила меня пароль от разделов, после чего удалось успешно в неё залогиниться.
Источники (те, к которым обращался чаще всего):
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
Поехали. Имеем машину с не размеченным винчестером, 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Добавим dmcrypt на стадию загрузки:
source='/dev/sda2'
target=home
source='/dev/sda3'
# 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
Спасибо
ОтветитьУдалитьБиг спс
ОтветитьУдалитьВсем пожалуйста, рад что кому-то понадобилось
ОтветитьУдалитьПривет.
ОтветитьУдалитьСпасибо за статью. Пара маленьких вопросов.
- Какое влияние шифрование на производительность? Есть ли какая-то дополнительная нагрузка на диск или на процессор при шифровании, по сравнении с той ситуацией, когда шифрование не используется?
- Вы написали, что пароль спрашивается два раза - почему два раза? Почему не один? Я правильно понимаю, что в двух словах механизм такой - после того как я ввожу пароль-ключ - он хранится в оперативной памяти и постоянно используется для чтения с диска любых данных?
- И последнее - вы LVM не используете? Если я использую LVM - что мне надо шифровать: физический топ, группу томов или логические тома (root/home и т.п.) по отдельности?
Привет.
Удалить1. Не замерял. Скажу только что использую шифрование для десктоп машин, и на глаз различий нет.
2. Это самый простой вариант настройки, при котором система последовательно монтирует все разделы. Т.е. загрузчик загружает ядро и монтирует шифрованный root раздел - это первый раз когда спрашивается пароль. Далее инициализация монтирует /home - это второй раз когда спрашивается пароль. Сейчас, например я запилил ещё один шифрованный раздел с мотнированием при загрузке - у меня в третий раз спрашивается пароль :)
Вообще я где-то натыкался на рецепты как заставить систему сохранять информацию о введённом пароле и применять её к последующим монтированиям, но особой надобности в этом не испытывал.
3. Нет, LVM не использую, тут скорей всего не смогу помочь. Но в интернете вроде как рецепты есть.