Шифрование корневого раздела

(перенаправлено с «Encrypted Root File System»)
Перейти к: навигация, поиск
Susemini.png
Version:
10.3+
Эта информация верна для openSUSE 10.3 и более новых версий. Для версии 10.2 и более ранних, пожалуйста, читайте Encrypted Root File System with SUSE HOWTO 10.2 (англ.)
Dialog-ok-apply.png Эта процедура проверена на openSUSE 11.1,11.2,11.3
В openSUSE 11.1, это всё ещё ручной (но не такой сложный) процесс. Тем не менее, сейчас обсуждается в openFATE см. #305633: Поддержка установки с зашифрованной корневой файловой системой.
Если вы хотите использовать LVM, то уже сейчас возможно с помощью установщика openSUSE установить непосредственно на зашифрованный кореневой раздел, как описано здесь Людвигом Насселом. Важно - это не будет работать без LVM.

Содержание

Введение и мотивация

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

Для борьбы с потенциально опасными последствиями кражи ноутбуков можно отказаться от использования ноутбуков вообще, можно использовать специальное аппаратные устройства шифрования или использовать программное обеспечение для шифрования данных [1] [2] [3] [4] [26] [28]. Последний подход наиболее привлекателен, поскольку программное решение является более гибким, чем аппаратный подход и с современными процессорами большинство пользователей не заметят потери производительности связанных с процессами шифрования/дешифрования на лету [19] [20] [21].

Зачем шифровать корневой раздел?

На первый взгляд, Вы склонны шифровать только наиболее важные файлы, или, возможно, всего пользовательского раздела (/home), содержащего конфиденциальные данные. Если это так, то Вам лучше воспользоваться простой процедурой шифрования, которую поддерживает инсталлятор openSUSE [5] (шаг разметка диска, прим. переводчика), а также другого программного обеспечения, которое, в некоторых случаях, даже не требует прав суперпользователя [6] [23]. Однако, при таком подходе, существует проблема утечки шифрованных данных из зашифрованной области через другие области, такие как файл подкачки (swap), временные файлы (/tmp) и файлы логов (/var). Кроме того, редакторы и другие программы, используемые для работы с данными, могут создавать файлы подкачки в других местах. Наконец, метаданные относящиеся к файлу, например, его размер, разрешение, время последнего доступа и т.д. в современной журналируемой файловой системе будут храниться в отдельном разделе, что только усугубит проблему. В общем-то, это нелегко, полностью избавиться от утечек из раздела пользователя в корневой раздел (если это вообще возможно).

Чтобы понять, насколько велика эта проблема, предположим, что компания установила в веб-сервер в интранет для обеспечения доступа к конфиденциальной информации компании. Если работник просматривает документ, файл с этого веб-сервера, в Firefox с помощью плагина OpenOffice, то полный файл хранится в /tmp и остается там, пока его не сотрут. Таким образом, хотя, вероятно, только части конфиденциального документа попадают в файл подкачки, весь документ может быть доступен в каталоге временных файлов /tmp.

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

Единственным недостатком шифрования корневой раздела файловой системы является то, что в настоящее время не поддерживается инсталлятором openSUSE во время процедуры установки. В интернете есть несколько статей, в которых обсуждают различные процедуры для шифрования корневого раздела файловой системы для других дистрибутивов Linux [8] [9]. К сожалению, эти инструкции не в полном объеме применимы для openSUSE. Для дальнейшей проверки, это не удивительно, так как работа с зашифрованным корневым разделом системы требует вмешательства в процесс загрузки, а это одна из областей, в которой различные дистрибутивы конкурируют друг с другом на рынке.

Основная задача этого Руководства в том, чтобы дать инструкции по установке openSUSE с созданием зашифрованного корневого раздела. Поступая так данное Руководство опирается на предыдущие работы из других дистрибутивов [8] [9] и пытается указать на минимальное количество изменений в процесс установки openSUSE и процесс загрузки, с тем чтобы создать простую процедуру для openSUSE. (Хотя это предназначено для использования на openSUSE, некоторые вариации этих процедур могут работать на других дистрибутивах Linux, но пока ещё не были проверены на чём-либо ещё).


Предварительные мероприятия

Необходимые приготовления

  • Дистрибутив openSUSE 10.3 (или новее)
  • Компьютер удовлетворяющий системным требованиям openSUSE 10.3 (или, соответствующему, новому дистрибутиву)

Методика

В openSUSE процедура установки не поддерживает шифрование корневого раздела файловой системы, в следствие чего лучшим подходом было бы использовать LiveCD для запуска Linux, а затем создание зашифрованного корневого раздела на жестком диске. Но не у всех есть под рукой LiveCD и выполнение процедуры с помощью него займёт больше времени, чем с процедурой, описанной здесь. (Альтернативой создания LiveCD может служить создание загрузочного USB-брелока, с последующим запуском с него Linux, и созданием шифрованного корневого раздела диска). Наконец, наш прагматичный подход заключается в создании двух разделов, с последующей установкой openSUSE на один раздел и шифрованием других, а затем переносе openSUSE из первого раздела на второй [9].

