Skip to main content

Шифрование дисков через EFS в Linux

Linux в целом - достаточно защищенная система. При условии сложных паролей и своевременных обновлений (а также - нормального firewall-а) сломать его с целью получения данных достаточно трудно. Однако в случае физического доступа к машине достаточно просто загрузится с другого диска (например, с диска Slax) – и с файловой системой можно делать все, что угодно. Дабы противостоять такой атаке – придумана шифрованая файлсистема. В данной статье пошагово описано создание шифрованой файлсистемы (шифр - AES128) на отдельном разделе диска, авторизация по паролю (keyword). Статья писалась под Xubuntu linux (Debian), хотя в принципе для других версий Linux принципиальных различий не будет.

как это работает?

В отличае от windows (XP/2003) Linux использует ту же файловую систему, что и обычно, но с “промежуточным звеном”. Создание шифрованого раздела идет в два этапа - сначала нужно создать “промежуточное звено” (оно называется CryptoLoop), а затем сквозь эту петлю отформатировать диск. Дальнейшее обращение к диску идет через петлю, которая все по дороге зашифровывает (или наоборот - расшифровывает). Если не создать петлю (для каждого диска она своя, для подключения к петле нужно либо знать пароль - либо иметь сертификат) – данные с диска прочитать не получится, они превратятся в высокоэнтропийную кашу. В данной статье пошагово описано создание шифрованой файлсистемы (шифр - AES128), авторизация по паролю (keyword). Статья писалась под Xubuntu linux (Debian), хотя в принципе для других версий Linux принципиальных различий не будет. ВАЖНО! При создании петли диск надо форматировать, все данные на нем будут потеряны. ОБЯЗАТЕЛЬНО запишите где-нибудь пароль от диска (или сделайте резервную копию сертификата, если используется он). Если вы забудете/посеете ключ - диск уже не расшифруете никогда, AES128 - очень надежный шифровальный стандарт. И данные с него будут потеряны безвозвратно

Начали!

Для начала проверим, есть ли у нас необходимые модули:

/sbin/modinfo /lib/modules/`uname -r`/kernel/crypto/*
filename:       /lib/modules/2.6.20-16-generic/kernel/crypto/aes.ko
license:        Dual BSD/GPL description:    Rijndael (AES) Cipher Algorithm
srcversion:     8CB82B3A254D5A950FD0D14 depends:
vermagic:       2.6.20-16-generic SMP mod_unload 586
filename:       /lib/modules/2.6.20-16-generic/kernel/crypto/anubis.ko
description:    Anubis Cryptographic Algorithm
license:        GPL
srcversion:     F88E14F122B9D232FFF5811
depends:
vermagic:       2.6.20-16-generic SMP mod_unload 586
filename:       /lib/modules/2.6.20-16-generic/kernel/crypto/arc4.ko
author:         Jon Oberheide

Отлично, модули есть. Если у вас их нет – придется пересобирать ядро. Нужны как минимум aes, dm_mod и dm_crypt Теперь указываем, какие модули по умолчанию будут грузится. Делать это надо от рута:

echo aes >> /etc/modules
echo dm_mod >> /etc/modules
echo dm_crypt >> /etc/modules

Перезагружаемся и смотрим:

lsmod |grep aes
aes                    28608  0
lsmod |grep dm_mod
dm_mod                 59084  1 dm_crypt
lsmod |grep dm_crypt
dm_crypt               14856  0

Модули есть, начинаем создавать петлю. В данном примере я создам петлю на диск /dev/sda7. Вам, соответственно, нужно создавать петлю на свой раздел. Помните о том, что после первого же обращения на диск через петлю он становится нечитаемым вне петли. И все, что на нем было - исчезнет. Для начала - отмонтируем диск. Все действия ведем от рута:

umount -f /dev/sda7

Для создания устройства cryptoloop нам нужна специальная утилита под названием cryptsetup устанавливаем:

apt-get install cryptsetup

Теперь создадим спецустройство CryptoLoop:

cryptsetup --verbose --verify-passphrase create cryptohd /dev/sda7

Подробно о том, что тут написано:

  • –verbose – показать процесс создания по возможности подробно
  • –verify-passphrase – использовать пароль (а не ключ или сертификат)
  • create – создать новое криптоустройство. подробнее будет рассказано ниже
  • cryptohd – название криптопетли. Оно может состоять из букв и цифр. Нужно для того, чтобы определить название именно шифрованое имя диска.В пределах одной системы должно быть уникальным.
  • /dev/sda7 – название устройства, на которое будет привязана криптопетля. Данные на нем станут шифроваными.

Выполняем команду и вводим пароль. Именно этот пароль шифрует данные, не потеряйте его!

cryptsetup --verbose --verify-passphrase create cryptohd /dev/sda7
Enter passphrase:
Repeat passphrase:

Замечу, что по хорошей традиции UNIX-мира, ввод пароля никак не отображается. Смотрим, как там наша петля:

cryptsetup status cryptohd
/dev/.static/dev/mapper/cryptohd is active:
cipher:  aes-cbc-plain
keysize: 256 bits
device:  /dev/sda7
offset:  0
sectors   size:    2008062 sectors
mode:    read/write

Отлично, петля есть Форматируем диск:

mkfs.reiserfs /dev/mapper/cryptohd

И монтируем диск:

mount /dev/mapper/cryptohd /cryptohd

Не забудьте создать папку, куда будете монтировать диск:

mkdir /cryptohd

смотрим, что получилось:

mount
/dev/mapper/cryptohd    /cryptohd

Теперь можно обращаться к диску и работать с ним. Отвязывается он, в общем, несложно. Сначала его отмонтируем, а затем – разрушим криптопетлю:

umount -f /dev/mapper/cryptohd
cryptsetup remove cryptohd

смотрим на информацию о петле:

cryptsetup status cryptohd
/dev/mapper/.static/cryptohd is inactive

все, диск уже нечитаем, до момента создания криптопетли он бесполезен:

mount /dev/sda7 mount: filesystem is invalid or not known

Чтобы его прочитать, создаем петлю:

cryptsetup create cryptohd /dev/sda7
Enter passphrase:

И монтируем диск:

mount /dev/mapper/cryptohd /cryptohd

теперь файловая система вновь доступна