Создание шифрованного тома при помощи DM-Crypt на сервере Ubuntu

Безопасность является главной проблемой для любого вида данных, хранящихся на компьютере с выходом в интернет. Каждый провайдер и SSP должен позаботиться о защите данных. Однако несанкционированный доступ к данным может быть получен при помощи программных недостатков сервисов на сервере клиента, социотехники и многими другими способами. Потому следует шифровать все конфиденциальные данные, которые не должны попасть в чужие руки.

Системы Linux предоставляют несколько способов шифрования данных, среди которых шифрование отдельных разделов, устройств или файловых систем. Однако то не всегда подходит в случае с VPS. Тем не менее, есть и другие варианты; например, можно создать файл, который будет работать в качестве устройства для хранения зашифрованных данных.

Данное руководство покажет, как использовать инструмент dm-crypt для создания шифрованного файла для хранения конфиденциальных данных.

Примечание: Руководство выполнено на Ubuntu 12.04, но подойдёт и для других дистрибутивов.

Основы dm-crypt

dm-crypt – это механизм шифрования на уровне ядра, предназначенный для прозрачного шифрования диска. Это означает, что файлы будут доступны сразу, без дополнительного взаимодействия после монтирования.

Большинство схем шифрования основывается на шифровании разделов, но это можно обойти при помощи файла, смонтированного в качестве устройства для хранения данных. Для этого нужно смонтировать файл в качестве устройства обратной связи.

Выбирая тот или иной тип шифрования, нужно тщательно взвесить все плюсы и минусы. Прежде всего, шифрование всегда влечёт за собой снижение производительности. Оно может быть и совсем незначительным, однако для начала рекомендуется создать небольшой тестовый файл.

Ещё один проблемный момент – восстановление. Шифрование в силу своей основной функции затрудняет восстановление данных. Так, если вы забыли свой пароль – ваши данные утеряны навсегда; если LUKS-заголовок перезаписан или поврежден, данные опять же утеряны навсегда. Если, к примеру, система не загружается, а вам необходим доступ к зашифрованному файлу, вам придется пройти через более сложный процесс авторизации.

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

Примечание: Подробнее о резервном копировании dm-crypt можно прочитать здесь.

Установка dm-crypt

Как правило, функциональность dm-crypt на уровне ядра доступна по умолчанию, а инструменты фронт-энда нужно установить самостоятельно.

Примечание: Все команды в этом руководстве нужно выполнять как root.

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

apt-get update
apt-get install cryptsetup

Эта команда загрузит всё необходимое для создания тома dm-crypt.

Создание неразреженного файла

Для хранения зашифрованных данных нужно создать файл, который будет выступать в качестве специального устройства.

Для этого нужно создать пустой файл; этот файл должен быть неразреженным.

Проще всего это сделать при помощи команды fallocate. Эта команда сразу выделяет заданное дисковое пространство и присваивает ему указанное имя файла. Например, чтобы создать файл в 512MB в домашнем каталоге пользователя root, нужно ввести:

fallocate -l 512M /root/test1

Этот способ очень быстрый, но у него есть недостаток: он не перезаписывает старые или удаленные данные, которые были использованы ранее.

Можно также использовать команду dd. Она позволяет вписывать нули для всей области, выделенной для зашифрованного файла, с помощью псевдо-устройства /dev/zero. Чтобы создать такой файл, нужно ввести:

dd if=/dev/zero of=/root/test2 bs=1M count=512

Если вместо этого вы хотите ввести случайные данные, имитирующие хранящиеся здесь зашифрованные данные, используйте псевдо-устройство urandom. Это займет гораздо больше времени, особенно если нужно выделить большой файл; однако использование urandom – вероятно, лучший способ создания такого файла:

dd if=/dev/urandom of=/root/test3 bs=1M count=512

Раздел LUKS

Прежде чем отформатировать подготовленный файл, нужно создать в файле раздел LUKS. LUKS, или Linux Unified Key Setup, является стандартом для шифрования диска. Это основной уровень, на который буду опираться все остальные настройки.

Инструменты dm-crypt позволяют очень быстро создать этот уровень.

cryptsetup -y luksFormat /root/test1