Примечание С момента выхода openSUSE 10.3 среди вариантов дистрибутива появилась возможность получения LiveCD.

Методология процесса следующая:

  1. Установите openSUSE, выделив один раздел под временное размещение корневого раздела (root).
  2. Убедитесь, что у Вас есть все инструменты для продолжения процедуры.
  3. Создайте шифрованный кэш раздел (swap).
  4. Создайте шифрованный раздел на одном из оставшихся разделов.
  5. Скопируйте файлы корневого раздела на новый зашифрованный раздел.
  6. Создайте новый диск в оперативной памяти для начальной инициализации (initrd) для правильной загрузки системы.
  7. Протестируйте систему чтобы убедиться в работоспособности процедуры загрузки с нового раздела.
  8. Сотрите оригинальный корневой раздел и замените его следующим шифрованным разделом для размещения пользовательской файловой системы (/home).

LINUXLAPTOP: Для openSUSE 11.1 установленную на внешний USB-диск, перечень команд перечислен в конце статьи.


Установка openSUSE

Как правило на ноутбуке, который является персональным компьютером пользователя достаточно использовать простую схему разбиения дисков, т.е. один раздел для файла подкачки, один корневой раздел “/” и один раздел для файловой системы пользователя “/home”. Как правило, самым большим разделом должен быть “/home”, однако, в связи с ограничениями процесса установки,изначально корневой раздел будет устанавливаться в раздел, в последующем используемый под пользовательскую файловую систему (как правило самый большой раздел), а затем скопировать на зашифрованный раздел.

