Как убрать шифрование диска ubuntu. Шифрование жесткого диска в Linux. Создание шифрованного тома


Я Canonical не понимаю. Вроде, 23 августа мы прошли заморозку новых возможностей FeatureFreeze, а 30 августа пройдена заморозка внешнего вида UserInterfaceFreeze. А что мы видим на деле? В установщике Ubiquity появляется возможность шифровать всю систему и в Unity Greeter добавляется индикатор сети и возможность сетевого входа .

Шифрование всей Ubuntu на этапе установки.

Как вы видите, Canonical реализовала шифрование диска в графическом установщике Ubiquity для укрепления безопасности Ubuntu 12.10 Quantal Quetzal. Подобный функционал ранее был только в Alternate CD, но как вы знаете, Canonical планирует отказаться от альтернативных дисков .

Если вы выберите пункт "Шифровать новую установку Ubuntu для безопасности" ("Encrypt the new Ubuntu installation for security"), то на следующем шаге вам придётся ввести ключи шифрования.

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

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

И не путайте шифрование всех разделов Убунту с шифрованием Домашней папки!

Сеть и экран приветствия Unity Greeter.

С Unity Greeter произошли маленькие косметические изменения. Окно приветствия стало шире и ближе к центру. Скругленные углы сделали общий вид визуально мягче. Шрифт, отображающий имя пользователя, чуть уменьшили. Сохраняя общий стиль, поле ввода пароля подсветили тонким оранжевым цветом. Список доступных вам сессий изменился, вместо "простой список" теперь "кнопки".

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

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

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

Магическая лампа теперь включена по умолчанию.

Эффект для восстановления окон, известный как Джин (Genie) или Магическая лампа (Magic Lamp), был доступен в Compiz и ранее, но в версии Ubuntu 12.10 он будет включён по умолчанию.

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

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

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

Значит, действительно стойкая защита данных на диске это шифрование не отдельных файлов и папок, а всего раздела. Более того, для надежной защиты необходимо шифрование всего диска. "На поверхности" не должно оставаться ничего. В этой статье будет дана инструкция как создать шифрованный системный раздел и диск в ОС Linux Ubuntu.

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

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

  • Системная область - обозначается как root или / .
  • Загрузочная область - обозначается как /boot root в виде папки.
  • Область пользовательских данных - обозначается как /home . Может располагаться на отдельном разделе или на разделе root в виде папки.
  • Область виртуальной памяти - обозначается как swap . Чаще всего размещается на отдельном разделе, но может располагаться на разделе root в виде файла.

Защищать нужно все эти области.

В статье будет рассмотрена упрощенная конфигурация - swap и /boot на отдельных разделах, а root и /home совмещены на одном разделе. Но для более сложных случаев технология защиты будет такая же.

С шифрованием областей root, swap и /home никаких трудностей нет, а вот с защитой /boot есть проблема. Дело в том, что из этой области системный загрузчик запускает initrd и ядро Linux. Если эту область зашифровать, тогда загрузчик не сможет запустить ядро и соответственно запуск ОС будет невозможен. То есть зашифровать /boot нельзя, но и оставлять открытой тоже нельзя, ведь в этом случае будет возможна подмена ядра, на другое, содержащее зловредный код, который перехватит пароль для расшифровки диска..

Выход в том, чтобы разместить раздел /boot на съемном носителе, на флешке. Флешка будет своего рода электронным ключом к системе. Без нее запуск ОС с зашифрованного диска будет невозможен. То есть защита раздела /boot осуществляется на физическом уровне - извлечением его из компьютера.

Таким образом общая схема защиты такова:

  • Разделы root, swap и /home размещаются на полностью зашифрованном жестком диске.
  • Раздел /boot размещается на съемном носителе.

Установка шифрованной Убунты будет выполняться с использованием Ubuntu Live. Почему именно Live? Ведь дистрибутив Alternate позволяет сделать тоже самое без плясок с бубном, там опции шифрования есть в установщике. Лично мне не нравится то, что Alternate это исключительно установочный дистрибутив, больше его никак нельзя использовать - ни для диагностики, ни для работы. К тому, же установщик Alternate работает в консоли, а это как-то архаично в 21 веке. Так, что Live.

Эта инструкция применима к двум LTS релизам 10.04 и 12.04, в обоих случаях все делается одинаково. Хотя на практике проверено только на этих двух релизах, на других это тоже должно работать.

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

