Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 7: Безопасность

Оригинал: "Ubuntu Hacks: Chapter 7 - Security"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Совет # 70: Используйте файловую систему с шифрованием для защиты ваших данных

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

Есть несколько методов создания файловых систем с шифрованием, основанных, как правило, на применении псевдоустройства loopback некоторого вида и среднего слоя с шифрованием. К числу популярных методов относится использование модулей cryptloop и loop-aes, но совсем недавняя разработка - модуль с названием dm-crypt имеет ряд интересных преимуществ, так что мы в данном совете воспользуемся последним модулем. Он работает быстрее, чем cryptloop, его проще использовать, чем loop-aes, и, поскольку он основан на новой функции ядра 2.6, называемой device-mapper, этот модуль может работать с самыми разнообразными блочными устройствами даже при использовании RAID или LVM. Функция device-mapper предлагает универсальный и гибкий способ добавления дополнительных виртуальных слоев над уже существующими блочными устройствами. Это позволяет разработчикам создавать специальные обработчики, предназначенные для зеркалирования, получения снимков состояния данных, их объединения и шифрования. Что касается средств работы с файловой системой, то они работают с реальным блочным устройством, а любые специальные функциональные возможности скрыты благодаря функции device-mapper.

В модуле dm-crypt задействована функция device-mapper, которая использует Crypto API ядра для реализации прозрачного шифрования. Этот подход имеет обратную совместимость с дисковым форматом, используемым в cryptloop.

Настройка ядра

Модуль dm-crypt для выполнения фактического шифрования использует crypto API ядра. Стандартное ядро Dapper загружает криптографические шифры в виде модулей, и в этом совете будет использоваться 256-битное шифрование AES, так что убедитесь, что в вашем ядре есть поддержка AES:

$ cat /proc/crypto
Подсказка. 256-битное шифрование AES является исключительно сильным алгоритмом шифрования, который был одобрен NSA (National Security Agency — Американским национальным агентством безопасности) для защиты секретной информации до уровня TOP SECRET (СОВЕРШЕННО СЕКРЕТНО). Это самый высокий уровень безопасности, касающийся защиты информации, потеря которой, если она разглашается, ведет к исключительно серьезному ущербу американской национальной безопасности.

Если у вас есть поддержка AES, то будут выданы данные следующего вида:

name         : aes
module       : aes
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32

Если модуль не загружен, вы можете с помощью modprobe загрузить его принудительно:

$ sudo modprobe aes

Пакет cryptsetup должен загружать, когда потребуется, этот модуль автоматически, но полезно знать, как проверить, что модуль загружен и, если это необходимо, загрузить модуль вручную.

Установите пакет dmsetup, в котором есть все инструментальные средства, необходимые для использования функции device-mapper:

$ sudo apt-get install dmsetup cryptsetup

Убедитесь, что пакет dmsetup создал устройство device mapper:

$ ls -l /dev/mapper/control

Загрузите модуль ядра dm-crypt:

$ sudo modprobe dm-crypt

Когда загружается модуль dm-crypt, он автоматически сам регистрируется и регистрирует функцию device-mapper, так что после этого проверьте, что модуль распознал функцию device-mapper и добавил функцию crypt:

$ sudo dmsetup targets

Если все идет по плану, вы увидите crypt в выходных данных:

crypt            v1.1.0
striped          v1.0.2
linear           v1.0.1
error            v1.0.1

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

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

Есть два варианта создания файловой системы, которая будет смонтирована как устройство с шифрованием: создать образ диска в виде файла и смонтировать его как псевдоустройство loopback, либо использовать фактически существующее поблочное устройство (например, /dev/hda3). В обоих случаях эта процедура практически идентична, за исключением лишь некоторой дополнительной подготовки, требуемой для создания и привязки псевдоустройства loopback.

Создание образа псовдоустройства loopback disk

Если у вас нет реального устройства, такого как флэш-карта или дополнительный раздел диска, которое можно зашифровать, вы можете вместо этого воспользоваться утилитой dd для того, чтобы создать образ пустого диска и смонтировать его как псевдоустройство loopback. В нашем примере мы назовем его secret.img и сделаем его размером в 100 Мб. Если вы захотите сделать его другого размера, просто измените значение count:

