Шифрование жесткого диска во FreeBSD с помощью geli

13 сентября 2016

В наше время шифровать нужно все. Перед тем, как залить бэкапы в облако Amazon’а, они должны быть зашифрованы. Ваш домашний каталог в системе должен быть зашифрован на случай кражи ноутбука. Даже базу данных нередко имеет смысл хранить в зашифрованном разделе на случай, если вы не доверяете вашему ДЦ, или допускаете, что кто-то может прийти и забрать из стойки ваш сервер. Сегодня мы рассмотрим одно из возможных решений подобных проблем во FreeBSD.

Немного терминологии с объяснением на пальцах:

  • GEOM — модульный фреймворк во FreeBSD для всего, что связано с хранением данных. Модули GEOM реализуют такой функционал, как зеркалирование, сжатие и шифрование данных. См man geom;
  • GEOM_ELI или geli — как раз один из модулей GEOM для шифрования данных на диске. Стоит отметить, что есть другой аналогичный модуль gbde. В целом geli выглядит круче gbde. В частности, geli позволяет использовать аппаратное ускорение шифрования, если оно доступно, выбирать из множества различных алгоритмов шифрования, а также шифровать корневой раздел системы. См man geli;
  • md — так называемые memory disks, возможность системы использовать файлы на диске в качестве блочных устройств. Несмотря на название, memory disks не обязательно целиком хранятся в памяти. FreeBSD поддерживает множество типов md, и из них только тип malloc полностью живет в памяти. См man md;

Рассмотрим, как с использованием всего этого хозяйства зашифровать домашний каталог пользователя. Далее мы будем хранить зашифрованные данные на memory disk. Очевидно, с нормальными дисками все будет работать по тому же принципу.

Итак, загружаем geli:

sudo kldload geom_eli

Чтобы модуль подгружался автоматически при старте системы, в /boot/loader.conf пишем:

geom_eli_load="YES"

Создаем образ будущего диска:

truncate -s 100G disk.img

Если хотите, чтобы все место под образ было выделано сразу, используйте dd вместо truncate:

dd if=/dev/random of=./disk.img bs=1G count=100

Создаем соответствующее образу устройство /dev/md0:

sudo mdconfig -a -t vnode -f disk.img -u 0
sudo mdconfig -l

Инициализируем шифрованный диск (потребуется ввести пароль):

sudo geli init -e AES-XTS -s 4096 /dev/md0

Тепер цепляем зашифрованный диск (вводим пароль):

sudo geli attach /dev/md0
sudo geli list

Будет создано устройство /dev/md0.eli. Создаем на нем файловую систему:

sudo newfs /dev/md0.eli

Монтируем файловую систему:

sudo mkdir /mnt/disk
sudo mount /dev/md0.eli /mnt/disk
sudo chown eax:eax /mnt/disk
df -h

Готово! Теперь можно работать с каталогом /mnt/disk, как обычно. Все данные будут писаться в зашифрованном виде в файл disk.img.

По окончании работы с диском говорим:

sudo umount /mnt/disk
sudo geli detach md0.eli
sudo mdconfig -d -u 0

Ну вот. Используя описанный подход можно шифровать данные на флешке. Можно делать описанные действия под рутом сразу после загрузки системы, а хомдиру пользователя держать на полностью зашифрованном разделе. Я видел решения для автоматизации этого дела через /etc/rc.conf, но на мой взгляд в этом мало смысла. Все равно требуется наличие пользователя, который введет пароль. Примеры скриптов для монтирования зашифрованного домашнего каталога можно найти здесь.

Несколько финальных штрихов. Во-первых, все, что мы хотим зашифровать, переносим в зашифрованный раздел. Например, чтобы пароли от Wi-Fi точек также лежали на зашифрованном диске, в /etc/rc.conf у меня написано:

# don't initialize network interfaces on boot
# run `sudo service netif onestart` manually
netif_enable="NO"

# ...

wpa_supplicant_conf_file="/home/eax/.config/wpa_supplicant.conf"

Во-вторых, после того, как все секретные данные перенесены на зашифрованный диск, а незашифрованные оригиналы стерты, заполняем свободное место на диске мусором:

cd /root
dd if=/dev/random of=./random.tmp bs=1G count=44
sync
rm random.tmp

И последние несколько замечаний. Во-первых, geli, в отличие от encfs в Linux, не имеет существенных ограничений на длины имен файлов. Во-вторых, geli не поддерживает секретных разделов, как, например, TrueCrypt и его форки.

Дополнение: Также вас может заинтересовать пост Шифрование жесткого диска в Linux при помощи dm-crypt.

Метки: , , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.