В наше время шифровать нужно все. Перед тем, как залить бэкапы в облако 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 .

EnglishRussianUkrainian