Шифрование дисков в FreeBSD

Для достижения нашей цели мы будем использовать GEOM класс доступный с FreeBSD версии 6.0 — 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, а может быть и бутиться мы будем тоже с флешки :)

Опубликовано 03.02.2010 в 16:23 · Автор Berezhinskiy · Ссылка
Рубрики: bash, FreeBSD, Security · Теги: , , ,

3 комментария

Подписаться на комментарии по RSS

  1. Написал(-а) zl_
    25 августа 2011 в 14:15
    Ответить · Ссылка

    спс за статейку
    работает
    тока скрипт ниасилил

  2. Написал(-а) Человек_Разумный
    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

    Инициализируем один раздел, а присоеденяем другой. Магия :)

Подписаться на комментарии по RSS

Написать комментарий