Установка LVM

Установить подключение к Интернет. Затем выполнить две команды:

sudo apt-get update
sudo apt-get install lvm2

Можно заранее скачать, записать на флешку или диск пакеты libdevmapper-event, lvm2, watershed и затем установить их командой dpkg. Но Интернет все равно потребуется на финальной стадии.

Подготовка жесткого диска и флешки

На жестком диске нужно создать один пустой, неразмеченный в файловую систему раздел. Формат диска может MS-DOS или GPT - это неважно. Этот раздел будет выполнять роль криптоконтейнера.

На флешке также нужно создать один раздел, но с файловой системой Ext3.

Шифрование системного диска

Шифрование всего раздела на жестком диске выполняется командой:

sudo cryptsetup --cipher aes-xts-plain --key-size 512 --verify-passphrase luksFormat /dev/sda1

Важное примечание.

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

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

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

sudo cryptsetup luksOpen /dev/sda1 crypted

Эта команда выдаст запрос на ключевую фразу, которая была введена в предыдущей команде.

Создание шифрованных разделов

Следующий этап это создание шифрованных разделов внутри криптоконтейнера LUKS. Для создания этих разделов используется механизм LVM.

sudo pvcreate /dev/mapper/crypted
sudo vgcreate ubuntu /dev/mapper/crypted
sudo lvcreate -L 2600M -n swap ubuntu
ssudo lvcreate -l 100%FREE -n root ubuntu
sudo mkswap /dev/mapper/ubuntu-swap
sudo mkfs.ext3 /dev/mapper/ubuntu-root

Примечание .

Размер swap раздела должен быть примерно на 30% больше чем размер оперативной памяти. Раздел root не менее 5-7 Гигабайт.

Установка Ubuntu на шифрованный диск

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

На этот запрос нужно ответить "Да". Это флешка, куда нужно будет устанавливать /boot раздел. Такой запрос будет выдан если вы забудете отмонтировать флешку до запуска установщика.

И вот таким образом подключить разделы:

Шифрованные разделы для установки Ubuntu это /dev/mapper/ubunu-root, /dev/mapper/ubunu-swap. Раздел /boot на флешке (это sdb1).

В окне установщика, на этапе шаг 8 нужно нажать кнопку "Дополнительно" и убедиться в том, что загрузчик будет установлен на флешку:

В Ubuntu 12.04 и разделы и загрузчик в одном окне:

После этого в окне шага 8 нужно нажать кнопку "Установить" и дождаться окончания установки. По завершении установки, установщик предложит перезагрузить компьютер. Перезагружать нельзя! Нужно остаться в Live Ubuntu. Дело в том, что в установленной на жесткий диск Ubuntu нет пакета lvm2, а это означает, что загрузка системы с жесткого диска будет невозможна.

Установка LVM на жесткий диск

Для установки lvm2 в свежеустановленную Ubuntu на жестком диске, нужно выполнить следующие команды:

sudo mount /dev/mapper/ubuntu-root /mnt
sudo mount /dev/sdb1 /mnt/boot
sudo mount -o bind /dev /mnt/dev
sudo mount -t proc proc /mnt/proc
sudo mount -t sysfs sys /mnt/sys

sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt /bin/bash
echo "crypted UUID=$(ls -la /dev/disk/by-uuid | grep $(basename /dev/sda1) | cut -d " " -f 9) none luks" >> /etc/crypttab
apt-get update
apt-get install cryptsetup lvm2
exit

Примечание 1. В Ubuntu 12.04 вместо cut -d " " -f 9 нужно писать cut -d " " -f 11 ! Кроме того, я советую после команды echo ... /etc/crypttab выполнить команду cat /etc/crypttab для проверки того, что строка записана верно:

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

Теперь можно перезагружать компьютер и пользоваться установленной зашифрованной Ubuntu. Конечно в BIOS необходимо указать загрузку с той флешки, где установлен раздел /boot!

В установленной таким способом Ubuntu можно использовать даже спящий режим (hibernate), без опасения, что содержимое памяти, сброшенное на диск, станет доступно злоумышленнику.

Примечание 1

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

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

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

Поэтому важно принимать и общие меры защиты. Не "шарахаться" где попало в Интернет. Не устанавливать непроверенные программы. Использовать брандмауэр. А при более серьезных требованиях к безопасности нужно использовать tcb и SELinux .

