Введение
Тема безопасности всегда актуальна. Защита данных от посторонних один из основных ее аспектов. И утверждение "Если у вас паранойя, то это не значит что за вами не следят" имеет смысл.
Нашей целью будет полное шифрованние физического диска штатными средствами FreeBSD. В этом есть огромный плюс – с любого LiveCD невозможно определить содержимое винчестера, скроем само наличие ОС. Загружаться FreeBSD будет с флешки. Шифрование будет безпарольное, то есть на основе ключа. Это спасет от того момента (цитата с одного форума)
Паяльник в ж..., и все пароли вспоминаются :)
Ну, начнем...
ОС FreeBSD 7.1
Вся работа будет разбита на несколько этапов
- подготовка
- шифрование
- установка
- настройка и финиш
Этап первый: подготовка дисков, настройка среды шифрования
Загружаемся С DVD FreeBSD 7.1, в Sysinstall переходим в режим Fixit->CD/DVD
Забиваем диск и флешку мусором (ad4 мой жесткий диск, da0 флешка). Процес долгий, винт размером в 80Гб (на ноутбуке) – больше часа
Fixit# dd if=/dev/random of=/dev/ad4 bs=50m
Fixit# dd if=/dev/random of=/dev/da0 bs=5m
Создаем симлинки и загружаем модуль geom_eli
Fixit# ln -s /dist/lib /lib
Fixit# ln -s /dist/boot/kernel /boot/modules
Fixit# kldload geom_eli
Создаем ключ для шифрования размером 4096 байт, и временно храним его в /boot/keys
Fixit# mkdir /boot/keys
Fixit# dd if=/dev/random of=/boot/keys/ad4.key bs=512 count=8
Создаем точки монтирования загрузочной флешки и винта
Fixit# mkdir /mnt/crypt
Fixit# mkdir /mnt/boot0
Делаем редактором по дефолту ee (вместо vim)
А также указываем место установки ОС
Fixit# export EDITOR=/dist/usr/bin/ee
Fixit# export DESTDIR=/mnt/crypt
Теперь размечаем флеш-носитель (размер 4096Mb), форматируем и монтируем в /mnt/boot0. Новичку с fdisk будет немного сложно разобратся,
но без него никак, советую прочитать www.opennet.ru
Fixit# fdisk -Bi /dev/da0
# На вопрос change the boot code ставим yes
Fixit# bsdlabel -Bw /dev/da0s1
Fixit# bsdlabe -e /dev/da0s1
# таблицу разделов к такому виду
# size offset fstype [fsize bsize bps/cfg]
# a: 8388497 16 4.2BSD 0 0 0
# c: 8388513 0 unused 0 0
Fixit# newfs -O2 -L BOOT0 /dev/da0s1a
Fixit# mount -t ufs -o rw /dev/da0s1a /mnt/boot0
Этап второй: шифрование диска и создание ФС
Geom Eli предоставляет такие алгоритмы шифрования с ключом от 128 до 256 бит (отсортированы по быстродействию)
- blowfish
- 3des
- aes
- camellia
Важно помнить: шифрование замедляет доступ к диску и создает нагрузку на процессор
Скорость падает почти в 2 раза (лично тест проводил на ASP12(ext3) и FreeBSD 7.1 45 MB/s против шифрованого 28 MB/s. В качестве алгоритма выступил Blowfish/192).
У вас могут быть другие показатели, тестируйте и сравнивайте.
Свой выбор остановил на алгоритме Blowfish 192bit. Обьясняю почему (это всего лишь сугубо мое мнение):
- первое, есть ассемблерная реализация для архитектуры i386 ()
- второе, это самый быстрый из представленных алгоритмов
- третье, разработан Брюсом Шнайером (авторитет среди криптологов)
- четвертое, простота реализация позволяет личный аудит кода
- пятое, длина в 192 бит обеспечивает оптимальное соотношение надежность:быстодействие
Советую почитать про Blowfish и Брюса Шнайера
ru.wikipedia.org
www.schneier.com
Вернемся к нашей задаче
Ключом /boot/keys/ad4.key шифруем диск и подключаем его
Fixit# geli init -b -v -P -K /boot/keys/ad4.key -P -e blowfish -l 192 -s 4096
Fixit# geli attach -p -k /boot/keys/ad4.key /dev/ad4
Fixit# ls /dev | grep "ad4"
ad4
ad4.eli
Размечаем шифрованный диск /dev/ad4.eli, создаем ФС, монтируем
Fixit# fdisk -Bi /dev/ad4.eli
# На вопрос change the boot code ставим yes
Fixit# bsdlabel -Bw /dev/ad4.eli
Fixit# bsdlabe -e /dev/ad4.eli
# таблицу разделов к такому виду
# size offset fstype [fsize bsize bps/cfg]
# a: 1024M 16 4.2BSD 0 0 0
# b: 1024M * swap
# c: 167771451 0 unused 0 0
# d: 512M * 4.2BSD 0 0 0
# e: 4096M * 4.2BSD 0 0 0
# f: 16384M * 4.2BSD 0 0 0
# g: * * 4.2BSD 0 0 0
Fixit# newfs -O2 -U -L ROOT /dev/ad4.elia
Fixit# newfs -O2 -U -L TMP /dev/ad4.elid
Fixit# newfs -O2 -U -L VAR /dev/ad4.elie
Fixit# newfs -O2 -U -L USR /dev/ad4.elif
Fixit# newfs -O2 -U -L HOME /dev/ad4.elig
Fixit# mount -t ufs -o rw /dev/ad4.elia /mnt/crypt
Fixit# mkdir /mnt/crypt/var
Fixit# mkdir /mnt/crypt/usr
Fixit# mkdir /mnt/crypt/tmp
Fixit# mount -t ufs -o rw /dev/ad4.elid /mnt/crypt/tmp
Fixit# mount -t ufs -o rw /dev/ad4.elie /mnt/crypt/var
Fixit# mount -t ufs -o rw /dev/ad4.elif /mnt/crypt/usr
Fixit# mkdir /mnt/crypt/usr/home
Fixit# mount -t ufs -o rw /dev/ad4.elig /mnt/crypt/usr/home
Этап третий: установка FreeBSD
Устанавливать FreeBSD будем вручную :)
Переходим в /dist/7.1-RELEASE и устанавливаем. Использовать Sysinstall бессмысленно, он не понимает eli :(
Fixit# cd /dist/7.1-RELEASE
Fixit# ls
base doc kernels proflibs
catpages games manpages src
dict info ports
Fixit# cd base
Fixit# ./install.sh
Fixit# cd ../doc
Fixit# ./install.sh
Fixit# cd ../kernels
Fixit# ./install.sh GENERIC
Fixit# cd ../proflibs
Fixit# ./install.sh
Fixit# cd ../catpages
Fixit# ./install.sh
Fixit# cd ../games
Fixit# ./install.sh
Fixit# cd ../manpages
Fixit# ./install.sh
Fixit# cd ../src
Fixit# ./install.sh all
Fixit# cd ../dic
Fixit# ./install.sh
Fixit# cd ../info
Fixit# ./install.sh
Fixit# cd ../ports
Fixit# ./install.sh
Система установлена на шифрованный диск. Переходим к настройке ОС
Этап четвертый: создание конфигурации
Для начала сделаем доступным ядро
Fixit# cd /mnt/crypt/boot
Fixit# rmdir kernel
Fixit# mv GENERIC kernel
Создадим /mnt/crypt/etc/fstab и приведем его к такому виду:
/dev/ad4.elia / ufs rw 1 1
/dev/ad4.elib none swap sw 0 0
/dev/ad4.elid /tmp ufs rw 2 2
/dev/ad4.elie /var ufs rw 2 2
/dev/ad4.elif /usr ufs rw 2 2
/dev/ad4.elif /usr/home ufs rw 2 2
/dev/ufs/BOOT0 /boot0 ufs rw,noauto 1 1
Создаем папку для монтирования загрузочной флешки
Fixit# mkdir /mnt/crypt/boot0
Копируем /mnt/crypt/boot в /mnt/boot0/boot, /mnt/crypt/etc/fstab в /mnt/boot0/etc/fsatb, /boot/keys в /boot0/boot
Fixit# cp -Rpv /mnt/crypt/boot /mnt/boot0
Fixit# mkdir /mnt/boot0/etc
Fixit# cp -pv /mnt/crypt/etc/fstab /mnt/boot0/etc/
Fixit# cp -Rpv /boot/keys /mnt/boot0/boot
Создаем файл /mnt/boot0/boot/loader.conf и приводим его к такому виду:
autoboot_delay="5"
geom_eli_load="YES"
geli_ad4_keyfile0_load="YES"
geli_ad4_keyfile0_type="ad4:geli_keyfile0"
geli_ad4_keyfile0_name="/boot/keys/ad4.key"
kern.geom.eli.batch="1"
Все, теперь перезагружаемся не забыв отмонтировать все ФС и настраиваем FreeBSD по своему вкусу
Fixit# cd /
Fixit# umount /mnt/boot0
Fixit# umount /mnt/crypt/usr/home
Fixit# umount /mnt/crypt/usr
Fixit# umount /mnt/crypt/tmp
Fixit# umount /mnt/crypt/var
Fixit# umount /mnt/crypt/usr
Fixit# geli detach /dev/ad4.eli
Fixit# shutdown -r now
Заключение
В результате мы добились того, чего хотели. Теперь без флешки винчестер бесполезная железяка. И как говорится в man geli: "Даже очень заинтересованная сторона с достаточными ресурсами не сможет раскодировать данные на жестком диске". А в критической ситуации флешку легко уничтожить.
Совет: по своему горькому опыту скажу – сделайте бекап ключа (к примеру спрятать с помощью steghide в картинку и выложить на бесплатном фотохостинге). Этим вы себя застрахуете от неприятных моментов, связанных с потерей флеш-носителя.
Автор: Андрей Романенко aka Camelium
Источник: prostounix.in.ua