Используем Cryptomator для шифрования облачного диска в Linux. Шифрование дисков в Linux Установка LVM на жесткий диск


Автор: Paddy Landau
Дата публикации: сентябрь 2012 г.
Перевод: Семененко В.
Дата публикации перевода: 13 ноября 2012 г.

Когда вы устанавливаете операционную систему Ubuntu, возможно вы не задумываетесь о настройке шифрования данных в ней. Или же может быть такая ситуация, когда вы добавляете пользователя в систему, без шифрования его домашней директории. Но теперь вы передумали и решили настроить защиту данного каталога. Другими словами, вы (или другой пользователь на компьютере) желаете иметь такую возможность, которой на данный момент нет...

Создание шифрованного раздела в Ubuntu

Каким же образом можно добавить возможность шифрования в уже установленной системе Ubuntu Linux?

К счастью, реализовать ее достаточно легко. Для этого достаточно выполнить три основных шага:

  • создать шифрованную копию вашей домашней директории;
  • удалить оригинальную незашифрованную домашнюю директорию;
  • зашифровать раздел подкачки swap (выполняется только один раз, при установке системы Ubuntu или же при пошаговом выполнении данного руководства).

Описанные в этой статье действия производились на полностью обновленной системе Ubuntu Precise 12.04.

Подготовка

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

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

Используя привычный вам менеджер пакетов, установите программу encrypt-utils .

Шифрование

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

Перезагружаем Ubuntu Linux и заходим в "Режим восстановления" (Recovery Mode). Небольшой совет - во время старта загрузки системы нажмите и удерживайте клавишу Shift, чтобы открылось меню Grub. Обычно строка "Режим восстановления" (Recovery Mode) располагается второй сверху в списке этого загрузчика.

В меню режима восстановления, выберите "Drop" для того, чтобы появилась подсказка командной строки для учетной записи root.

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

Mount --options remount,rw / mount --all

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

Ecryptfs-migrate-home --user paddy

Когда процесс шифрования будет завершен, вы увидите несколько предупреждений. Можете проигнорировать их. Но вам необходимо будет запомнить путь к временной папке, созданной данной командой. Ее вид будет примерно следующим:

/home/paddy.ChPzzxqD

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

Перезагрузите систему Ubuntu Linux. Для этого введите команду:

Reboot now

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

Завершение

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

Если что-то не так, можете сразу переходить к пункту "Возвращение к исходному состоянию".

Если все в системе работает нормально, выполнил завершающие шаги.

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

Sudo rm -R /home/paddy.ChPzzxqD

Восстановите данные, которые были вами удалены (если были) в шаге "Подготовка".

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

Sudo ecryptfs-setup-swap

Снова перезагрузитесь.

Возвращение к исходному состоянию

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

Запустите команды:

Mount --options remount,rw / mount --all ecryptfs-migrate-home --user paddy

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

Ls -l /home/paddy.ChPzzxqD

Теперь выполните процесс возвращения к исходному состоянию, выполнив три команды:

Cd /home rm -R paddy .ecryptfs/paddy mv paddy.ChPzzxqD

Снова перезагрузитесь.

Надеюсь, вышеназванные шаги помогли вам. Если у вас возникли неразрешимые проблемы, вы можете оставить запрос на моей ветке форума Ubuntu:

Спящий режим при шифровании

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

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

Ls -l /home/paddy.ChPzzxqD rm -R paddy .ecryptfs/paddy

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

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

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

Подготовка

Введите в терминале следующую команду:

Sudo cryptsetup status crypt swap 1

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

/dev/sda1

/dev/sdb5

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

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

Настройка спящего режима

Введите следующие команды. Удостоверьтесь, что вы заменили устройство /dev/sdXN вашим разделом подкачки swap , созданным в параграфе "Подготовка". При вводе команд вам следует строго придерживаться указанной последовательности:

Sudo swapoff /dev/mapper/cryptswap1 sudo cryptsetup luksClose /dev/mapper/cryptswap1 sudo cryptsetup luksFormat cipher aes cbc essiv:sha256 verify passphrase key size 256 /dev/sdXN WARNING! ======== This will overwrite data on /dev/sda1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: sudo cryptsetup luksOpen /dev/sdXN cryptswap1