Каждый из этих трех разделов будут зашифрован, поэтому для загрузки системы, нам потребуется дополнительной небольшой, незашифрованный раздел, содержащий загрузочные файлы. Этот раздел будет подключён как “/boot”. Есть два варианта создания загрузочного раздела: разместить на том же диске, что и другие разделы или на внешнем носителе, таком как USB-флеш диск (USB-брелок).(См. #FAQ для использования других вариантов).

Для создания правильной разметки диска необходимо войти в режим экспертной разметки в процессе установки системы.

Для загрузочного раздела зарезервируйте 130Мб или больше если будет использоваться несколько ядер системы (в последнее время драйверы системы лучше всего устанавливать вручную, что, в свою очередь требует установки пакетов kernel-syms, которые тянут ощутимое количество кода размещаемого в загрузочный раздел, необходимого для ручной компиляции драйверов, автор рекомендовал 40Мб, что на текущий момент явно недостаточно). (256Мб, возможно, достаточно безопасный выбор для резерва и на большинстве современных ноутбуков свободного места останется достаточно). Для этого раздела необходимо задать точку монтирования “/boot”.

Для тех, кто использует USB-флэш диск, подключите его к компьютеру до загрузки компьютера с установочного DVD в дисководе. Следует признать, что в openSUSE USB-флешка отображается в списке дисков в меню "Экспертной разметке" вместе с другими дисками компьютера. USB-флеш диск должен быть отформатирован с использованием файловой системы Linux (ext2 будет достаточно) и он должен быть подключён как “/boot”. Кроме того, в пункте "fstab" установите флажок "Не монтировать при старте системы". Это необходимо потому, что USB устройства монтируются после boot.localfs скрипт же попытается смонтировать позиции перечисленные в fstab. (Вы всегда можете подключить USB-флеш диск позже, если вам это понадобится).

Сведём наши рассуждения в таблицу:

устройство точка монтирования примечания
/dev/sda1 /boot
/dev/sda2 swap Станет шифрованным разделом кэша swap.
/dev/sda3 /home Станет шифрованным корневым разделом root.
/dev/sda4 / Станет шифрованным пользовательским разделом home.

(Как отмечалось ранее, идея заключается в установке корневого раздела на sda4, а затем создании шифрованного раздела файловой системы на sda3 и копировании корневой раздела системы из sda4 на sda4 и, в конце, создании нового зашифрованного раздела на sda4 для пользовательского раздела файловой системы).

В менеджере пакетов убедитесь, что пакет “cryptsetup” выбран и будет установлен.

Завешите установку и войдите в систему с правами суперпользователя (root). (Не входите под обычным пользователем, так как точка монтирования для пользовательского раздела будет изменена).

На этом этапе нужно выбрать программное обеспечение для шифрования. Есть несколько вариантов для Linux, такие, как: “cryptsetup” [10], “loop-aes” [2] и “truecrypt” [3]. Это Руководство рассматривает процедуру использования cryptsetup, как наиболее простой пакет для использования [1] [4] [8] [22][28].(Для менеджеров системы, основным преимуществом использования LUKS-системы заключается в возможности настройки нескольких паролей для шифрования одного раздела. Это помогает в восстановлении зашифрованных данных, когда пользователи забывают свои пароли).


Необходимые приготовления

В openSUSE 10.3, mkinitrd работает "из коробки", если исправим ошибку в сценарии /lib/mkinitrd/scripts/setup-luks.sh.

В этой строке,

luks_blockdev="$luks_blockdev $lucksbd"

Нужно заменить “$lucksbd” на “$luksbd” (обратите внимание на букву “c”). После этого всё будет работать отлично.

Примечание: эта проблема решена начиная с mkinitrd-2.1-36.2. Так что альтернативой является простое обновление пакета.

Предостережение: по состоянию на 02/02/2008 b mkinitrd-2.1-36.4, есть ещё одна проблема, которая не позволяет использовать в Linux программные RAID разделы для размещения на них шифрованных LUKS-разделов, смотри https://bugzilla.novell.com/show_bug.cgi?id=358341. Проблему легко решить, применив патч /lib/mkinitrd/scripts/setup-luks.sh прикреплённый в теме с отчётом на Bugzilla, но имейте ввиду что обновление пакета mkinitrd перезапишет любые сделанные изменения и после обновления ядра Ваша система больше не загрузится (проблема полностью снята начиная с openSUSE 11.2, прим.перев.).

Верхушка айсберга: по состоянию на 05/12/2008 и mkinitrd-2.1-36.5 зашифрованные luks разделы не распознавались автоматически mkinitrd. Путь решения: открыть /lib/mkinitrd/scripts/setup-storage.sh и добавить разделы в переменные blockdev последними строчками скрипта, т.е.:

blockdev="$(resolve_device Root $rootdev) $(resolve_device Resume $resumedev) $(resolve_device Journal $journaldev) $(resolve_device Dump $dumpdev) /dev/mapper/home /dev/mapper/swap"

(на протестированных системах подобной проблемы не замечено, прим.перев)

Ноутбук с Linux: аналогичное аналогичное действие необходимо для шифрования openSUSE 11.1 на ноутбуке при установке на внешний накопитель USB (см. [30])(переводчик не подтверждает подобную информацию)


Создание зашифрованного раздела для файла подкачки

Чтобы понять принцип работы программного обеспечения для шифрования, попрактикуемся на шифровании раздел файла подкачки. (Если что-то пойдет не так легко восстановить).

Одним из преимуществ использования LUKS-систем [10] [28] является то, что она не использует полученный пароль непосредственно для шифрования, а использует случайно сгенерируемый ключ, по-умолчанию 128 бит, и этот ключ зашифровывает с использованием прилагаемого пароля (наряду со случайно сгенерированными помехами). По этой причине, безопасно и удобно использовать тот же пароль для защиты главного ключа каждого отдельного раздела. (Альтернатива, использования различных паролей для каждого раздела очень неудобна, и не приносит ожидаемых результатов в области повышения безопасности). Поэтому, прежде чем начать, необходимо выбрать хороший пароль, который застраховал бы от атаки по словарю и сделал это невозможным, так же сделал невозможным его подбор (brute force).

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

modprobe dm-mod
modprobe dm-crypt
modprobe aes
modprobe sha256
modprobe sha1

[Обрати особое внимание - начиная с openSUSE 11.1 вынужден использовать `modprobe sha256_generic; modprobe sha1_generic`.] Первый модуль - модуль устройства разметки, второе - устройство шифрования модуля разметки, третья - шифр по-умолчанию, четвертый - алгоритм хэширования по-умолчанию и пятый - LUKS-хэш спецификация по-умолчанию.

Выключите существующий файл подкачки:

swapoff /dev/sda2

Заполните раздел файла подкачки случайными данными. (Процесс занимает несколько минут, пакет включён в LiveCD, но при обычной установке его нужно помечать для установки отдельно).

dd_rescue /dev/urandom /dev/sda2

Инициализируйте шифрованние устройства раздела файла подкачки используя команду:

cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/sda2

Первое что эта команда запросит - пароль, а затем создаст новый зашифрованный раздел при помощи шифрования AES, в CBC-essiv режиме (страница руководства не даёт чёткого ответа по-поводу настроек по-умолчанию для ESSIV). Эти настройки по-умолчанию рекомендуют Национальный Институт стандартов и технологий (НИСТ)(США) [11] и Агентсво Национальной Безопасности(АНБ)(США) [12] [13] (необходимо добавить, что и АНБ, и НИСТ одобрили данный пакет программного обеспечения), как и другие эксперты.

Важное замечание: Если вы получаете ошибку “Command failed”, сначала убедитесь, что прочитали инструкцию очень внимательно, и следуйте ей в вопросе касающегося подтверждения. (У автора присутствует чувство юмора. Хотя он об этом ранее не писал, он подразумевает, что перед запросом пароля Вы ответили “YES” без кавычек, всё слово, заглавными буквами, прим.переводчика).

Для просмотра информации о заголовках LUKS-разделов используется:

cryptsetup -v luksDump /dev/sda2

Теперь откроем зашифрованный раздел:

cryptsetup -v luksOpen /dev/sda2 swap

Это создаст новое размеченное устройство в /dev/mapper/ названное swap. Для использования устройства как файла подкачки разметьте его как раздел для файла подкачки и включите файл подкачки назад.

mkswap /dev/mapper/swap
swapon /dev/mapper/swap

Если использовать команду “free” можно убедиться, что новый файл подкачки функционирует.

Устройство разметки представляет собой тонкий слой программного обеспечения отвечающий за все операции ввода/вывода лежащие в основе устройства. В этом случае его работа заключается в выполнении шифрования данных и расшифровки.


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

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

Отключите /home, чтобы подготовить новый корневой раздел файловой системы.

umount /dev/sda3

Заполнение дисков случайными данными

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

Есть несколько разных вариантов того, как раздел может быть заполнен случайными данными. Эта процедура защищает зашифрованные разделы от полного криптоанализа, если диски когда-либо будут потеряны, украдены или будет совершена попытка взлома. Некоторые варианты лучше, чем другие, поэтому времени затрачивается больше или меньше в зависимости от используемого оборудования. Методы доступные в настоящее время: полу-случайных /dev/urandom, шифрование /dev/zero и метод чистки/уничтожения (shred/wipe).

Метод 1: /dev/urandom

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

Метод 2: шифрование /dev/zero

Самый быстрий метод для первоначального заполнения (например, 2Мб) диска с /dev/urandom:

dd_rescue -m 2M /dev/urandom /dev/sda3

затем запустить luksFormat и luksOpen (см. ниже). Теперь вы можете заполнить расшифровать логический диск (/dev/mapper/my_encrypted_partition) из /dev/zero

dd_rescue /dev/zero /dev/mapper/my_encrypted_partition

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

На 64-битном Dell M4400, этот метод записывал примерно 50Мб/сек, в то время как чтение из /dev/urandom примерно 7Мб/сек. Повышение скорости более чем в семь раз, хотя это потенциально понижает безопасность от атак высокопроизводительных систем. (То есть, атаки криптографического суперкомпьютера на ключ диска, хотя и это не вопрос, если вы планируете использовать как минимум 40 символов пароля для диска LUKS наряду с использованием /dev/urandom.)

Метод 3: перезапись/стирание (shred/wipe)

Метод самый медленный, но, возможно, более безопасный. Название: "shred - перезапись файла, чтобы скрыть его содержимое и опционально удалить его" Описание: "Повторно заменить указанные ФАЙЛ(ы), с тем чтобы затруднить восстановление данных даже с применением очень продвинутого оборудования".

Метод перезаписи/стирания может сделать много перезаписей (или проходов) на диске в зависимости от того, какие параметры заданы, хотя продолжает получать данные из /dev/urandom (с параметрами по-умолчанию, но это может быть изменено). Ещё полезна опция -v, которая в режиме реального времени показывает ход заполнения диска и/или разделов. С другой стороны, использование стандартных вариантов dd_rescue упоминающихся в этом Руководстве является более быстрыми методами, чем вышеупомянутый метод перезаписи.

Действия

Начнем заполнять /dev/sda3 случайными данными используя метод 1 (в зависимости от объёма разделов и скорости процессора, это может занять от десятков минут до несколько часов). На Intel Core2Duo E8400 это занимает от 3 до 3,5 часов, чтобы записать 60Гб данных жёсткий диск SATAIII.

dd_rescue /dev/urandom /dev/sda3

После выполнения команды dd_rescue, необходимо создать устройство для отображения корневого раздел; следуя той же процедуре, что и для файла подкачки. (Не забудьте использовать и тот же пароль единого входа).

cryptsetup -v -с serpent-cbc-essiv:sha256 -s 256 luksFormat /dev/sda3

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

cryptsetup luksDump /dev/sda3

Теперь откроем зашифрованный раздел:

cryptsetup luksOpen /dev/sda3 root

Как и раньше, была создана запись в /dev/mapper/, но на этот раз имя root.

Снова необходимо создать файловую систему на новом устройстве. (ext3 является файловой системой по-умолчанию для openSUSE 10.3, но при этом нужно использовать ту же файловую систему используется, что изначально использовалась при установке)(не совсем верно, т.к. позже можно будет настроить на любую поддерживаемую ядром, прим. перев.)

mkfs.xfs -b size=512 /dev/mapper/root

Перенос корневого раздела на новый зашифрованный раздел

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

mkdir /mnt/root
mount /dev/mapper/root /mnt/root

Есть много методов для копирования файлов, но один из лучших rsync, только он сохраняет все атрибуты, включая ACLs/Xattrs, редкие режимы и индикаторы выполнения. Обратите внимание, что нет никакой необходимости, чтобы переносить специальные файлы системы, как /dev, /proc and /sys, поскольку они будут воссозданы при загрузке системы.

Эта команда rsync не только переместит файловую систему, но и создаст различные точки подключения и сохранит все атрибуты:

rsync -AHSXax / /mnt/root/

cd в /mnt/root/etc и откройте fstab в любом текстовом редакторе. Измените точку входа для /dev/sda3, бывшую пользовательским разделом, на:

/dev/mapper/root   /        xfs    defaults        1 1

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

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

/dev/mapper/swap   swap     swap    defaults       0 0

И ещё одну запись /dev/sda4 (бывший корневой раздел), следует записать в виде:

/dev/sda4          /home    xfs    defaults        1 2

Создание нового диска в ОЗУ для начальной инициализации (initrd) загрузки системы

Для того чтобы воспользоваться новым зашифрованным корневым разделом файловой системы, он должен быть расшифрован при загрузке системы. Эту работу лучше всего поручить специально сформированному в ОЗУ диску начальной инициализации (initrd) [15]. (Можно также использовать файловую систему начальной инициализации ОЗУ (initramfs) [8] [27], хотя для этого потребуется перекомпиляция ядра). Как правило, openSUSE создает initrd для выполнения таких операций, как загрузка драйверов устройств конкретного компьютера при загрузке. Это позволяет загрузить основное ядро, а затем использовать загружаемые модули ядра для настройки ядра под конкретные нужды пользователя.

Хотя, в принципе, можно создать initrd вручную [15] [16], это необходимо при ошибках в процедуре требующей восстановления, всякий раз при конфигурировании оборудования и изменениях в ядре. Кроме того, это больше не необходимо, с момента как SUSE выпустила пакет mkinitrd [17] для автоматической генерации initrd. Подход состоит в изменении управляющего сценария mkinitrd, чтобы автоматически создать нужные initrd, необходимые для зашифрованного корневого раздела файловой системы.

Перед тем как использовать его в первый раз было бы целесообразно сделать резервную копию существующей initrd, находящуюся в /boot. Наилучшим подход - скопировать его в другой файл (например, init-orig) в /boot, чтобы он мог быть использован в качестве резервного в случае что-то пойдет не так. (для этого мы и резервируем дополнительное место, прим. перев.)

Для использования mkinitrd наберите:

mkinitrd -d /dev/mapper/root -f "dm luks"

Опция "-d /dev/mapper/root" означает размещение нового корневого устройства и должны быть задано при первом выполнении команды mkinitrd. После того как система станет использовать зашифрованный корневой раздел, эта опция больше не понадобится. Опция '-f "dm luks"' говорит mkinitrd включить LUKS-функцию.

Что нового mkinitrd делает, так это распознаёт устройства в "/dev/mapper", чтобы определить, какие из них используют шифрование и какие шифры должны быть загружены в ядро во время загрузки. Затем добавляет небольшую секцию в сценарий инициализации для запроса пароля на начальном этапе загрузки и расшифровывает все файловые системы.

Примечание: необходимо использовать: "yast2 --> Система --> Редактор /etc/sysconfig --> System --> Kernel --> INITRD_MODULES --> add dm-mod dm-crypt aes_i586 blkcipher", чтобы включить правильные модули во время загрузки. Возможно, Вам понадобится "lrw" модуль, если Вы захотите использовать как шифр aes-lrw-benbi.


Создание записи в меню загрузки для нового корневого раздела

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

/boot/grub/menu.lst

###Зашифрованный корневой раздел###
title openSUSE 10.3 - зашифрованый раздел
   root (hd0,0)
   kernel /vmlinuz-VER-default root=/dev/mapper/root luks_root=/dev/sda3 luks_swap=/dev/sda2 luks="root swap" vga=0x317 resume=/dev/mapper/swap splash=silent showopts
   initrd /initrd-VER-default

Рекомендовано, НЕ удалять старые записи, до того времени как не убедитесь в правильной загрузке системы. (Примечание: иногда нужно изменить старые записи для использования старого initrd, который был сохранен именно для этой цели).

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

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

Примечание: если Вы используете накопитель USB-диск, Вам может потребоваться изменить настройки BIOS, после чего USB устройство станет раньше жесткого диска в порядке загрузки.


Удаление оригинального корневого раздела и замена его другим шифрованным раздеом

Убедившись, что все работает, переходите к удалению оригинального корневого раздела и замените его другой зашифрованной файловой системой:

umount /dev/sda4
dd_rescue /dev/urandom /dev/sda4
cryptsetup -v -с serpent-cbc-essiv:sha256 -s 256 luksFormat /dev/sda4
cryptsetup luksOpen /dev/sda4 home
mkfs.xfs -b size=512 /dev/mapper/home
mount /dev/mapper/home /home

Измените fstab и добавьте запись для /home:

/dev/mapper/home   /home  xfs      defaults  1 2

Вновь запустите команду mkinitrd для добавления информации о /home в initrd.

mkinitrd

Теперь отредактируйте меню загрузки для дешифровки home при загрузке.

/boot/grub/menu.lst

###Зашифрованный корневой раздел###
title openSUSE 10.3 - зашифрованный раздел
   root (hd0,0)
   kernel /vmlinuz-VER-default root=/dev/mapper/root luks_root=/dev/sda3 luks_swap=/dev/sda2 luks_home=/dev/sda4 luks="root swap home" vga=0x317 resume=/dev/mapper/swap splash=silent showopts
   initrd /initrd-VER-default

Добавление пользовательской учетной записи

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

Примечание: учетная запись пользователя всё ещё должна иметь пароль, но для удобства можно включить автоматический вход в систему.


Резюме команд для openSUSE 11.1 установленной на USB-диск

В следующем резюме перечислены шаги, описанные выше, с некоторыми изменениями для openSUSE 11.1 установленной на внешний USB-диск.

ПРИМЕЧАНИЕ: изменения, внесенные для mkinitrd 2.4 являются портированием изменений, вошедших в [18] для mkinitrd 1.2.

# ------------------------------------------------------------------------------
# Установка OpenSUSE 11.1 с DVD
# ------------------------------------------------------------------------------
- Create Partition Setup
  + Custom Partitioning (for experts)
    - Delete all existent partitions
    - Create primary partition (sda1), ext3, 200 MB, mount point '/boot'
    - Create primary partition (sda2), swap, 4 GB, mount point '/swap'
    - Create primary partition (sda3), ext3, 20 GB, mount point '/home'
    - Create primary partition (sda4), ext3, <remaining>, mount point '/'
- add package 'emacs'
# ------------------------------------------------------------------------------
# резервирование загрузочных файлов, в том числе инициализирующего ОЗУ-диска, и т.д.
# ------------------------------------------------------------------------------
mkdir /BACKUP
cp -ax /boot/* /BACKUP
mv /BACKUP /boot
# ------------------------------------------------------------------------------
# создание зашифрованного файла подкачки
# ------------------------------------------------------------------------------
swapoff /dev/sda2
dd_rescue /dev/urandom /dev/sda2
cryptsetup -v --key-size 256 luksFormat /dev/sda2
cryptsetup -v luksDump /dev/sda2
cryptsetup -v luksOpen /dev/sda2 swap
mkswap /dev/mapper/swap
swapon /dev/mapper/swap
# ------------------------------------------------------------------------------
# создание зашифрованного раздела для нового корневого раздела
# ------------------------------------------------------------------------------
umount /dev/sda3
dd_rescue /dev/urandom /dev/sda3
cryptsetup -v --key-size 256 luksFormat /dev/sda3
cryptsetup luksDump /dev/sda3
cryptsetup luksOpen /dev/sda3 root
/sbin/mkfs.ext3 -O dir_index,resize_inode /dev/mapper/root
mkdir /mnt/root
mount /dev/mapper/root /mnt/root
# ------------------------------------------------------------------------------
# перенос файлов из старой корневой системы в новую
# ------------------------------------------------------------------------------
cd /
find bin boot dev etc home lib* opt root sbin srv tmp usr var -depth -print0 | cpio -pmd --null /mnt/root
mkdir /mnt/root/proc
mkdir /mnt/root/sys
mkdir /mnt/root/media
mkdir /mnt/root/mnt
# ------------------------------------------------------------------------------
# обновление /etc/fstab
# ------------------------------------------------------------------------------
cp /etc/fstab /etc/fstab.ORIG 
emacs /etc/fstab 
---
/dev/mapper/swap     swap                 swap       defaults              0 0
/dev/mapper/root     /                    ext3       acl,user_xattr        1 1
/dev/sda1            /boot                ext3       acl,user_xattr        1 2
/dev/sda4            /home                ext3       acl,user_xattr        1 2
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
---
cp /etc/fstab /mnt/root/etc/
# ------------------------------------------------------------------------------
# обновление сценариев для создания нового инициализирующего ОЗУ-диска 
# ------------------------------------------------------------------------------
# резервирование оригинальных файлов
cp /lib/mkinitrd/scripts/boot-luks.sh     boot-luks.sh.ORIG
cp /lib/mkinitrd/scripts/setup-luks.sh    setup-luks.sh.ORIG
cp /lib/mkinitrd/scripts/setup-storage.sh setup-storage.sh.ORIG
cp /sbin/mkinitrd                         mkinitrd.ORIG
# update mkinitrd scripts (phase 1 --- w/o encrypted 'home' partition)
tar -xvzf mkinitrd-ut.tar.gz
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_boot-luks.sh            /mnt/root/lib/mkinitrd/scripts/boot-luks.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_setup-luks.sh           /mnt/root/lib/mkinitrd/scripts/setup-luks.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_setup-storage-phase1.sh /mnt/root/lib/mkinitrd/scripts/setup-storage.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut                                 /mnt/root/sbin/mkinitrd
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_boot-luks.sh            /lib/mkinitrd/scripts/boot-luks.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_setup-luks.sh           /lib/mkinitrd/scripts/setup-luks.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_setup-storage-phase1.sh /lib/mkinitrd/scripts/setup-storage.sh
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut                                 /sbin/mkinitrd
# ------------------------------------------------------------------------------
# создания нового инициализирующего ОЗУ-диска
# ------------------------------------------------------------------------------
mkinitrd -v -d /dev/mapper/root -f "dm luks"
# ------------------------------------------------------------------------------
# редактирование '/boot/grub/menu.lst'
# ------------------------------------------------------------------------------
emacs /boot/grub/menu.lst
# добавление новой записи в '/boot/grub/menu.lst':
###Зашифрованный корневой раздел###
title openSUSE 11.1 - зашифрованный раздел
   root (hd0,0)
   kernel /vmlinuz-2.6.27.7-9-pae root=/dev/mapper/root luks_root=/dev/sda3 luks_swap=/dev/sda2 luks=root,swap vga=0x317 resume=/dev/mapper/swap splash=silent showopts
   initrd /initrd-2.6.27.7-9-pae
# ------------------------------------------------------------------------------
# перезагрузка
# ------------------------------------------------------------------------------
# проверьте что всё работает... 
# free --> объём файла подкачки
# режим засыпания
# ...
# ------------------------------------------------------------------------------
# шифрование 'home' раздела (и удаление оригинального корневого раздела)
# --> удачи, это точка невозврата ;-) 
# ------------------------------------------------------------------------------
umount /dev/sda4
dd_rescue /dev/urandom /dev/sda4
cryptsetup -v --key-size 256 luksFormat /dev/sda4
cryptsetup luksOpen /dev/sda4 home
/sbin/mkfs.ext3 -O dir_index,resize_inode /dev/mapper/home
mount /dev/mapper/home /home
# ------------------------------------------------------------------------------
# обновление /etc/fstab
# ------------------------------------------------------------------------------
emacs /etc/fstab 
---
/dev/mapper/swap     swap                 swap       defaults              0 0
/dev/mapper/root     /                    ext3       acl,user_xattr        1 1
/dev/sda1            /boot                ext3       acl,user_xattr        1 2
/dev/mapper/home     /home                ext3       acl,user_xattr        1 2
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
---
# ------------------------------------------------------------------------------
# обновление сценариев для создания нового инициализирующего ОЗУ-диска (теперь все разделы зашифрованы)
# ------------------------------------------------------------------------------
# обновление сценариев mkinitrd (фаза 2 --- с шифрованием 'home' раздела)
cp mkinitrd-ut/mkinitrd-2.4-34.1-ut_scripts_setup-storage-phase2.sh /lib/mkinitrd/scripts/setup-storage.sh
# ------------------------------------------------------------------------------
# создания нового инициализирующего ОЗУ-диска 
# ------------------------------------------------------------------------------
mkinitrd -v -d /dev/mapper/root -f "dm luks"
# ------------------------------------------------------------------------------
# редактирование '/boot/grub/menu.lst'
# ------------------------------------------------------------------------------
emacs /boot/grub/menu.lst
# замена записей в '/boot/grub/menu.lst' by:
###Зашифрованный корневой раздел###
title openSUSE 11.1 - зашифрованный раздел
   root (hd0,0)
   kernel /vmlinuz-2.6.27.7-9-pae root=/dev/mapper/root luks_root=/dev/sda3 luks_swap=/dev/sda2 luks_home=/dev/sda4 luks=root,swap,home vga=0x317 resume=/dev/mapper/swap splash=silent showopts
   initrd /initrd-2.6.27.7-9-pae
###Зашифрованный корневой раздел режим защиты от сбоев###
title Failsafe -- openSUSE 11.1 - зашифрованный раздел
   root (hd0,0)
   kernel /vmlinuz-2.6.27.7-9-pae root=/dev/mapper/root luks_root=/dev/sda3 luks_swap=/dev/sda2 luks_home=/dev/sda4 luks=root,swap,home ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x317 showopts
   initrd /initrd-2.6.27.7-9-pae
# ------------------------------------------------------------------------------
# перезагрузись и веселись ;-)
# ------------------------------------------------------------------------------
# Отдельное спасибо Mathias Grimmberger за исправление багов в 'boot-start.sh' и 
# соответствующие корректировки параметров ядра в '/boot/grub/menu.lst'!
# ('luks="root swap home"' --> 'luks=root,swap,home')
# ------------------------------------------------------------------------------

FAQ

От каких именно атак призвана защищать эта процедура?

Процедурой, описанной здесь можно защитить ноутбук (или другой компьютер) в отношении следующих атак:

  • Ноутбук является предметом случайных краж, с последующей удачной сдачей ростовщику (как вариант, ломбард, прим.перев.). Как правило, вор нацеливается конкретно на ноутбук, а просто крадёт ноутбук, как имеющий определенную ценность. Такой вор, типично, продаёт ноутбук скупщику краденного, который может иметь опыт поиска ценных данных на незащищенном ноутбуке, а также контактов за счёт которых можно поживиться используя любые из полученных данных.
  • Второй распространённая ситуация, где вор специально ориентирован на ноутбук, потому что подозревает, что он содержит ценную информацию. В этом случае вор знает, как найти данные и что с ними делать.

Можно ли использовать внешний USB-флеш диск для загрузки?

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

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

Какие есть известные уязвимости в процедуре предлагаемой здесь?

Fruhwith [4] [26] рассматривает ряд криптографических уязвимостей, связанных с шифрованием жесткого диска. В частности, он отмечает, что одна из самых серьезных проблем названная уязвимостью водяного знака [24], была решена для dm-crypt с введением ESSIV шифра.

Osvik и др. [25], обсуждает успешную атаку по побочному каналу на dm-crypt во время его работы. В ходе этого нападения, компьютер работал и, под управлением специально разработанного сценария, можно украсть мастер-ключ для любого подключенного раздела. Несмотря на серьезный недостаток, процедуры, обсуждаемые здесь предназначены для защиты от атак описанных в #FAQ.1 и #FAQ.2, т.е. когда система выключена. Безопасность работающей системы требует брандмауэра, системы контроля доступа и проверки целостности программного обеспечения - темы выходящие за рамки этого Руководства.


Сноски

  1. dm-crypt: a device-mapper crypto target, http://www.saout.de/misc/dm-crypt/
  2. J. Ruusu,"loop-AES", http://sourceforge.net/projects/loop-aes/
  3. "True Crypt", http://www.truecrypt.org/
  4. C. Fruhwirth, "Linux hard disk encryption settings", http://clemens.endorphin.org/LinuxHDEncSettings
  5. J. Arnt, et al., "SUSE Linux Start-Up", http://en.opensuse.org/Distribution/SL-10.1/inst-source/docu/en/startup_en.pdf
  6. "EncFS Encrypted Filesystem", [http://encfs.sourceforge.net/
  7. C. Devine, "Encrypted Root Filesystem HOWTO", http://tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/
  8. "SECURITY System Encryption DM-Crypt with LUKS", http://gentoo-wiki.com/SECURITY_System_Encryption_DM-Crypt_with_LUKS
  9. M. Petullo,"Encrypt Your Root Filesystem", http://www.linuxjournal.com/article/7743
  10. "LUKS - Linux Unified Key Setup", http://luks.endorphin.org/
  11. M. Dworkin, "Recommendation for Block Cipher Modes of Operation", http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
  12. "CNSS Policy No. 15, Fact Sheet No. 1", http://www.cnss.gov/Assets/pdf/cnssp_15_fs.pdf
  13. "Fact Sheet NSA Suite B Cryptography", http://www.nsa.gov/ia/industry/crypto_suite_b.cfm
  14. W. Almesberger and H. Lermen, "Using the initial RAM disk (initrd)", file:///usr/src/linux/Documentation/initrd.txt
  15. "SECURITY System Encryption DM-Crypt with LUKS/initrd", http://gentoo-wiki.com/SECURITY_System_Encryption_DM-Crypt_with_LUKS/initrd
  16. "mkinitrd", http://www.novell.com/products/linuxpackages/suselinux/mkinitrd.html
  17. "SUSE mkinitrd for Encrypted Root File Systems", http://www.ccrl-nece.de/~greg/linux/mkinitrd-lerfs.tar.gz
  18. "Performance of Encryption Algorithms", http://www.saout.de/tikiwiki/tiki-index.php?page=UserPageChonhulio
  19. "dmcrypt versus loopaes", http://deb.riseup.net/storage/encryption/benchmarks/dmcrypt-v-loopaes
  20. M.-J. O. Saarinen, "Encrypted Watermarks and Linux Laptop Security", http://docs.indymedia.org/pub/Local/UkCrypto/wisa2004.pdf
  21. "Encryption Ideas for IMC UK", http://docs.indymedia.org/view/Local/UkCrypto
  22. "Encrypt filesystems with EncFS and Loop-AES", http://security.linux.com/print.pl?sid=06/03/13/1656228
  23. J. Ruusu,"Re: Oopsing cryptoapi (or loop device?) on 2.6.*", http://marc.theaimsgroup.com/?l=linux-kernel&m=107719798631935&w=2
  24. D.A. Osvik, A. Shamir and E. Tromer, "Cache Attacks and Countermeasures: the Case of AES", http://www.wisdom.weizmann.ac.il/~tromer/papers/cache.pdf
  25. C. Fruhwirth, "New Methods in Hard Disk Encryption", http://clemens.endorphin.org/nmihde/nmihde-A4-os.pdf
  26. J. Gustedt, "Early LUKS", http://www.loria.fr/~gustedt/early/
  27. C. Fruhwirth and M. Schuster, "Hard disk encryption with DM-Crypt, LUKS, and cryptsetup", http://www.linux-magazine.com/issue/61/Hard_Disk_Encryption_DM-Crypt_LUKS_cryptsetup.pdf
  28. Packman "cryptsetup-luks" RPM packages for older openSUSE distributions http://packman.links2linux.de/package/841
  29. "openSUSE 11.1 mkinitrd and scripts for Encrypted Root File Systems", http://www.mtsports.de/linux/mkinitrd-ut.tar.gz