Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Занимательная GEOM’етрия

Евгений Зобнин ака j1m

Хакер, номер #096, стр. 096-116-3


# mdconfig -a -t vnode -f disk.ufs -u 0

# bsdlabel -w md0 auto

# newfs -m 0 -i 1024 md0c

# mount /dev/md0c /mnt

Заполняем виртуальный диск содержимым:

# cp -R ~/documents /mnt

Отключаем образ:

# umount /mnt

# mdconfig -d -u 0

Сжимаем содержимое виртуального диска и вновь подключаем его:

# kldload geom_uzip

# mkuzip disk.ufs

# mdconfig -a -t vnode -f disk.ufs.uzip -u 0

# mount -r /dev/md0.uzip /mnt

Руки прочь от частной собственности

В ядре FreeBSD версии 6.1 можно найти 2 класса, осуществляющих низкоуровневое шифрование дисков. Первый называется gbde (Geom Based Disk Encryption). Он способен шифровать диски или разделы алгоритмом AES с симметричным ключом длиной от 128 бит. Второй, с более запоминающимся и легко произносимым названием geli, более совершенен и универсален. Класс geli может использовать специализированное оборудование для шифрования (в gbde поддержка такого железа неполная), позволяет выбирать алгоритм шифрования (AES, Blowfish или 3DES), использовать 2 независимых ключа и шифровать корневой раздел диска (во время загрузки пользователю будет предложено ввести пароль).

Пример использования класса geom_bde

Инициализация:

# kldload geom_bde

# gbde init ad1

Создаем файловую систему:

# gbde attach ad1

# dd if=/dev/random of=/dev/ad1.bde bs=64k

# newfs /dev/ad1.bde

# gbde detach ad1

Подключаем шифрованный диск:

# gbde attach ad1

# mount /dev/ad1.bde /secret

Класс geli, в отличие от gbde, позволяет создать ключ из нескольких компонентов. В примере, приведенном ниже, мы используем пароль в комбинации с набором из случайных байтов в качестве основы для ключа Blowfish. При необходимости файл можно переместить на USB-флешку и спрятать ее в цветочном горшке.

Пример использования класса geom_eli

Инициализация:

# kldload

# dd if=/dev/random of=~/ad1.key bs=64 count=1

# geli init -s 4096 -K ~/ad1.key -a Blowfish /dev/ad1

Создаем файловую систему:

# geli attach -k ~/ad1.key ad1

# dd if=/dev/random of=/dev/ad1.eli bs=64k

# newfs /dev/ad1.eli

# geli detach ad1.eli

Подключаем шифрованный диск:

# geli attach -k ~/ad1.key /dev/ad1

# mount /dev/ad1.eli /mnt/secret

Интересной особенностью класса geli является также и то, что он способен генерировать специальные одноразовые ключи для шифрования разделов swap или временных файловых систем. Никаких источников для генерации ключа, будь то пароль или файл с беспорядочным набором байтов, при этом не требуется.

# dd if=/dev/random of=/dev/ad0s1b bs=64k

# geli onetime -d -a 3des ad0s1b

# swapon /dev/ad0s1b.eli

Дисковая магия

К сожалению, в рамках одной статьи невозможно описать все возможности GEOM по организации RAID-массивов. Поэтому мы остановимся только на RAID-1, как наиболее популярном и дешевом варианте RAID. За создание томов RAID-1 (зеркал) отвечает класс mirror, управляемый утилитой /sbin/gmirror. Средствами GEOM создать зеркало очень просто, поэтому, не вдаваясь в подробности, рассмотрим пример, который будет актуален в 90% случаев:

Пример использования класса geom_mirror

Создаем зеркало для текущего диска:

Назад на стр. 096-116-2  Содержание  Вперед на стр. 096-116-4