Примечание 2

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

Иван Сухов, 2012 г

При написании этой статьи была использована информация из публикации в

: - Русский

Активная разработка страницы завершена

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

Шифрование данных в Debian

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

Шифрование при помощи cryptsetup

Установим необходимые компоненты:

# apt-get install cryptsetup

Стандартный синтаксис

/dev/sda2 . Введем команду:

# cryptsetup create sda2_crypt /dev/sda2

Данная команда создаст шифрованное подключение к нашему диску. В каталоге /dev/mapper появится новое устройство с запрошенным нами именем: /dev/mapper/sda2_crypt , обращаясь к которому мы используем шифрованный доступ к диску. В случае с LUKS имя будет /dev/mapper/sda2_crypt

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

# dd if=/dev/sda2 of=/dev/mapper/sda2_crypt

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

# mkfs.ext3 /dev/mapper/sda2_crypt

В последствии можно будет смонтировать этот диск куда угодно:

# mount /dev/mapper/sda2_crypt /path/to/mount/point

Проверить целостность данных (как обычно, лучше использовать только в размонтированном состоянии):

# fsck.ext3 /dev/mapper/sda2_crypt

И даже расшифровать обратно, если мы больше не хотим использовать шифрование:

# dd if=/dev/mapper/sda2_crypt of=/dev/sda2

LUKS синтаксис

Вышеуказанные действия можно выполнить в соответствии со стандартом LUKS

Инициализируем раздел:

cryptsetup luksFormat /dev/sda2

Подключаем в систему:

cryptsetup luksOpen /dev/sda2 sda2_crypt

Форматируем:

mkfs.ext4 -v -L DATA /dev/mapper/sda2_crypt

Монтируем:

mount /dev/mapper/sda2_crypt /mnt/data

Раздел можно вручную отключить о системы

cryptsetup luksClose sda2_crypt

Подключение при запуске

Для этой цели используется файл crypttab .

Для нашего диска пропишем в него следующую строку:

nano /etc/crypttab # имя mapper устройство ключ параметры/опции # При стандартном синтаксисе sda2_crypt /dev/sda2 none aes-cbc-plain:sha256 # и\или под стандарту LUKS sda2_crypt /dev/sda2 none luks

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

Если хотим монтировать вручную, то добавляем опцию noauto в поле "параметры/опции".

Подключение шифрованного раздела вручную по данным из /etc/crypttab

cryptdisks_start msda2_crypt

И отключение с заранее отмонтированной фс.

cryptdisks_stop sda2_crypt

Для автоматического монтирования фс на подключённом зашифрованном разделе добавляем строку в /etc/fstab

/dev/mapper/sda2_crypt /mnt/data ext4 defaults 0 0

Работа с ключами в LUKS

Раздел LUKS поддерживает 8 различных ключей, каждый из которых помещается в свой слот.

Cмотрим список используемых ключей

cryptsetup luksDump /dev/sda2

В LUKS могут использоваться 2 вида ключей – ключевые фразы и файлы.

Можно добавить ключевую фразу

cryptsetup luksAddKey /dev/sda2

Можно добавить ключевой файл (2048 bit) и выставить права доступа к нему.

dd if=/dev/urandom of=/root/ext2.key bs=512 count=4 cryptsetup luksAddKey /dev/sda2 /root/ext2.key chmod 400 /root/sda2.key cryptsetup -d /root/sda2.key luksOpen /dev/sda2 sda2_crypt

Для подключения при запуске по ключу правим /etc/crypttab

nano /etc/crypttab sda2_crypt /dev/sda2 /root/sda2.key luks

Можно удалить ключевую фразу или ключ из раздела

cryptsetup luksKillSlot /dev/sda2 1

Аварийное монтирование в "чужом" дистрибутиве

От проблем никто не застрахован и иногда нужно получить доступ к зашифрованному разделу из аварийного LiveCD диска.

Загружаемся, подключаем раздел в систему и монтируем фс:

cryptsetup luksOpen /dev/sda2 sda2_crypt mount -t ext4 /dev/mapper/sda2_crypt /mnt/backup

После работы отмонтируем фс и отключим зашифрованный раздел от системы

umount /mnt/backup cryptsetup luksClose sda2_crypt

