Продвинутый способ шифрования разделов в Linux (2)
2.3 Автоматизация монтирования шифрованных разделов при загрузке
Итак, имеем несколько зашифрованных разделов и флешку с загрузчиком.
Необходимо сделать, чтобы при загрузке шифрованные разделы
монтировались, иначе, если /var зашифрован и его не подмонтировать
вовремя, система может не загрузиться.
Рассмотрим два варианта монтирования зашифрованных разделов:
1) Вариант не безопасный.
Вернемся к примеру:
/var - /dev/hda3
/home - /dev/hda4
Подразумевается что /dev/hda3 и /dev/hda4 зашифрованны алгоритмом blowfish-256.
После загрузчика, как только система дойдет до монтирования разделов,
для того чтобы примонтировать hda3 и hda4, необходимо будет ввести
парольную фразу.
Как правило, фразу с символами различного регистра и длинной более 20
держать в голове не просто, особенно если этих фраз около 7-20. Поэтому
вы должны будете каждый раз вводить ее с листочка, а соответственно
кто-то может узнать вашу фразу "из-за плеча".
2) Вариант безопасный. Монтирование с помощью скомпилированной программы, которая расположена на флешке.
Создадим файл amount.cpp :
Цитата:
#include <iostream>
using namespace std;
int main() {
system("echo '12345678901234567890'|losetup -e blowfish-256 -p0 /dev/loop3 /dev/hda3");
system("mount /dev/loop3 /var");
12345678901234567890 - парольная фраза как для hda3 так и для hda4.
12345678901111111111 - парольная фраза как для hda6 так и для hdb1.
12345678901111111111 - парольная фраза для hdb2.
Скопируем файл amount на флешку, на раздел sda1:
Код:
# cp amount /mount/f1
Теперь добавим в /etc/fstab автомонтирование флешки:
Код:
/dev/sda1 /mount/f1 auto ro 0 0
Теперь создадим еще один файл amount, но с другим содержанием.
Отмонтируем флешку и создадим файл: amount1.cpp
Код:
# umount /mount/f1
Содержание файла amount1.cpp:
Цитата:
#include <iostream>
using namespace std;
int main() {
echo "Hi, i'am bug "
}
Скомпилируем его и получим файл amount, после чего скопируем его в /mount/f1:
Внимание! Здесь /mount/f1 всего лишь папка на винчестере.
Код:
# cp amount /mount/f1
Внимание! Здесь наверное единственно место,
где могут возникнуть трудности. Я опишу изменение конфигурационного
файла только для систем Gentoo и Ubuntu.
Для того чтобы сразу после монтирования всех разделов указанных в
/etc/fstab (соответственно и после монтирования нашей флешки /dev/sda1
в /mount/f1), выполнить программу amount которая находится на флешке, и
тем самым продолжить монтирование зашифрованных разделов:
Для Gentoo:
Отредактируем файл /etc/init.d/localmount:
Цитата:
..........
# Start dm-crypt mappings, if any
start_addon dm-crypt
/mount/f1/amount
}
Просто добавили в конец файла перед закрывающейся скобкой одну строчку.
Для Ubuntu:
Создадим в папке /etc/init.d/ файл mountcrypt
Код:
# nano -w /etc/init.d/mountcrypt
Следующего содержания:
Цитата:
#!/bin/sh
/mount/f1/amount
Сделаем его исполняемым:
Код:
# chmod +x /etc/init.d/mountcrypt
Добавим его в runlevel для выполнения сразу после localmount:
В случае, если мы после загрузчика и начала загрузки ядра извлекаем
флешку, то вместо программы amount, которая находится на флешке и
должна монтировать разделы, выполнится программа amount, которая
находится на жестком диске, и соответственно монтироваться ничего не
будет, появится надпись "Hi, i'am bug ", но система продолжит грузится, в итоге исход будет неудачным.
2.4 Уничтожение загрузчика
Уничтожим загрузчик на /dev/hda:
Код:
# dd if=/dev/urandom of=/dev/hda bs=446 count=512
2.5 Шифрование swap раздела
Для этого необходимо установить пакет loop-aes и в /etc/fstab подредактировать строку swap раздела:
Цель: установить на раздел /dev/sda2 Linux.
Для чего: чтобы восстанавливать постоянно удаляющуюся при выключении таблицу разделов на винчестере.
Себе я разумеется для флешки выбрал Gentoo Linux
Но существует много готовых дистрибутивов для флешек, нам всего лишь
потребуется наличие команды dd и правильное определение жестких дисков.
С этим проблем быть не может.
Если кто-то захочет поставить себе на флешку Gentoo, опишу как это делается.
3.1 Ставим Gentoo Linux на флешку в 1Гб
Потребуется:
Архив со stage, для моей архикектуры это: stage3-i686-2007.0.tar.bz2
Снапшот портежей: portage-20070918.tar.bz2
Исходники ядра: linux-2.6.22.tar.bz2
И разумеется линукс с компилятором, подойдет даже LiveCD.
Скачать все файлы можно с любого из зеркал gentoo, например с http://gentoo.osuosl.org
Скачаем и разместим эти файлы в /mount/opensource_files, где
/mount/opensource_files - папка корневого раздела, либо точка
монтирования одного из разделов, если установка протекает с LiveCD, то
в эту папку необходимо примонтировать раздел жесткого диска:
Код:
# mkdir /mount # mkdir /mount/opensource_files # mount /dev/hda5 /mount/opensource_files
Смонтируем /dev/sda2 в /mount/f2 и начнем установку
Код:
# mkdir /mount/f2 # mount /dev/sda2 /mount/f2 # cd /mount/f2 # tar -xvjpf /mount/opensource_files/2007.0/stage3-i686-2007.0.tar.bz2 # tar -xvjf /mount/opensource_files/portage-20070918.tar.bz2 -C /mount/f2/usr # mkdir /mount/f2/distfiles # mount -o bind /mount/opensource_files /mount/f2/distfiles # mount -o bind /mount/opensource_files /mount/f2/usr/src
Внимание!
# mount -o bind /mount/opensource_files /mount/f2/distfiles
# mount -o bind /mount/opensource_files /mount/f2/usr/src
Эти команды монтируют папку /mount/opensource_files в папки
/mount/f2/distfiles и /mount/f2/usr/src для того, чтобы использовать
место для скачки файлов и дальнейшей распаковки ядра не на флешке, а на
винчестере, иначе объема флешки может не хватить.
Команда emerge -pvf gentoo-sources выдаст нам ссылки на нужные файлы,
т.к. ядро уже скачено, останется скачать несколько патчей, скачаем их
самостоятельно и скопируем в /mount/opensource_files.
Необходимо сконфигурировать и собрать ядро. Для того, чтобы загрузить
линукс с флешки, в ядре должны быть включены следующие опции:
Цитата:
Device Drivers --->
USB support --->
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<*> USB Mass Storage support
Device Drivers --->
Block devices --->
<*> Low Performance USB Block driver
По желанию можно сделать ядро монолитным, т.е. все опции соберутся непосредственно в ядро, модулей не будет:
Просто отключим следующее:
Цитата:
Loadable module support --->
[ ] Enable loadable module support
В случае, если ядро монолитное, далее выполняем:
Код:
# make # cp ./arch/i386/boot/bzImage /boot
Если не монолитное (с поддержкой модулей) то выполняем:
Код:
# make && make modules_install # cp ./arch/i386/boot/bzImage /boot
/dev/uba2 - именно так в ядре определяется наш второй раздел на флешке.
Теперь установим пароль root и выйдем из chroot среды:
Код:
# passwd New UNIX password: BAD PASSWORD: it does not contain enough DIFFERENT characters Retype new UNIX password: passwd: пароль успешно обновлён # exit
Изменим конфиг grub, который находится на /dev/sda1
Добавим в конец следующие строки:
Цитата:
title Linux From Flash
root (hd0,1)
kernel (hd0,1)/boot/bzImage root=/dev/uba2 init=/sbin/init video=vesafb:1024x768
На этом установка Gentoo Linux на флешку завершена. За всеми
подробностями, а также за послеустановочной настройкой, если вам это
потребуется, обращайтесь Gentoo Handbook
Добавим его в runlevel для выполнения при выключении:
Код:
# ln -s /etc/init.d/destroy /etc/rc6.d/K03destroy
Т.е. при выключении первые 512 байт будут забиваться рандомом. И
соответственно таблица разделов от 446 до 512 байт тоже. Определить где
начинается какой раздел, да еще если половина из них зашифрована, будет
практически невозможно. И всегда с гордостью можно заявить, что
винчестер не рабочий, он был отфортирован, были удалены разделы...
Правда вот загрузка несколько усложняется, сначала необходимо загрузить с флешки линукс, и выполнить:
Код:
# dd if=/image_hda of=/dev/hda # reboot
А после грузить с флешки основную систему.
Отмонтируем все разделы с которыми работали:
Код:
# mount /mount/opensource_files /mount/f2/distfiles # mount /mount/opensource_files /mount/f2/usr/src # umount /dev/sda1 # umount /dev/sda2
В случае, если какой-то из разделов откажется отмонтироваться, вычисляем процесс которым он занят, и убиваем его:
Код:
# fuser -u -m /dev/sda1 # kill PID
На этом все.
p.s. Заранее извиняюсь за ошибки, неточности, очепятки. За потерю
данных, при выполнении действий описанных в этой статье,
ответственности не несу.