Шифрование дисков через 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
теперь файловая система вновь доступна