Автор данного труда рассказывает о методах шифрования разделов диска, которые использует сам.
В данном руководстве используется Linux dm-crypt
(device-mapper) на ядре 2.6. Шифровать будем раздел /dev/sdc1
, это может быть любой раздел, диск, USB или файл, созданный losetup
. Здесь мы будем использовать /dev/loop0
. Смотрите file image partition. Device mapper использует метку для идентификации раздела, в данном примере sdc1
, но это может быть любая другая строка.
LUKS с dm-crypt очень удобен для шифрования разделов диска, он позволяет иметь несколько паролей для одного раздела а так-же с легкостью менять их. Что-бы проверить доступно-ли у вас использование LUKS, наберите: # cryptsetup --help
, если насчет LUKS ничего не появилось, воспользуйтесь этим, Without LUKS. Для начала создайте раздел, если необходимо fdisk /dev/sdc
.
Как создать зашифрованный раздел
# dd if=/dev/urandom of=/dev/sdc1 # Опционально. Только для параноиков # cryptsetup -y luksFormat /dev/sdc1 # Это уничтожит все данные на sdc1 # cryptsetup luksOpen /dev/sdc1 sdc1 # mkfs.ext3 /dev/mapper/sdc1 # Создать файловую систему ext3 # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt # cryptsetup luksClose sdc1 # Отсоединить зашифрованный раздел
Присоединить
# cryptsetup luksOpen /dev/sdc1 sdc1 # mount -t ext3 /dev/mapper/sdc1 /mnt
Отсоединить
# umount /mnt # cryptsetup luksClose sdc1
# cryptsetup -y create sdc1 /dev/sdc1 # Или любой другой раздел, типа /dev/loop0 # dmsetup ls # Проверить, покажет: sdc1 (254, 0) # mkfs.ext3 /dev/mapper/sdc1 # Только если делается впервые! # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt/ # cryptsetup remove sdc1 # Отсоединить зашифрованный раздел
Делайте тоже самое, (без создания fs), что-бы переподключить раздел. При вводе некорректного пароля команда mount не будет выполнена. В таком случае просто удалите отображение sdc1 (cryptsetup remove sdc1
) и создайте поновой.
gbde
и geli
. Geli
более быстрый т.к использует аппаратное ускорение. Смотрите FreeBSD handbook Chapter 18.6 для более подробного описания. Для работы, geli
должен быть загружен как модуль ядра, или встроен в него на стадии компиляции.
options GEOM_ELI device crypto # Или загрузить в качестве модуля: # echo 'geom_eli_load="YES"' >> /boot/loader.conf # Или kldload geom_eli
/root/ad1.key
. "Master key" хранится вутри раздела и невидим. Следующий пример типичен для USB или файлового образа.
I use those settings for a typical disk encryption, it uses a passphrase AND a key to encrypt the master key. That is you need both the password and the generated key /root/ad1.key
to attach the partition. The master key is stored inside the partition and is not visible. See below for typical USB or file based image.
# dd if=/dev/random of=/root/ad1.key bs=64 count=1 # Этот ключ шифрует Master key # geli init -s 4096 -K /root/ad1.key /dev/ad1 # -s 8192 и OK для дисков # geli attach -k /root/ad1.key /dev/ad1 # DO создает бэкап /root/ad1.key # dd if=/dev/random of=/dev/ad1.eli bs=1m # Опционально и занимает много времени # newfs /dev/ad1.eli # Создать файловую систему # mount /dev/ad1.eli /mnt # Монтирование шифрованного раздела
Attach
# geli attach -k /root/ad1.key /dev/ad1
# fsck -ny -t ffs /dev/ad1.eli # Если есть сомнения, проверьте ФС
# mount /dev/ad1.eli /mnt
Detach
Процедура размонтирования производится автоматически при выключении.
# umount /mnt # geli detach /dev/ad1.eli
/etc/fstab
Монтирование шифрованного раздела можно сконфигурировать через /etc/fstab. Пароль будет запрошен при загрузке.# grep geli /etc/rc.conf geli_devices="ad1" geli_ad1_flags="-k /root/ad1.key" # grep geli /etc/fstab /dev/ad1.eli /home/private ufs rw 0 0
/cryptedfile
.
# dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # Создаем 1Гб файл # mdconfig -at vnode -f /cryptedfile # geli init /dev/md0 # Зашифровать только по паролю # geli attach /dev/md0 # newfs -U -m 0 /dev/md0.eli # mount /dev/md0.eli /mnt # umount /dev/md0.eli # geli detach md0.eliТеперь этот образ можно примонтировать на другую машину, просто введя пароль.
# mdconfig -at vnode -f /cryptedfile # geli attach /dev/md0 # mount /dev/md0.eli /mnt