Шифрование данных при помощи cryptsetup

Написал этот мануал еще в сентябре прошлого года для пользователей BTR.kz, но все забывал запостить ее в блоге.

Подопытная машина: проц Intel Pentium 4 2.8GHz HT, 1024Mb мозгов и IDE хард Seagate Barracuda 80Gb, остальные параметры не существенны.
Система: openSuSE 11.0, ядро 2.6.25.5-1.1-pae

Установка и настройка cryptsetup.
Для начала нужно поставить пакет cryptsetup. Я ставил последнюю стабильную версию из репозитария openSuSE:
cryptsetup-1.0.5_SVNr46-21.1

Проводить всю работу буду в дирректории /home/zigmund/projects/crypt

Итак, поехали…
Для начала нужно подгрузить модуль шифтования:

modprobe dm-crypt

После этого в системе должен появиться как минимум один шифр:

smegan:/home/zigmund/projects/crypt # cat /proc/crypto
name : aes
driver : aes-asm
module : aes_i586
priority : 200
refcnt : 1
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32name : aes
driver : aes-generic
module : aes_generic
priority : 100
refcnt : 1
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

Теперь нужно создать пустой файл нужного размера. Этот файл в дальнейшем будет зашифрованным образом диска. Для этого идеально подходит программа dd.
Задаем в параметрах входной файл(if) /dev/zero, это значит что созданный файл будет забит нулями.
Выходной файл(of) — это путь к создаваемому файлу.
Размер блока(bs) = 1M.
Количество блоков(count) = 5120. Итого получится файл размером в 5Гб. Для экспирементов мне хватит.

dd if=/dev/zero of=/home/zigmund/projects/crypt/cryptofs bs=1M count=5120

Теперь создаем псевдоустройство.

smegan:/home/zigmund/projects/crypt # losetup /dev/loop0 /home/zigmund/projects/crypt/cryptofs

Здесь в параметрах указывается нода псевдоустройства и путь к файлу, который мы создали.
Если вы собираетесь делать несколько зашифрованных разделов, то для каждого нужно использовать разные ноды. В системе несколко нодов, у меня, например, 8:

smegan:/home/zigmund/projects/crypt # ls /dev/loop*
/dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 /dev/loop5 /dev/loop6 /dev/loop7

Создаем шифрованное устройство:

smegan:/home/zigmund/projects/crypt # cryptsetup -c aes -y create cryptofs /dev/loop0

Параметр -с aes указывает на тип шифра. Этот шифр должен быть установлен в системе.
-y — если указан этот параметр, то пароль шифрования будет запрошен 2 раза вместо одного, чтобы случаем не ошибится.
create — команда на создание устройства
cryptofs — название устройства
/dev/loop0 — нода псевдоустройства, на которую мы завязали наш файл.

Если все в порядке, программа спросит у вас 2 раза пароль и создаст шифрованное устройство в /dev/mapper:

smegan:/home/zigmund/projects/crypt # ls -la /dev/mapper/cryptofs
brw------- 1 root root 253, 0 Сен 23 15:13 /dev/mapper/cryptofs

Сейчас у нас есть устройство и выглядит оно как неформатированный раздел диска. Создаем файловую систему:

smegan:/home/zigmund/projects/crypt # mkfs.reiserfs /dev/mapper/cryptofs
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)A pair of credits:
Elena Gryaznova performed testing and benchmarking.

The Defense Advanced Research Projects Agency (DARPA, www.darpa.mil) is the
primary sponsor of Reiser4. DARPA does not endorse this project; it merely
sponsors it.

Guessing about desired format.. Kernel 2.6.25.5-1.1-pae is running.
Format 3.6 with standard journal
Count of blocks on the device: 1310720
Number of blocks consumed by mkreiserfs formatting process: 8251
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 7d609349-bbcb-4b61-841d-3638a99c28d1
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/mapper/cryptofs'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
ReiserFS is successfully created on /dev/mapper/cryptofs.

Вот и все, теперь можно монтировать зашифрованный раздел и сохранять на него важную информацию.

smegan:/home/zigmund/projects/crypt # mkdir /mnt/cryptofs
smegan:/home/zigmund/projects/crypt # mount /dev/mapper/cryptofs /mnt/cryptofs/

Дадим всем пользователям возможность записи на диск:

smegan:/home/zigmund/projects/crypt # chmod 777 /mnt/cryptofs

Чтобы отцепить устройство нужно выполнить следующие команды:

smegan:/home/zigmund/projects/crypt # umount /mnt/cryptofs/
smegan:/home/zigmund/projects/crypt # cryptsetup remove cryptofs
smegan:/home/zigmund/projects/crypt # losetup -d /dev/loop0

Чтобы опять подцепить:

smegan:/home/zigmund/projects/crypt # losetup /dev/loop0 /home/zigmund/projects/crypt/cryptofs
smegan:/home/zigmund/projects/crypt # cryptsetup -c aes create cryptofs /dev/loop0
smegan:/home/zigmund/projects/crypt # mount /dev/mapper/cryptofs /mnt/cryptofs/

Чтобы каждый раз не вводить все эти команды, ставим пакет Xdialog (у меня версия Xdialog-2.3.1-0.pm.2) и создаем 2 файла в /usr/sbin/
Файл crypton:

#!/bin/bash

pass=`Xdialog --stdout --title "Шифрованный диск" --passwordbox "Введите пароль шифрования." 8 30`
retval=$?
case $retval in
0)
losetup /dev/loop0 /home/zigmund/projects/crypt/cryptofs
echo $pass | cryptsetup -c aes create cryptofs /dev/loop0
mount /dev/mapper/cryptofs /mnt/cryptofs/
if [ $? -ne 0 ]
then
Xdialog --title "Шифрованный диск" --msgbox "Во время подключения диск произошла ошибка.\n\nВозможно что скрипт запущен не от суперпользователя\nили пароль шифрования неверен." 10 50
cryptsetup remove cryptofs
losetup -d /dev/loop0
fi
;;
*)
echo "Отмена."
;;
esac

Файл cryptoff:

#!/bin/bash

umount /mnt/cryptofs
if [ $? -ne 0 ]
then
Xdialog --title "Шифрованный диск" --msgbox "Во время отключения диск произошла ошибка.\n\nВозможно что скрипт запущен не от суперпользователя\nили устройство занято." 10 50
fi
cryptsetup remove cryptofs
losetup -d /dev/loop0

Теперь чтобы подцепить диск, нужно дать от рута команду crypton, чтобы отцепить — cryptoff.
Если при выполнении cryptsetup указать неправильный пароль или тип шифрования, то подключенное устройство будет выглядеть как каша, и ничего вразумительного с него прочитать не получится.

Источники:
opennet.ru
wikipedia.org
cryptsetup —help
dialog —help

  1. Спасибо за статью. Очень помогла. :)

  2. Да, действительно полезная информация, спасибо!

  3. сейчас проверим

Оставить комментарий


*


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>