Сообщения об ошибках при выключении

Если корневой раздел зашифрован, то при выключении будет выдаваться сообщение

stopping early crypto disks... failed

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

Аналогичная ситуация складыватеся и при использовании программного RAID содержащего корневой раздел. 8)

Шифрование при помощи модуля loop-aes

Шифрование раздела винчестера, флешки с помощью пароля

В данном howto описан метод шифрования AES256 , другие методы можно применять аналогично (заменив название метода на соответствующее). Нам понадобятся следующие пакеты:

# apt-get install loop-aes-utils loop-aes-modules-`uname -r`

Примечание : если Вы используете ядро для которого в репозитарии нет нужного loop-aes-modules, Вы можете установить модули следующими командами:

# apt-get install module-assistant loop-aes-source # module-assistant a-i loop-aes

Начальный этап

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

Выберем раздел диска (или флешки) который мы хотим зашифровать, например это будет /dev/sda2 . Введем команду:

# losetup -e AES256 -T /dev/loop0 /dev/sda2

После выполнения данной команды, все обращения к девайсу /dev/loop0 будут шифроваться и в шифрованном виде перенаправляться в девайс /dev/sda2 . Теперь мы имеем одновременно шифрованный и нешифрованный каналы к устройству хранения данных. Шифруются данные при помощи пароля который вы указали при выполнении losetup.

Теперь мы можем например отформатировать девайс:

# mkfs.ext3 /dev/loop0

Можем смонтировать его:

# mount /dev/loop0 /path/to/mount

можем отключить шифрование:

# losetup -d /dev/loop0

и самое главное, можем зашифровать раздел без потери данных :

# dd if=/dev/sda2 of=/dev/loop0

а так же расшифровать, если решаем что шифрование не наш метод:

# dd if=/dev/loop0 of=/dev/sda2

Ну и самое приятное, мы можем делать проверки файловой системы на целостность:

# fsck.ext3 /dev/loop0

Данная возможность доступна далеко не во всех методах шифрования разделов.

Повседневное использование

Если у Вас уже была запись о разделе /dev/sda2 в Вашем /etc/fstab , то Вам нужно просто добавить опции, а если не было то прописать примерно следующее:

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256 0 0

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

Если Вы не хотите чтобы процесс загрузки прерывался запросом пароля, то можно добавить опции noauto ,user в запись /etc/fstab :

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256,noauto,user 0 0

Разумеется можно монтировать вручную (или из скрипта):

# mount /dev/sda2 /path/to/mount -o loop,encryption=AES256

Монтирование нескольких файловых систем

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

Допустим мы имеем зашифрованный раздел /dev/sda2 , который мы при каждой загрузке монтируем в каталог /mnt1 . Появился новый винчестер /dev/sdb1 и мы хотим чтобы он автоматически монтировался в каталог mnt2 при монтировании первого. Можно конечно создать общую систему на чем-то вроде LVM , однако можно и более простым путем пойти:

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

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0 /dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,cleartextkey=/mnt1/key.txt 0 0

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

Пароль хранится в виде plain/text это конечно не очень красиво, но он хранится на зашифрованном разделе (который можно и отмонтировать). Можно вместо этого использовать gpg -ключ, однако много безопасности это не добавит (если уж смогут спереть ключ, то большой разницы какой этот ключ не будет), вариант шифрования с gpg -ключом описан в man losetup , здесь я лишь приведу пример записи в fstab :

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0 /dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,gpgkey=/mnt1/key.gpg 0 0

Примечания

Дополнительную информацию о поддерживаемых алгоритмах шифрования смотри в man losetup , там же можно посмотреть описание других опций программы losetup .

Если у Вас возникнут проблемы при установке модулей AES, то читайте документацию идущую с пакетом loop-aes-source .

GRUB и шифрованный корневой диск

При установке корневого раздела на зашифрованный диск GRUB может в главном меню показывать кракозябры. Это происходит из-за недоступности стандартного шрифта /usr/share/grub/unicode.pf2. Копируем шрифт

cp /usr/share/grub/unicode.pf2 /boot/grub/

Указываем настройку

nano /etc/default/grub GRUB_FONT=/boot/grub/unicode.pf2

Применяем настройку:

update-grub

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

Введение

Шифрование дисков будем производить стандартными средствами 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). Как правило, это нулевой.

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

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

Windows 8