Введите ключевую фразу для устройства /dev/sda1 (и повторите ее во избежание опечатки):

Sudo mk swap /dev/mapper/crypt swap 1 sudo swapon --all swapon -s

Последняя команда отобразит файловое имя устройства /dev/crypt swap 1 .

Откройте в предпочитаемом редакторе файл настроек /etc/crypttab . Замените в нем строку crypt swap 1 следующей (не забудьте при этом заменить устройство /dev/sdXN на ваше устройство подкачки):

Cryptswap1 /dev/sdXN none luks

Теперь отредактируйте файл /usr/share/initramfstools/scripts/local-top/cryptroot . В нем найдите строку (обычно она имеет номер 288, но он может измениться):

Message "cryptsetup: unknown error setting up device mapping"

Перейдите к следующей пустой строке (перед FSTYPE=") и вставьте новую строку (при этом не забыв заменить устройство /dev/sdXN):

/sbin/cryptsetup luksOpen /dev/sdXN crypt swap 1

Отредактируйте файл /etc/acpi/hibetnate.sh . В первой пустой строке вставьте значение:

DEVICE="/dev/mapper/crypt swap 1"

Отредактируйте файл /etc/initramfstools/conf.d/resume . Замените в нем существующую строку следующей:

RESUME=/dev/mapper/crypt swap 1

Затем отредактируйте файл /etc/polkit1/localauthoriyt/50-local.d/com.ubuntu.enable-hibernate.pkla . Файл изначально не существует, поэтому потребуется сначала его создать. Затем добавьте в него строки:

Identity=unixuser:* Action=org.freedesktop.upower.hibernate ResultActive=yes

Наконец, откройте терминал и введите в нем команду:

Sudo update initramfs u k all

Перезагрузитесь.

Использование спящего режима

При последующем запуске Ubuntu Linux спросит вас о новой ключевой фразе для раздела подкачки. Введите ее и процесс дальнейшего нормального входа в систему продолжится.

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

Теперь вы обнаружите режим "Hibernate" в меню выключения Ubuntu Linux и сможете им пользоваться. Если вы хотите переходить в спящий режим из командной строки, достаточно набрать в терминале следующую команду.


Автор: Nitish Tiwari
Дата публикации: 04 febriary 2015
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.

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

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

В мае этого года остановилась разработка приложения TrueCrypt, известного инструментального средства с открытым исходным кодом, предназначенного для шифрования дисков. Как многие из вас знают, это был один из весьма надежных инструментов, предназначенных для шифрования дисков. Прискорбно видеть исчезновение инструмента такого калибра, но величие мира с открытым исходным кодом таково, что есть несколько других инструментов с открытым исходным кодом, которые помогут вам достичь безопасности с помощью шифрования дисков, у которых, к тому же, есть много конфигурационных настроек. Мы рассмотрим два из них - dm-crypt и LUKS - в качестве альтернативы TrueCrypt для платформы Linux. Давайте начнем с краткого рассмотрения dm-crypt, а затем - LUKS.

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

Ресурсы

Шаг 01: Рассматриваем Dm-crypt

Название приложения dm-crypt является сокращением от device mapper- crypt (шифрование при отображении устройства). Как следует из названия, оно базируется на отображении устройств — фреймворке ядра Linux, предназначенном для отображения блочных устройств на виртуальные блочные устройства более высокого уровня. При отображении устройств можно пользоваться несколькими функциями ядра, такими как dm-cache (создает гибридные тома), dm-verity (предназначена для проверки целостности блоков, является частью Chrome OS) и также очень популярным Docker. Для криптографических целей в dm-crypt применяется фреймворк ядра Linux Crypto API.

Итак, если подвести итог, то приложение dm-crypt является подсистемой шифрования на уровне ядра, предлагающее прозрачное шифрование диска: это означает, что файлы доступными сразу после монтирования диска - для конечного пользователя нет видимой задержки. Чтобы шифровать с использованием dm-crypt вы можете просто указать один из симметричных шифров, режим шифрования, ключ (любого допустимого размера), режим генерации IV, а затем в /dev создать новое блочное устройство. Теперь при любой записи на это устройство будет происходить шифрование, а при чтении — расшифровка. Вы можете как и обычно смонтировать на этом устройстве файловую систему, либо можете использовать устройство dm-crypt для создания других конструкций, таких как RAID или том LVM. Таблица соответствия для dm-crypt задается следующим образом:

Здесь значение start-sector (начальный сектор), как правило, равно значению 0, значение size (размер) равно размеру устройства, указываемую в секторах, а target name является именем, которое вы хотите присвоить зашифрованному устройству. Таблица целевого отображения target-mapping table состоит из следующих разделов:

[<#opt_params> ]

Шаг 02: Рассматриваем LUKS

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

Именно по этим причинам на свет появилась методика LUKS (Linux Unified Key Setup — Унифицированная настройка ключей в Linux). LUKS является в Linux стандартом шифрования жестких дисков и стандартизация позволяет обеспечить совместимость различных дистрибутивов. Также поддерживается использование нескольких ключей и парольных фраз. В рамках такой стандартизации к зашифрованным данным добавляется заголовок LUKS и в этом заголовке присутствует вся информация, необходимая для настройки. Когда есть такой заголовок с данными, то пользователи могут легко перейти на любой другой дистрибутив. Сейчас в проекте dm-crypt рекомендуется использовать LUKS в качестве предпочтительного способа настройки шифрования диска. Давайте рассмотрим, как установить утилиту cryptsetup и как ее использовать для создания томов на основе LUKS.

Шаг 03: Установка

Функциональные возможности уровня ядра, которые применяются в dm-crypt, уже есть во всех дистрибутивах Linux; нам нужно к ним только интерфейс. Мы будем пользоваться утилитой cryptsetup, с помощью которой можно создавать тома с использованием dm-crypt, стандарта LUKS, а также старого и доброго приложения TrueCrypt. Для того, чтобы установить cryptsetup на дистрибутивах Debian / Ubuntu, вы можете воспользоваться следующими командами:

$ sudo apt-get update $ sudo apt-get install cryptsetup

Первая команда синхронизирует индексные файлы ракета с содержимым их репозиториев: она получает информацию о последних версиях всех доступных пакетов. Вторая команда загрузит и установит на ваш компьютер пакет cryptsetup. Если вы используете дистрибутив RHEL/Fedora/CentOS, то для установки утилиты cryptsetup вы можете воспользоваться командой yum.

$ yum install cryptsetup-luks

Шаг 04: Создание целевого файла

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

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

В создании файла, который будет удовлетворять вышеуказанным условиям, нам может помочь команда dd, хотя она и будет работать сравнительно медленно. Просто используйте ее вместе с файлом специального устройства /dev/random, указанным в качестве входных данных, и целевого файла, который должен быть указан в качестве выходных данных. Пример команды выглядит следующим образом:

$ dd if=/dev/random of=/home/nitish/basefile bs=1M count=128

В результате в каталоге /home/nitish будет создан файл с именем basefile, имеющий размер в 128 МБ. Однако, учтите, что на выполнение этой команды может потребоваться достаточно большое время; в системе, которой пользовался наш эксперт, на это потребовался час времени.

Шаг 05: Создаем dm-crypt LUKS

После того, как вы создали целевой файл, в этом файле необходимо создать раздел LUKS. Этот раздел служит в качестве основного слоя, на базе которого строится все шифрование данных. Кроме этого, в заголовке этого раздела (LUKS header) содержится вся информация, требуемая для совместимости с другими устройствами. Чтобы создать раздел LUKS применяется команда cryptsetup:

$ cryptsetup -y luksFormat /home/nitish/basefile

После того, как вы согласитесь с тем, что данные, находящиеся внутри файла basefile, будут безвозвратно удалены, введете парольную фразу, а затем — ее подтверждение, будет создан раздел LUKS. Вы можете проверить это с помощью следующей команды file:

$ file basefile

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

Шаг 06: Создаем и монтируем файловую систему

Контейнер LUKS, который мы создали на предыдущем шаге, теперь доступен в виде файла. В нашем примере, это /home/nitish/basefile. Утилита cryptsetup позволяет открывать контейнер LUKS как независимое устройство. Чтобы сделать это, сначала отобразите файл контейнера на имя устройства, а затем смонтируйте устройство. Команда, осуществляющая отображение, выглядит следующим образом:

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

Шаг 07: Файловая система - продолжение

Файл контейнера LUKS теперь доступен в системе в виде обычного устройства. Прежде, чем мы сможем использовать его для обычных операций, мы должны его отформатировать и создать на нем файловую систему. Вы можете пользоваться любой файловой системой, которая поддерживается в вашей системе. В моем примере, мы использовали ext4, поскольку это самая новая файловая система для систем Linux.

$ mkfs.ext4 -j /dev/mapper/volume1

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

$ mkdir /mnt/files

Теперь выполняем монтирование:

Для перекрестной проверки воспользуйтесь командой df –h - вы в конце списка смонтированные устройств увидите устройство "/dev/mapper/volume1". Видно, что заголовок LUKS уже занимает в устройстве уже некоторое место.

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

Шаг 08: Использование шифруемого диска

Мы выполнили несколько шагов для того, чтобы достичь этого результата, и если вам не очень понятно, как все это работает, вы, скорее всего, запутаетесь в том, что нужно сделать только один раз (требуется для установки), и в том, что нужно делать регулярно при использовании шифрования. Давайте рассмотрим следующий сценарий: вы успешно выполнили все описанные выше шаги, а затем выключили компьютер. На следующий день, когда вы запускаете ваш компьютер, вы не в состоянии найти смонтированное устройство - куда оно делось? Чтобы со всем этим разобраться, нужно иметь в виду, что после запуска системы нужно смонтировать контейнер LUKS, а перед остановкой компьютера - размонтировать.

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

Откройте файл LUKS (т.е. /home/nitish/basefile) и введите пароль. Команда выглядит следующим образом:

$ cryptsetup luksOpen /home/nitish/basefile volume1

После того, как файл будет открыт, смонтируйте его (если он не монтируется автоматически):

$ mount /dev/mapper/volume1 /mnt/files

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

После того, как все сделаете, размонтируйте устройство следующим образом:

$ umount /mnt/files

После успешного размонтирования, закройте файл LUKS:

$ cryptsetup luksClose volume1

Шаг 09: Резервное копирование

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

Чтобы создать резервную копию файла заголовка LUKS, укажите в команде параметр luksHeaderBackup:

$ sudo cryptsetup luksHeaderBackup /home/nitish/basefile --header-backup-file /home/nitish/backupfile

Или, если вы хотите восстановить файл из резервной копии, то укажите в команде параметр luksHeaderRestore:

$ sudo cryptsetup luksHeaderRestore /home/ nitish/basefile --header-backup-file /home/nitish/backupfile

Для проверки файла заголовка LUKS и проверки того, что файл, с которым вы имеете дело, соответствует действительно существующему устройству LUKS, вы можете воспользоваться параметром isLuks.

$ sudo cryptsetup -v isLuks /home/nitish/basefile

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

$ cat /home/nitish/basefile > basefile.img

Шаг 10: Различные настройки

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

Чтобы сделать дамп заголовка LUKS, в команде cryptsetup есть параметр luksDump. Он позволит вам сделать снимок файла заголовка LUKS того устройства, которое вы используете. Пример команды выглядит следующим образом:

$ cryptsetup luksDump /home/nitish/basefile

В начале данной статьи мы упоминали о том, что LUKS поддерживает работу с несколькими ключами. Давайте сейчас это увидим в действии, добавив новый слот ключа (прим.пер.: слот ключа — место под ключ ):

$ cryptsetup luksAddKey --Key-slot 1 /home/nitish/basefile

Эта команда добавляет ключ к слоту ключа с номером 1, но только после того, как вы введете текущий пароль (ключ, присутствующий в слоте ключа 0). Всего есть восемь слотов ключей, и вы можете расшифровывать данные с использованием любого ключа. Если вы после того, как добавили второй ключ, сделаете дамп заголовка, вы увидите, что второй слот ключа занят.

Вы можете удалить слоты с ключами следующим образом:

$ cryptsetup luksRemoveKey /home/nitish/basefile

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

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

Введение

Шифрование дисков будем производить стандартными средствами Ubuntu, причем ключ шифрования, как и раздел /boot, будет вынесен на сменный накопитель. Но зачем шифровать корневой раздел? Ведь можно зашифровать только /home? На то есть несколько причин. Первая - на основе конфигурационных файлов из /etc можно извлечь некоторую информацию, пускай даже она не относится к конфиденциальным данным. Вторая же - если вдруг содержимым диска заинтересуются, ты всегда сможешь сказать, что все так и было и что диск уже был забит псевдослучайными данными. Итак, что для этого понадобится?

  • Флешка с MBR
  • Ubuntu 12.10
  • Чистый жесткий диск

В качестве алгоритма шифрования дисков будем использовать AES, поскольку он принят как стандарт и криптостоек, а в качестве средства - cryptsetup/LUKS. Чтобы иметь возможность добавить свободное место поверх зашифрованного тома, задействуем логические тома (LVM).

Создание шифрованного тома

Загрузившись с LiveCD, необходимо подготовить флешку: создать на ней второй раздел, где будет размещен /boot и ключ шифрования. Создавая раздел /boot с ФС ext2 вторым, мы убиваем двух зайцев - первый раздел будет виден во всех системах, и на нем можно хранить данные, а второй из Windows так просто не увидишь, что прибавляет неудобства любопытствующим. Для разбиения я использовал gparted, но тебе никто не мешает использовать, например, fdisk. После этого нужно подмонтировать новосозданный раздел и сгенерировать ключевой файл:

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


Разберем, что делает эта команда. Первый ключ указывает тип хеш-функции, которая будет использоваться для хеширования мастер-ключа. Второй ключ указывает алгоритм и тип шифрования. На этом я остановлюсь чуть подробнее. Что такое CBC? Как известно, AES - блочный шифр, который оперирует блоками по 128, 192 или 256 бит. Но, как правило, шифруют гораздо большие объемы информации. И возникает проблема - как шифровать, чтобы не было видно неслучайного распределения, из которого криптоаналитик может извлечь информацию. Умные люди решили ее таким образом: в первом блоке находится IV - случайный набор битов. И каждый последующий блок открытых данных XOR’ится с предыдущим блоком уже зашифрованных данных. Все вроде хорошо, но в случае шифрования дисков такая схема, по понятным причинам, неприменима (ты же не будешь ждать каждый раз по 10–20 минут, пока система расшифровывает нужный тебе участок?). В LUKS для решения проблемы произвольного доступа к информации применяется ESSIV - шифруются относительно небольшие блоки данных (посекторно), а вектор инициализации генерируется на основе номера сектора и хеша ключа. Такая схема также защищает от некоторых криптоатак. В частности, поэтому я и использую LUKS. Подтвердив свои намерения после запуска предыдущей команды, создаем отображение LUKS-устройства:

# cryptsetup -d=/mnt/boot/key.bin luksOpen /dev/sdd cryptodisk

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


Создаем LVM поверх шифрованного тома

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

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

Нам осталось «всего лишь» установить Ubuntu на нешифрованный раздел/диск и перенести ее на шифрованный.

Подготовка и перенос Ubuntu

Теперь ставим на нешифрованный диск Ubuntu - конфигурацию делай по своему вкусу за исключением размещения /boot и загрузчика. Их необходимо поместить на флешке, где ты заблаговременно создал соответствующий раздел. После этого загружаемся с флешки, чтобы проверить, все ли встало корректно, устанавливаем с помощью apt-get пакеты lvm2 и cryptsetup - они удалились автоматически после установки Ubuntu - и добавляем/изменяем строчки /etc/fstab. Должно получиться нечто подобное (за исключением строчек с псевдофайловыми системами, которых, впрочем, в современных системах нет):

/ etc / fstab UUID = dd7ca139 - 074a - 4b1b - a116 - 3a42feab7459 / boot ext2 defaults 0 2 / dev / mapper / vg - root / ext4 errors = remount - ro 0 1 / dev / mapper / vg - home / home ext4 defaults 0 1 / dev / mapper / vg - swap none swap sw 0 0

Раздел /boot мы монтируем по UUID для того, чтобы при добавлении новых дисков не возникла путаница с их именами. Теперь идем в файл /etc/crypttab, он у нас примерно следующего содержания:

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

Копируем ключ и cryptsetup

cp / boot / key .bin $ { DESTDIR } / etc / crypto copy_exec / sbin / cryptsetup / sbin

И собственно скрипт для подключения криптодиска (выполняется во время загрузки initrd):

/ etc / initramfs - tools / scripts / local - top / cryptokeys . . . modprobe - b dm_crypt while ! / sbin / cryptsetup - d = / etc / crypto / key .bin luksOpen / dev / disk / by - uuid / c34e4c91 - 1fa1 - 4802 - 88ca - 9c3be5c99097 cryptodisk ; do echo "Try again..." done

Цикл while необходим, если в дальнейшем ты добавишь разблокировку тома по паролю. Оба скрипта должны быть выполняемыми, иначе следующая команда их не увидит и будет создавать стандартный образ. Теперь можно давать команду обновления initrd:

# update initrd -u -k all -v

Мы чуть было не забыли про конфиг загрузчика. Имеется два пути его правки: один простой но неправильный - прямое редактирование файла /boot/grub/grub.cfg, второй тоже простой, но на сей раз верный. Некорректность первого способа в том, что при каждом обновлении ядра конфиг перезаписывается с использованием скриптов из /etc/grub.d/. Мы же пойдем другим путем - добавим скрипт, который как раз и будет генерировать правильные строчки в реальном грабовском конфиге. Однако есть одно «но» - при обновлении ядра тебе придется либо менять его каждый раз, либо оставаться на старом (последнее, на мой взгляд, предпочтительнее - см. врезку). Вот так примерно выглядят его строчки:

/ etc / grub .d / 40_custom menuentry "Ubuntu crypto" { recordfail = 1 if [ - n $ { have_grubenv } ] ; then save_env recordfail ; fi set quiet = 1 insmod part_msdos insmod ext2 insmod gzio

UUID берем из заранее записанного файла

search -- no - floppy -- fs - uuid -- set = root dd7ca139 - 074a - 4b1b - a116 - 3a42feab7459

Раздел /boot для Grub считается корневым, поэтому пути к ядру и образу initrd указываются относительно его

По желанию можно выключить ненужные тебе пункты меню. Для этого просто сними право выполнения со всех ненужных скриптов в /etc/grub.d/. Теперь можно обновить основной конфиг:

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


Добавление/изменение ключей

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

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

Семененко В.

Когда вы устанавливаете операционную систему Ubuntu, возможно вы не задумываетесь о настройке шифрования данных в ней. Или же может быть такая ситуация, когда вы добавляете пользователя в систему, без шифрования его домашней директории. Но теперь вы передумали и решили настроить защиту данного каталога. Другими словами, вы (или другой пользователь на компьютере) желаете иметь такую возможность, которой на данный момент нет...

Создание шифрованного раздела в Ubuntu

Каким же образом можно добавить возможность шифрования в уже установленной системе Ubuntu Linux?

К счастью, реализовать ее достаточно легко. Для этого достаточно выполнить три основных шага:

  • создать шифрованную копию вашей домашней директории;
  • удалить оригинальную незашифрованную домашнюю директорию;
  • зашифровать раздел подкачки swap (выполняется только один раз, при установке системы Ubuntu или же при пошаговом выполнении данного руководства).

Описанные в этой статье действия производились на полностью обновленной системе Ubuntu Precise 12.04.

Подготовка

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

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

Используя привычный вам менеджер пакетов, установите программу encrypt-utils .

Шифрование

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

Перезагружаем Ubuntu Linux и заходим в "Режим восстановления" (Recovery Mode). Небольшой совет - во время старта загрузки системы нажмите и удерживайте клавишу Shift, чтобы открылось меню Grub. Обычно строка "Режим восстановления" (Recovery Mode) располагается второй сверху в списке этого загрузчика.

В меню режима восстановления, выберите "Drop" для того, чтобы появилась подсказка командной строки для учетной записи root.

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

mount --options remount,rw /
mount --all

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

Когда процесс шифрования будет завершен, вы увидите несколько предупреждений. Можете проигнорировать их . Но вам необходимо будет запомнить путь к временной папке, созданной данной командой. Ее вид будет примерно следующим: /home/paddy.ChPzzxqD

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

Перезагрузите систему Ubuntu Linux. Для этого введите команду: reboot now

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

Завершение

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

Если что-то не так, можете сразу переходить к пункту "Возвращение к исходному состоянию".

Если все в системе работает нормально, выполнил завершающие шаги.

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

sudo rm -R /home/paddy.ChPzzxqD

Восстановите данные, которые были вами удалены (если были) в шаге "Подготовка".

Снова откройте терминал и введите команду для шифрования раздела подкачки swap . Если у вас до этого уже имелся пользователь с настроенным шифрованием домашней директории, можете спокойно пропустить данный шаг: sudo ecryptfs-setup-swap

Снова перезагрузитесь.

Возвращение к исходному состоянию

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

Запустите команды:

mount --options remount,rw /
mount --all
ecryptfs-migrate-home --user paddy

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

ls -l /home/paddy.ChPzzxqD

Теперь выполните процесс возвращения к исходному состоянию, выполнив три команды:

cd /home
rm -R paddy .ecryptfs/paddy
mv paddy.ChPzzxqD

Снова перезагрузитесь.

Надеюсь, вышеназванные шаги помогли вам. Если у вас возникли неразрешимые проблемы, вы можете оставить запрос на моей ветке форума Ubuntu.

Спящий режим при шифровании

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

Если в вашей системе не настроено шифрование разделов, то восстановить возможность спящего режима в Ubuntu просто. Для этого достаточно выполнить команды: ls -l /home/paddy.ChPzzxqD
rm -R paddy .ecryptfs/paddy

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

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

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

Подготовка

Введите в терминале следующую команду: sudo cryptsetup status cryptswap1

В результате вы увидите строку, в которой будет обозначено устройство, выглядящее примерно так: /dev/sda1

или /dev/sdb5

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

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

Настройка спящего режима

Введите следующие команды. Удостоверьтесь, что вы заменили устройство /dev/sdXN вашим разделом подкачки swap , созданным в параграфе "Подготовка". При вводе команд вам следует строго придерживаться указанной последовательности:

sudo swapoff /dev/mapper/cryptswap1
sudo cryptsetup luksClose /dev/mapper/cryptswap1
sudo cryptsetup luksFormat cipher aes cbc essiv:sha256 verify passphrase key size 256 /dev/sdXN

WARNING!
========
This will overwrite data on /dev/sda1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
sudo cryptsetup luksOpen /dev/sdXN cryptswap1

Введите ключевую фразу для устройства /dev/sda1 (и повторите ее во избежание опечатки):

sudo mkswap /dev/mapper/cryptswap1
sudo swapon ­­all
swapon ­s

Последняя команда отобразит файловое имя устройства /dev/crypt swap 1 .

Откройте в предпочитаемом редакторе файл настроек /etc/crypttab . Замените в нем строку crypt swap 1 следующей (не забудьте при этом заменить устройство /dev/sdXN на ваше устройство подкачки): cryptswap1 /dev/sdXN none luks

Теперь отредактируйте файл /usr/share/initramfstools/scripts/local-top/cryptroot . В нем найдите строку (обычно она имеет номер 288, но он может измениться): message "cryptsetup: unknown error setting up device mapping"

Перейдите к следующей пустой строке (перед FSTYPE=") и вставьте новую строку (при этом не забыв заменить устройство /dev/sdXN): /sbin/cryptsetup luksOpen /dev/sdXN cryptswap1

Отредактируйте файл /etc/acpi/hibetnate.sh . В первой пустой строке вставьте значение: DEVICE="/dev/mapper/cryptswap1"

Отредактируйте файл /etc/initramfstools/conf.d/resume . Замените в нем существующую строку следующей: RESUME=/dev/mapper/cryptswap1

Затем отредактируйте файл /etc/polkit1/localauthoriyt/50-local.d/com.ubuntu.enable-hibernate.pkla . Файл изначально не существует, поэтому потребуется сначала его создать. Затем добавьте в него строки:
Identity=unixuser:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

Наконец, откройте терминал и введите в нем команду: sudo update initramfs u k all

Перезагрузитесь.

Использование спящего режима

При последующем запуске Ubuntu Linux спросит вас о новой ключевой фразе для раздела подкачки. Введите ее и процесс дальнейшего нормального входа в систему продолжится.