$ dd if=/dev/zero of=~/secret.img bs=1M count=100

Чтобы связать образ диска с псеводустройством loopback, воспользуйтесь командой losetup:

$ sudo losetup /dev/loop/0 ~/secret.img

Теперь у вас на /dev/loop/0 будет виртуальное поблочное устройство, к которому вы можете обращаться точно также, как и к любым другим устройствам с поблочным доступом.

Настройка устройства блочного ввода/вывода

Теперь вы можете настроить либо реально существующее блочное устройство (например, /dev/sda1), либо виртуальное блочное устройство, например, образ псевдоустройства loopback, которое было создано на предыдущем шаге, а затем с помощью функции device-mapper подключить его как логический том с шифрованием. Сначала с помощью cryptsetup создайте логический том (предположим, с названием mysecrets) и свяжите с ним устройство поблочного ввода/вывода:

$ sudo cryptsetup -y create mysecrets /dev/DEVICENAME

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

$ sudo cryptsetup -y create mysecrets /dev/loop/0

В любом случае, вам будет предложено ввести фразу-пароль (passphrase) для логического тома, а флаг -y указывает утилите cryptsetup запросить подтверждение фразы-пароля, что делается путем ее повторного ввода. Очень важно набрать фразу-пароль правильно, т.к. в противном случае вы сами заблокируете доступ к своим данным!

Затем вы можете удостовериться, что логический том был создан:

$ sudo dmsetup ls

Вы должны в списке увидеть логический том, хотя номера устройств major и minor могут быть другими:

mysecrets (254, 0)

Функция device-mapper монтирует эти виртуальные устройства в /dev/mapper, так что у вас теперь должно быть виртуальное блочное устройство /dev/mapper/mysecrets, которое ведет себя точно так же, как любое другое блочное устройство, но только для него прозрачно выполняется шифрование.

Так же, как на реальном блочном устройстве, вы можете на нем создать файловую систему:

$ sudo mkfs.ext3 /dev/mapper/mysecrets

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

$ sudo mkdir /mnt/mysecrets
$ sudo mount /dev/mapper/mysecrets /mnt/mysecrets

Теперь вы должны видеть его как смонтированное устройство точно также, как и любые другие устройства:

$ df -h /mnt/mysecrets
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/mysecrets    97M  4.1M   88M   5% /mnt/mysecrets

Теперь у вас есть смонтированная файловая система, которая ведет себя так же, как любая другая файловая система, но для любых данных, которые вы записываете на /mnt/mysecrets/, будет автоматически выполняться шифрование перед записью их на диск и все, что вы считываете с этого устройства, будет на лету расшифровываться.

Размонтирование

Размонтирование файловой системы с шифрованием выполняется обычным образом:

$ sudo umount /mnt/mysecrets

Даже после того, как вы размонтируете блочное устройство, он все еще будет сконфигурировано dm-crypt как виртуальное устройство. Вы можете убедиться в этом, снова выполнив команду sudo dmsetup ls и увидев, что устройство все еще указано в списке. Поскольку dm-crypt кэширует фразу-пароль, любой другой пользователь, использующий этот компьютер, теперь может перемонтировать устройство без необходимости указывать фразу-пароль. Чтобы предотвратить эту возможность, устройство после его размонтирования нужно явно удалить из dm-crypt:

$ sudo cryptsetup remove mysecrets

После этого, его действительно не будет и для его перемонтирования потребуется повторный ввод фразы-пароля.

Вы можете упростить этот процесс с помощью создания крошечного скрипта, который будет размонтировать и удалять устройство:

#!/bin/sh
umount /mnt/mysecrets
cryptsetup remove mysecrets

Перемонтирование

Поскольку вам, вероятно, захочется монтировать устройство с шифрованием точно также, как это делается в обычных случаях, вы можете облегчить себе работу, если добавите в /etc/fstab следующую строку:

/dev/mapper/mysecrets /mnt/mysecrets ext3 noauto,noatime 0 0

