Шифрование дисков в FreeBSD
Для достижения нашей цели мы будем использовать GEOM класс доступный с FreeBSD версии 6.0 — GELI. Из достоинств:
- Использование инфраструктуры crypto(9): при наличии аппаратной криптографической поддержки, geli автоматически использует ее.
- Поддержка разнообразных криптоалгоритмов.
- Поддержка шифрованного корневого раздела.
- Поддержка двух независимых ключей шифрования (например, »основного ключа» и »ключа компании»).
- Высокая скорость работы geli за счет простого криптования сектор-сектор.
- Поддержка криптования файловых систем случайным одноразовым ключом — например, для разделов подкачки или временных файловых систем.
Приступим. Собираем ядро со следующими опциями:
options GEOM_ELI device crypto
Если не хотим собирать ядро — подгружем модулем и добавляем в /boot/loader.conf
# kldload geom_eli # echo "geom_eli_load=\"YES\"" >> /boot/loader.conf
Отмонтируем будущий крипто-раздел, НЕ забыв сбэкапить все данные, ибо нам прийдется их уничтожить.
# umount /dev/ad4s1g umount: unmount of /dev/ad4s1g failed: Device busy
Если видим такое, используем флаг -f. Далее нам необходмио сгенерировать ключ, которым будет подписан раздел. Делаем просто:
# dd if=/dev/random of=/usr/local/etc/keys/my.key bs=1 count=256 # chmod 600 /usr/local/etc/keys/my.key
Этим действием мы создали ключ длинной 256 bit.
Дальше инициализируем раздел и подписываем ключом:
-I 256 — используем ключ длинной 256 bit
-P — шифруем раздел без пароля. Если убрать эту опцию будет запрошен пароль при каждой попытке монтирования. Советую не использовать пароль, если вы шифруете системные диски, которые монтируются при загрузке.
-K — путь к ключу
/dev/ad4s1g — путь к девайсу
# geli init -P -l 256 -s 4096 -K /usr/local/etc/keys/my.key /dev/ad4s1g
Мы только что инициализировали шифрованый раздел и подписали его нашим ключом. Напомню, что по умолчанию GELI использует алгоритм шифрования AES, если вам по каким-либо причинам нужно использовать другой алгоритм, это можно сделать добавив опцию -e. Включена поддержка алгоритмов AES, Blowfish, Camellia, а также морально и технически устаревшего 3DES.
Присоединяем раздел:
# geli attach -p -k /etc/geli/server.key /dev/ad4s1g
После этого мы должны увидеть наш криптованый девайс:
# ls -l /dev/ad4s1g* crw-r----- 1 root operator 0, 90 2 фев 20:50 /dev/ad4s1g crw-r----- 1 root operator 0, 139 2 фев 20:50 /dev/ad4s1g.eli
Девайс имеет приставку .eli и любые обращения к этому девайсу будут пропущены через криптомашину и осядут в /dev/ad4s1g уже в шифрованном виде.
Следующий шаг может быть пропущен, но если мы подходим к защите наших данных серьезно, мы обязаны его выполнить. Сейчас мы будем заполнять поверхность диска случайными данными. Обьясню для чего это нужно. Во-первых, — после того, как мы инициализировали шифрованый девайс, новые данные на него будут писаться уже в шифрованном виде, однако те данные, которые были на нем ранее еще можно вытащить. Во-вторых, — эту процедуру необходимо проделать, даже если вы шифруете новенький винт/флешку etc. Если кто-то захочет посмотреть на кол-во данных на винчестере — он увидит под зявязку забытый веник. Процедура может занять достаточно большое кол-во времени, по сему, запускаем и идем пить чай или спать:
# dd if=/dev/random of=/dev/ad4s1g.eli bs=1M
Как известно уилита DD не славится своей информативностью во время выполнения заданий. Для исправления ситуации предлагаю следующий workaround:
# killall -INFO dd
После этой команды dd единоразово выдаст в стдаут немного информации.
После этого, мы наконец-то можем создать новую ФС и примонтировать девайс:
# newfs /dev/ad4s1g.eli # mkdir /cryptFS # mount /dev/ad4s1g.eli /cryptFS
Поздравляю. Девайс готов к использованию. Для отмонтирования выполняем последовательно:
# umount /dev/ad4s1g.eli # geli detach /dev/ad4s1g.eli
На последок, по доброй традиции оптимизируем процесс сетапа, монтирования и размонтирования разделов, путем стругания очередного скрипта. Листинг я приводить не буду, ибо скрип получился не маленький (150 строк), но обьясню ключевые моменты. Качаем скрипт и делаем его исполняемым:
# fetch http://myjournal.org.ua/wp-content/uploads/2010/02/crypt.sh # chmod +x crypt.sh
Дальше редактируем в скрипте переменные:
mount_path — папка для монтирования
key — созданный нами ранее ключ (можем закоментировать эту опцию, тогда при монтировании или сетапе вас об этом спросят)
chowner - этому овнеру будет разрешено писать в крипто-папку
device - путь к девайсу (без приставки .eli)
Также вы можете закоментировать вообще все переменные, тогда скрипт будет каждый раз вас спрашивать, а овнером будет назначен root:wheel. Сделаем ссылку на скрипт и попытаемся смонтировать и отмонтировать диск:
# ln -s /path/to/crypt.sh /bin/crypt # crypt -m *** Mount /dev/ad4s1g *** Device mount to folder /storage/samba/home/Encryption # crypt -u *** Umount /dev/ad4s1g # crypt -u *** Device /dev/ad4s1g already umount. Use /bin/crypt -m for mount.
Также, если лень инициализировать, форматировать и создавать ключи руками, коментим все переменные и запускаем:
# crypt -s Enter full path to device [/dev/ad4s1g]: /dev/ad4s1g Enter full path to key or type create for new key: /storage/samba/home/keys/berezhinskiy.key +---------------------------------------+ | WARNING!!! | | This operation will destroy all data | | on selected slice | +---------------------------------------+ *** Device: /dev/ad4s1g Confirm this action [yes|no]: yes *** Starting encrypt device /dev/ad4s1g *** Umount /dev/ad4s1g *** Signature device key *** Creating newfs from /dev/ad4s1g Do you want to mount the disk now? [yes|no]: yes Path for mount encryption device [/home/crypt]: /storage/samba/home/Encryption *** Mount /dev/ad4s1g *** Device mount to folder /storage/samba/home/Encryption
Вот и все. В следующей статье на эту тему я расскажу о том, как зашифровать все системные разделы и грузить ключ с usb flash, а может быть и бутиться мы будем тоже с флешки :)
Рубрики: bash, FreeBSD, Security · Теги: AES, encryption, geli, geom_eli

25 августа 2011 в 14:15
· Ссылка
спс за статейку
работает
тока скрипт ниасилил
6 ноября 2011 в 20:18
· Ссылка
> # geli init -P -l 256 -s 4096 -K /usr/local/etc/keys/my.key /dev/ad4s1g
> Присоединяем раздел:
> # geli attach -p -k /etc/geli/server.key /dev/ad0s1f
Инициализируем один раздел, а присоеденяем другой. Магия :)
17 ноября 2011 в 20:09
· Ссылка
Спасибо, поправил.