Подтвердите переопределение содержимого файла. Проверьте название файла, чтобы случайно не перезаписать другой файл. Затем введите YES, чтобы продолжить.

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

Внимание! Если вы потеряете этот пароль, то все данные, сохранённые в зашифрованной файловой системе, будут потеряны. Используйте опцию –y, которая позволяет подтвердить пароль, чтобы убедиться, что в нём не допущено никаких ошибок.

Проверьте содержимое файла, который теперь является зашифрованным файлом LUKS.

file /root/test1
test1: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 1851db36-3223-4ee1-8e3e-cc65c49e05f3

Теперь можно развернуть контейнер; для этого существует следующий синтаксис:

cryptsetup luksOpen /path/to/LUKS/file mapping_name

В данном случае команда будет выглядеть так:

cryptsetup luksOpen /root/test1 volume1

Введите пароль данного файла.

Это откроет устройство LUKS (в данном случае – dev/mapper/volume1), то есть локальное устройство обратной связи, которое будет восприниматься остальной системой как реальное устройство.

Создание и монтирование файловой системы

Итак, теперь контейнер LUKS подготовлен и запущен как эмулятор реального устройства.

Для начала на этом устройстве нужно создать файловую систему. Выберите любую файловую систему; в данном руководстве используется стандартная система Ext4.

В данном случае создать файловую систему можно при помощи команды:

mkfs.ext4 -j /dev/mapper/volume1

Теперь в контейнере LUKS создана файловая система. Поскольку контейнер воспринимается системой как устройство, теперь нужно смонтировать его.

Выберите точку монтирования:

mkdir /mnt/files

И просто смонтируйте файловую систему:

mount /dev/mapper/volume1 /mnt/files

Теперь файл является частью файловой системы:

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/vda              59G  2.7G   54G   5% /
udev                 2.0G   12K  2.0G   1% /dev
tmpfs                791M  216K  791M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 2.0G     0  2.0G   0% /run/shm
/dev/mapper/volume1  486M  2.3M  459M   1% /mnt/files

Как видите, некоторое доступное пространство диска было занято шифрованием и файловой системой.

Обратите внимание: данная файловая система обеспечивается, как и любая другая система Ext4:

cd /mnt/files
ls
lost+found

Теперь в системе есть каталог для восстановления lost+found. Любые данные, попадая в этот каталог, будут зашифрованы в файл. Для примера можно скопировать каталог /etc в смонтированную систему:

cp -r /etc/* /mnt/files

Демонтирование системы и отключение контейнера LUKS

После записи или извлечения данных можно демонтировать систему:

cd
umount /mnt/files

После этого том /dev/mapper/volume1 будет отсоединён от точки монтирования /mnt/files:

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  2.7G   54G   5% /
udev            2.0G   12K  2.0G   1% /dev
tmpfs           791M  216K  791M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm

Однако файл всё еще открыт и доступен в системе.

ls /dev/mapper/
control  volume1

Устройство control используется для создания записей устройств; не обращайте на него внимания, так как оно и должно быть здесь.

Чтобы закрыть файл volume1 и защитить его содержимое, нужно удалить запись устройства из файла, после чего содержимое будет недоступно без пароля.

cryptsetup luksClose volume1

Проверьте каталог записей устройств. Файл volume1 не должен отображаться:

ls /dev/mapper
control

Теперь том демонтирован, контейнер LUKS закрыт, а данные полностью зашифрованы и защищены паролем.

Использование DM-Crypt

Чтобы отделить процедуру создания тома от дальнейшего использования, нужно следовать инструкциям данного раздела.

Для начала просто откройте LUKS-файл:

cryptsetup luksOpen /root/test1 volume1

Выберите другое имя файла (не то, что было использовано в первый раз). Введите пароль тома.

После этого нужно смонтировать устройство:

mount /dev/mapper/volume1 /mnt/files

Затем можно получить доступ к контенту файла.

После записи или прочтения данных демонтируйте устройство.

umount /mnt/files

Затем снова закройте файл LUKS, чтобы зашифровать данные:

cryptsetup luksClose volume1

Заключение

Теперь конфиденциальные данные находятся под надёжной защитой шифрования.

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

Tags: , ,

Добавить комментарий