Вы также можете создать скрипт, который позаботится о создании устройства dm-crypt и смонтирует для вас том (замените /dev/DEVICENAME на имя фактически существующего устройства или на путь к файлу):

#!/bin/sh
cryptsetup create mysecrets /dev/DEVICENAME
mount /dev/mapper/mysecrets /mnt/mysecrets

Если вы используете псевдоустройство loopback, вы можете создать скрипт, который будет подключать ваше устройство:

#!/bin/sh
losetup /dev/loop/0 ~/secret.img
cryptsetup create mysecrets /dev/loop/0
mount /dev/mapper/mysecrets /mnt/mysecrets
Подсказка. Если вы получите сообщение "ioctl: LOOP_SET_FD: Device or resource busy" (" ioctl: LOOP_SET_FD: Устройство или ресурс занят"), то это, скорее всего, означает, что псевдоустройство loop device все еще монтируется. Вы можете удалить устройство с помощью команды sudo losetup -d /dev/loop/0.

Совет по поводу совета

Вы даже можете зашифровать весь ваш домашний директорий, если настроите подсистему PAM (Pluggable Authentication Modules — подключаемые модули аутентификации) так, чтобы он монтировался, когда вы входите в систему. Модуль libpam-mount позволяет PAM автоматически монтировать любые устройства, когда пользователь входит в систему, поэтому установите этот модуль, а также установите пакет openssl:

$ sudo apt-get install libpam-mount openssl

Отредактируйте файл /etc/pam.d/common-auth и добавьте в конце файла следующую строку:

auth    optional        pam_mount.so use_first_pass

Затем отредактируйте файл /etc/pam.d/common-session, добавив в конце файла следующую строку:

session optional        pam_mount.so

Вам следует настроить модуль PAM так, чтобы было известно какой и где монтировать том. В нашем примере имя пользователя - jon и вы используете устройство /dev/sda1, так что добавьте в файл /etc/security/pam_mount.conf свое имя пользователя и устройство:

volume jon crypt - /dev/sda1 /home/jon cipher=aes aes-256-ecb /home/jon.key
Подсказка. Если вы хотите использовать образ диска, вы должны указать здесь псевдоустройство loop device (например, /dev/loop/0) и должны быть уверены, что система запустит команду losetup прежде, чем jon получит возможность войти в систему (например, вы можете поместить в файл /etc/rc.local строку losetup /dev/loop/0 /home/secret.img).

Т.к. том с шифрованием, модулю PAM для того, чтобы его смонтировать, необходим доступ к ключу. Последний аргумент указывает модулю PAM брать ключ из файла /home/jon.key, так что создайте файл с ключом, зашифровав вашу фразу-пароль с помощью OpenSSL:

$ sudo sh -c "echo 
               ''
               
                  YOUR PASSPHRASE
               
               '' 
               | openssl aes-256-ecb > 
               
                  /home/jon.key"

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

Однако, заметьте, что на предыдущем шаге ваш пароль будет сохранен в обычном текстовом виде в вашем файле .history, так что прежде, чем продолжить работать, удалите вашу историю (с помощью команды history -c), или, по крайней мере, отредактируйте этот файл так, чтобы из него удалить ваш пароль.

Другой подход, который позволит избежать хранения фразы-пароля в зашифрованном ключевом файле, состоит в создании вашей файловой системы с шифрованием с точно таким же паролем, который вы используете для входа в систему. Тогда модуль PAM при аутентификации сможет просто передать ваш пароль в dm-crypt, а не извлекать его из ключевого файла. В этой ситуации вы можете использовать в файле /etc/security/pam_mount.conf следующую строку:

volume jon crypt - /dev/sda1 /home/jon cipher=aes - -

Наконец, для того, чтобы быть уверенным, что когда вы выходите из системы, ваш домашний директорий с шифрованием размонтирован, отредактируйте файл /etc/login.defs и убедитесь, что для параметра CLOSE_SESSIONS в нем задано следующее значение:

CLOSE_SESSIONS yes

Назад Оглавление Вперед