Как зашифровать диск в linux

Обновлено: 07.07.2024

Данная статья рассказывает, как создать надёжно зашифрованное хранилище данных на жестком диске компьютера и при этом не сломать спящий и ждущий режимы. Особенно актуально это для владельцев ноутбуков, т. к. в отличие от стационарных компьютеров шанс кражи/утери ноутбука выше и возникает обоснованное желание хранить информацию в зашифрованном виде. Однако, предлагаемая по-умолчанию опция шифрования домашней папки при помощи ecryptfs во-первых не шифрует корневой раздел системы 1) , а во-вторых ecryptfs шифрует раздел swap с применением случайно сгенерированного ключа, таким образом, перестает работать такая нужная в ноутбуках опция как спящий режим 2) 3) .

Предлагается же создать один большой зашифрованный раздел размером с весь диск компьютера 4) , поверх которого развернуть виртуальную группу LVM, в которой создать обычные (не шифрованные с точки зрения ОС) разделы /, /home и swap. При этом, пользователю придётся вводить пароль при каждом включении компьютера (даже при выходе из спящего режима), однако, за счёт смещения шифрования на более низкий уровень, ОС «не заметит» этого и все функции будут работать.

Начиная с версии 12.10 возможность зашифровать весь диск целиком добавлена в варианты установки Ubuntu в стандартном инсталляторе.

Установка

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

Подразумевается, что вы выполняете новую установку системы, если это не так — предварительно сохраните все свои данные и настройки, т. к. описанный ниже процесс подразумевает потерю всех данных на жёстком диске компьютера.

Загрузите систему с alternate — диска, выберите язык и приступите к установке:

Загрузите систему с alternate — диска, выберите язык и приступите у установке.

Выберите ручной режим разметки диска:

Выберите ручной режим разметки диска.

Если у вас новый диск или, если вы хотите очистить на нем таблицу разделов, выберите строку с названием диска:

Если у вас новый диск.

и создайте на нем новую таблицу разделов:

. создайте на нем новую таблицу разделов

После этого, создайте на диске раздел /boot, выбрав указателем свободное место на диске:

создайте раздел

создайте раздел

Укажите небольшой объем, от 300 МБ до 1ГБ, т.к. для /boot этого будет вполне достаточно:

от 300 до 1000 МБ
лучше сделать раздел первичным
и расположить в начале диска

В списке «использовать как» укажите /boot, не забудьте сделать раздел загрузочным:

не забудьте сделать его загрузочным

Далее, не размечая оставшееся место, переходим в пункт «Настроить шифрование для томов»:

переходим в пункт "Настроить шифрование для томов"

Соглашаемся записать изменения:

соглашаемся на запись изменений

Выбираем «Create encrypted volumes»:

Выбираем "Create encrypted volumes"

Далее выбираем (при помощи кнопки Space ) свободное место на диске и жмём «Продолжить»:

выбираем свободное место

Если у вас нет паранойи, можете просто нажать «Настройка раздела закончена», если есть - установите параметр «Стереть данные» в «Да»:


Снова соглашаемся на запись изменений на диск:

Соглашаемся на запись изменений

Далее выбираем «Finish»:

Выбираем "Finish"

Далее установщик попросит вас ввести парольную фразу, которой он «закроет» диск:

введите пароль

После этого подтвердите пароль:

подтвердите пароль

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

используйте сильный пароль

После создания шифрованного тома, нужно настроить LVM:

теперь настраиваем LVM

Снова соглашаемся на запись изменений:

ну да, опять

Создаем группу томов:

создаем группу томов

даем ей имя

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

тот, что crypt

После этого создаем логические тома:

создаем логические тома

Пример для swap:

для swap
для swap

Аналогично создаем диски для root и home, выделяя им желаемый объем. Если у вас большой диск - можете оставить некоторый его объем свободным, позднее вы сможете добавить его к любому логическому тому 6) .

После этого выбирайте «Закончить»:

Закончить

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


Выбирайте разделы, находящиеся в блоках, начинающихся на LVM, они названы, согласно именам, данным им вами при создании логических томов, например, в данном случае, это LV home, LV swap и LV root. Стоит заметить, что раздел root 7) не нужно делать загрузочным, т.к. роль загрузочного у нас выполняет отдельный раздел /boot.

По окончании, выбирайте «Закончить разметку и записать изменения на диск»:

Закончить.

И снова соглашаемся с записью изменений на диск (заодно можно ещё раз проверить все ли вы правильно разметили):

Проверяем и жмём "Да"

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

После завершения установки и перезагрузки система предложит вам ввести пароль для разблокировки шифрованного диска. Введите пароль и нажмите Enter .

Изменение пароля

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

Работа с live-cd

Загрузитесь с live-cd 8) , выберите «Попробовать Ubuntu» и дождитесь полной загрузки системы. После этого, настройте подключение к интернету. Затем откройте терминал и выполните:

После успешной установки, переходите к этапу «Смена пароля».

Смена пароля

Описание

При установке диск шифруется при помощи связки LUKS и dm-crypt. LUKS использует в качестве идентификаторов доступа key slots, которые в данном случае выступают в виде пароля, однако могут быть и ключом. Всего доступно 8 слотов. По умолчанию (при создании шифрованного диска) используется слот 0.

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

Для операций со слотами — сначала нужно определиться с диском, на котором установлено шифрование. Выполните в терминале команду

Вывод будет примерно следующим:

Она даст вам список разделов на диске. Нужно найти тот раздел, на котором присутствует зашифрованный раздел. В данном случае это sda5.

Теперь можно просмотреть состояние слотов на этом разделе:

Видим, что слот 0 содержит пароль, а слоты 1-7 имеют статус DISABLED.

Устанавливаем новый ключ

Ввиду того, что необходим как минимум один активный слот, сменить пароль в обычном понимании на таком диске невозможно. Однако, можно создать пароль в другом слоте, а потом удалить первый слот. Чтобы создать новый ключ, выполните:

Если теперь посмотреть слоты, то станет видно, что статус ENABLED стоит теперь уже у двух слотов:

Теперь можно удалить старый пароль, находящийся в слоте 0:

И видим, что слот 0 стал DISABLED.

Заключение

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

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

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

Методы шифрования данных в Linux

Шифрование на уровне файловой системы:

  • 1. eCryptfs - это криптографическая файловая система Linux. Она хранит криптографические метаданные для каждого файла в отдельном файле, таким образом, что файлы можно копировать между компьютерами. Файл будет успешно расшифрован, если у вас есть ключ. Это решение широко используется для реализации зашифрованной домашней директории, например, в Ubuntu. Также ChromeOS прозрачно встраивает эти алгоритмы при использовании сетевых устройств для хранения данных (NAS).
  • 2. EncFS - обеспечивает шифрованную файловую систему в пространстве пользователя. Она работает без каких-либо дополнительных привилегий и использует библиотеку fuse и модуль ядра для обеспечения интерфейса файловой системы. EncFS - это свободное программное обеспечение и она распространяется под лицензией GPL. В наши дни эта файловая система уже устарела потому что в ней было найдено несколько уязвимостей. Вместо неё популярность набирают другие утилиты.

Блочное шифрование на уровне устройства:

  • Loop-AES - быстрая и прозрачная файловая система, а также пакет для шифрования раздела подкачки в Linux. Исходный код программы давно не изменялся. Она работает с ядрами 4.x, 3.x, 2.2, 2.0.
  • TrueCrypt - это бесплатное решение с открытым исходным кодом для шифрования диска в операционных системах Windows 7 / Vista /XP / Mac OS X, а также в Linux.
  • dm-crypt+LUKS - dm-crypt - это прозрачная подсистема для шифрования диска в ядре 2.6 и более поздних версиях. Поддерживается шифрование целых дисков, съемных носителей, разделов, томов RAID, программного обеспечения, логических томов и файлов.

В этой инструкции мы рассмотрим шифрование жесткого диска на Linux с помощью алгоритма Linux Unified Key Setup-on-disk-format (LUKS).

Как работает LUKS?

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

Чтобы выполнить шифрование диска linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с прозрачным для файловой системы и пользователя шифрованием. Фактически все данные лежат на зашифрованном физическом разделе. Если пользователь пытается записать данные на виртуальное устройство, они на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция - данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю. Обычно для шифрования используется метод AES, потому что под него оптимизированы большинство современных процессоров. Важно заметить, что вы можете шифровать не только разделы и диски, но и обычные файлы, создав в них файловую систему и подключив как loop устройство.

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

Утилита Cryptsetup

Утилита Cryptsetup позволят облегчить шифрование раздела Linux с помощью модуля dm-crypt. Давайте сначала ее установим.

В Debian или Ubuntu, для этого используйте такую команду:

suduo apt install cryptsetup


В дистрибутивах, основанных на Red Hat это будет выглядеть так:

sudo yum install cryptsetup-luks

Синтаксис запуска команды такой:

$ cryptsetup опции операция параметры_операции

Рассмотрим основные операции, которые можно сделать с помощью этой утилиты:

  • luksFormat - создать зашифрованный раздел luks linux;
  • luksOpen - подключить виртуальное устройство (нужен ключ);
  • luksClose - закрыть виртуальное устройство luks linux;
  • luksAddKey - добавить ключ шифрования;
  • luksRemoveKey - удалить ключ шифрования;
  • luksUUID - показать UUID раздела;
  • luksDump - создать резервную копию заголовков LUKS.

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

Шифрование диска Linux

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

1. Создание раздела

В этом примере мы будем шифровать раздел /dev/sda6, но вместо него вы можете использовать целый жесткий диск или просто один файл, заполненный нулями. Создаем шифрованный раздел:

sudo cryptsetup -y -v luksFormat /dev/sdb1

Эта команда выполнит инициализацию раздела, установит ключ инициализации и пароль. Сначала надо подтвердить создание виртуального шифрованного диска набрав YES, затем нужно указать пароль. Указывайте такой пароль, чтобы его потом не забыть.

Выполните такую команду чтобы открыть только что созданный раздел с помощью модуля dm-crypt в /dev/mapper, для этого понадобится ввести пароль, с которым выполнялось шифрование luks linux:

sudo cryptsetup luksOpen /dev/sdb1 backup2

Теперь вы можете увидеть новое виртуальное устройство /dev/mapper/backup2 созданное с помощью команды luksFormat:

ls -l /dev/mapper/backup2

Чтобы посмотреть состояние устройства выполните:

sudo cryptsetup -v status backup2

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

cryptsetup luksDump /dev/sdb1


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

2. Форматирование раздела

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

dd if=/dev/zero of=/dev/mapper/backup2

Работа утилиты может занять несколько часов, чтобы иметь возможность наблюдать за процессом, используйте pv:

pv -tpreb /dev/zero | dd of=/dev/mapper/backup2 bs=128M

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

sudo mkfs.ext4 /dev/mapper/backup2


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

3. Монтирование раздела

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

sudo mount /dev/mapper/backup2 /backup2


4. Отключение раздела

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

sudo umount /backup2

sudo cryptsetup luksClose backup2

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

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

sudo cryptsetup luksOpen /dev/sdb1 backup2

Теперь можем монтировать:

sudo mount /dev/mapper/backup2 /backup2

6. Проверить файловую систему luks

Поскольку после открытия раздела с помощью luks linux, этот раздел воспринимается системой, как и все другие, вы можете просто использовать утилиту fsck:

sudo umount /backup2

sudo fsck -vy /dev/mapper/backup2

sudo mount /dev/mapper/backup2 /backu2

7. Изменить парольную фразу luks

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

sudo cryptsetup luksDump /dev/sdb1

Затем создадим новый ключ:

sudo cryptsetup luksAddKey /dev/sdb1


И удалим старый:

sudo cryptsetup luksRemoveKey /dev/sdb1

Сейчас вам придется ввести еще старый пароль.

Выводы

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


Посмотрим, как с помощью системы на базе спецификации Linux Unified Key Setup (LUKS) и утилиты Cryptsetup можно зашифровать флэш-накопители, внешние жёсткие диски и прочие переносные устройства, хранящие дорогую вашему сердцу информацию.

Чаще всего, пользователи рассуждают достаточно просто: накопители в безопасности, пока их никто не украл. Некоторые идут в размышлениях дальше: если для входа в систему нужно знать пароль — злоумышленнику будет сложно получить доступ к данным на украденном диске. Успокаиваясь на этой мысли, они забывают задать себе важный вопрос: к чему именно мешает получить доступ их пароль на самом деле?

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

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

Если время сильно ограничено, злодеи действительно могут украсть накопитель и взять работу на дом. Особенно легко это им удаётся, если он внешний и подключён через USB. В этой статье речь пойдёт о простом инструменте, позволяющем защитить от несанкционированного доступа данные на внешних накопителях. Даже если они уже попали в руки к злоумышленникам. Речь пойдёт о шифровании дисков в операционных системах семейства Linux.

Linux Unified Key Setup (LUKS) — это система шифрования дисков, которая хранит данные в зашифрованном физическом разделе. Зашифровать их помогает модуль ядра dm-crypt, позволяющий создавать виртуальное блочное устройство, с которым взаимодействует пользователь.

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

Шифрование на этапе инсталляции

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


Изображение: Seth Kenlon, CC BY-SA 4.0

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

Шифрование внешних накопителей

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

LUKS вместе с утилитой Cryptsetup позволяет шифровать внешние накопители почти так же просто, как и при инсталляции ОС.

Как это сделать с помощью LUKS

ВАЖНО: внешний накопитель должен быть либо пустым, либо содержать ненужные вам данные. Так что, если оба этих условия не выполнены, нулевым шагом должен стать бэкап.

1. Подключите и найдите свой внешний диск

Я для примера взял небольшую флэшку. Представим, что путь к ней выглядит как /dev/sdX. Утилита lsblk покажет мне вот такую информацию о блочных устройствах:


Всё правильно, моя флэшка обнаружена. Да, это именно она. Я точно знаю, что её размер 1.8Gb. В списке всего один диск (disk) с таким размером (ему соответствует один раздел part).
Я уделяю такое внимание этой, казалось бы, мелочи, так как дисков может быть много. И в случае ошибки на следующем шаге вы сотрёте с другого диска данные, которые вам всё ещё нужны.

2. Очистите диск

На этом шаге я обнуляю таблицу разделов диска:


Это, конечно, необязательно, но я люблю это состояние чистого листа.

3. Отформатируйте диск под LUKS

Используем для этого утилиту Cryptsetup. Её подкоманда luksFormat запускает первый этап создания зашифрованного раздела LUKS (позже мы создадим там файловую систему).
После этого появится предупреждение об удалении всех данных (которые могли всё ещё оставаться на диске). Кроме того, вас попросят придумать и ввести парольную фразу для диска.

4. Откройте LUKS-том

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


Я придумал фразу (а точнее, просто пароль в одно слово) «vaultdrive». У вас будет какой-то свой вариант. Чтобы посмотреть список открытых томов, нужно вывести содержимое каталога /dev/mapper:


Чтобы закрыть LUKS-том vaultdrive нужно написать:


После этого он исчезнет из каталога /dev/mapper.

5. Создайте файловую систему

Создайте файловую систему, чтобы иметь возможность хранить свои данные на диске. Я выбрал XFS, но это далеко не единственный вариант: можно использовать, например, ext4 или JFS. И многие другие.

Финал: монтирование LUKS-тома

Можно делать это через терминал. Например, мы хотим использовать для нашей цели директорию /mnt/hd


А рабочий стол KDE, например, позволяет указать диск для монтирования в специальном разделе с настройками. Но и там я тоже должен вводить пароль или парольную фразу, прежде чем произойдёт монтирование.


Изображение: Seth Kenlon, CC BY-SA 4.0

А какие инструменты для шифрования внешних дисков на Linux используете вы? Какие инструменты используете для аналогичных задач на macOS и Windows?


Недорогие VDS для любых задач. Используем новейшее железо, лучший дата-центр в Москве уровня надёжности TIER IV, бесплатно предоставляем защиту от DDoS-атак на любом тарифном плане, который можно создать самостоятельно в течение минуты.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

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

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

Каждая из этих систем имеет свои преимущества и недостатки, поэтому споры о том, что именно использовать, не прекращаются до сих пор. Драйвер loop-aes отличается простотой реализации, непревзойденной производительностью и стойкостью к взлому, однако метод его установки настолько нетривиален, что может отпугнуть даже продвинутых пользователей (мы не будем рассматривать loop-aes, ему была посвящена целая статья в одном из предыдущих номеров). LUKS/dm-crypt, с другой стороны, опирается на стандартную подсистему шифрования носителей, появившуюся еще в ядре версии 2.5 и поддерживающую десятки различных криптоалгоритмов. LUKS/dm-crypt доступен в любой Linux-системе, но, в отличие от loop-aes, до сих пор страдает от некоторых неисправленных проблем и менее производителен. TrueCrypt, пришедший в Linux из мира Windows-систем, медленнее LUKS/dm-crypt, но, в отличие от последнего, предоставляет по-настоящему кроссплатформенное решение (тома TrueCrypt могут быть прочитаны в Windows и Mac OS X), обладает встроенным графическим интерфейсом и позволяет создавать так называемые скрытые тома (невидимые зашифрованные тома внутри зашифрованных томов). EncFS – самое медленное, наиболее уязвимое, но настолько притягательно простое и удобное решение, что его нельзя обойти стороной.

Если говорить о стойкости шифрования и пригодности для повседневного применения, то здесь все в порядке, по крайней мере, у первых трех претендентов. Все три системы производят шифрование на лету и находятся ниже файловой системы, поэтому взломщик не имеет ни единого шанса узнать какие-либо подробности о хранящихся внутри тома данных. Каждая система защищена от так называемой Watermark-атаки, с помощью которой можно определить наличие в томе определенных типов файлов (dm-crypt до сих пор использует режим шифрования CBC (Сipher Block Chaining), уязвимый для этой атаки, но его легко можно изменить на устойчивый ESSIV, LRW или XTS). Все системы могут использовать различные алгоритмы шифрования, такие как, например, AES-256, Serpent или Twofish. Для получения доступа к данным все системы позволяют использовать зашифрованный ключ, хранящийся на USB-брелке или смарт-карте.

В стороне от loop-aes, LUKS/dm-crypt и TrueCrypt стоит простая и с виду незамысловатая программа EncFS. В отличие от своих тяжеловесных собратьев, она работает поверх уже существующей файловой системы и поэтому раскрывает злоумышленнику кучу самой разнообразной информации, включая всю структуру каталогов файловой системы, время создания и модификации файлов, их владельца и размер. EncFS шифрует каждый файл индивидуально, поэтому скрытыми от посторонних остаются только сами данные, хранящиеся внутри файлов, и их имена. Такая особенность делает EncFS неприменимой для хранения серьезных данных, но наделяет ее несколькими достоинствами: файловая система может динамически расти, инкрементальные системы бэкапа будут правильно обрабатывать файлы, зашифрованные EncFS, другие виртуальные файловые системы также могут быть зашифрованы (например, ты можешь подключить curlftpfs, создать каталог, подключить к нему encfs, и все заливаемые в него данные сохранятся на сервере в зашифрованном виде).

LUKS/dm-crypt

Система криптозащиты дисков LUKS/dm-crypt, как нетрудно догадаться, состоит из двух основных компонентов:

  • dm-crypt – стандартная подсистема шифрования дисков Linux-ядра версии 2.6, которая опирается на подсистему Device Mapper (dm), способную отображать дисковые устройства друг на друга, и криптографическое API (Crypto API), так же предоставляемое ядром и предназначенное для выполнения различных криптографических функций.
  • LUKS (Linux Unified Key Setup) – стандарт шифрования дисковых устройств для Linux, который описывает дисковый формат для зашифрованных данных.

Для создания LUKS-совместимых шифрованных дисков предназначена утилита под названием cryptsetup-luks, которая в отдельных дистрибутивах (например, Ubuntu) ловко замаскирована под обычную cryptsetup. Поэтому для ее установки достаточно выполнить простую команду:

$ sudo apt-get install cryptsetup

Больше ничего инсталлировать не нужно, dm-crypt и все необходимые криптомодули уже есть в дистрибутиве. Но перед тем как начать шифрование, их придется загрузить:

$ sudo modprobe dm-crypt
$ sudo modprobe sha256
$ sudo modprobe aes

Чтобы модули загружались во время инициализации ОС, добавим их имена в файл /etc/modules:

Далее выбираем дисковый раздел, который хотим подвергнуть шифрованию, и забиваем его нулями (если в разделе есть данные, их необходимо сохранить в укромном месте):

$ sudo dd if=/dev/zero of=/dev/sda5 bs=4K

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

$ sudo dd if=/dev/random of=/dev/sda5 bs=4K

Инициализируем LUKS-раздел с помощью cryptsetup:

$ sudo cryptsetup luksFormat /dev/sda5 -c aes-xts-plain -s 256

Опция '-c' задает режим шифрования, в нашем случае это AES-XTS (имеет гораздо более высокий уровень защиты по сравнению с режимами CBC, ECB; устойчив к Watermark-атакам). Опция '-s' задает длину ключа шифрования в битах. Утилита cryptsetup запросит пароль, используемый для расшифровки ключа шифрования, а если говорить простым языком, для доступа к данным раздела. Попробуй придумать что-нибудь действительно сложное.

После того, как раздел будет инициализирован, его можно отобразить на другое блочное устройство с помощью Device Mapper и таким образом получить доступ к данным (все записываемые на эти устройства данные будут передаваться dm-crypt и попадать на физический раздел уже в зашифрованном виде):

$ sudo cryptsetup luksOpen /dev/sda5 имя

Теперь на разделе можно создать файловую систему и смонтировать ее:

$ sudo mkfs.ext4 /dev/mapper/имя -L метка
$ sudo mkdir /mnt/имя
$ sudo mount /dev/mapper/имя /mnt/имя

Размонтирование и отключение устройства от Device Mapper происходит в обратном порядке:

$ umount /mnt/имя
$ cryptsetup luksClose sda5

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

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

Шифрование домашнего каталога производится по точно такой же схеме с тем лишь исключением, что перед добавлением новой записи в /etc/fstab следует удалить старую запись, ссылающуюся на /home. При создании шифрованной флешки специальные записи в /etc/crypttab и /etc/fstab не требуются. Подсистема HAL сама определит наличие на устройстве хранения LUKS-раздела и передаст эту информацию среде рабочего стола (Gnome, KDE, XFCE), которая, в свою очередь, выведет на экран окно с просьбой ввести пароль. Единственное, что необходимо сделать – при первом монтировании флешки изменить права доступа на ее корневой каталог:

$ sudo chown -R юзер:юзер /media/имя
$ sudo chmod g+s /media/имя

Здесь юзер – это твое имя в системе, а имя – название метки, которую ты указал при создании файловой системы (опция '-L' утилиты mkfs).
Интересная особенность LUKS/dm-crypt заключается в возможности использования сразу нескольких ключей шифрования (а значит, и паролей) для одного дискового устройства. Это может понадобиться в многопользовательских системах для выделения каждому пользователю собственного пароля, расшифровывающего диск. Новые ключи добавляются в LUKS с помощью действия luksAddKey утилиты cryptsetup:

$ sudo cryptsetup luksAddKey /dev/sda5

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

$ sudo cryptsetup luksDelKey /dev/sda5 ID-ключа

Идентификатор нужного ключа ты найдешь в выводе следующей команды:

$ sudo cryptsetup luksDump /dev/sda5

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

$ dd if=/dev/urandom of=/путь/к/файлу bs=512 count=4

А затем используй его при инициализации LUKS-раздела:

$ sudo cryptsetup luksFormat -c aes-xts-plain -s 256 /dev/sda5 /путь/до/ключа

Для «открытия» раздела используй следующую команду:

$ sudo cryptsetup -d /путь/до/ключа luksOpen /dev/sda5 имя

TrueCrypt

Открытая система шифрования дисков TrueCrypt появилась для систем Windows еще в 2004 году, и уже через год в нее была добавлена поддержка Linux (версия 4.0), которая стала полноценной в 2008 году, когда была выпущена TrueCrypt 5.0 с графическим интерфейсом как для Windows, так и для Linux.

TrueCrypt в первую очередь предназначена для шифрования образов ФС, но может быть использована и для шифрования целых разделов. Так же, как и LUKS, Linux-версия TrueCrypt опирается на подсистему dm-crypt, но, в отличие от первой, использует fuse для монтирования зашифрованных устройств/образов. Это оставляет свой отпечаток на производительности и делает TrueCrypt более медленной в сравнении с LUKS, однако, и у нее есть свои сильные стороны.

Во-первых, TrueCrypt по-настоящему кроссплатформенна, версии ПО есть для Windows, Mac OS X и Linux, их ядро абсолютно одинаково, поэтому никаких проблем при переносе образов между системами возникнуть не может (для чтения LUKS-разделов под Windows есть программа FreeOTFE, но за ее поддержку отвечают сторонние разработчики). Во-вторых, TrueCrypt умеет создавать скрытые шифрованные тома внутри уже существующих томов, причем делает это так, что формально нельзя доказать их наличие. В-третьих, TrueCrypt создает тома такими, что их невозможно отличить от случайных данных, что полезно при сокрытии информации (LUKS, как было описано выше, добавляет к любому тому заголовок, по которому его легко найти). В-четвертых, TrueCrypt позволяет менять пароли или файлы ключей для тома без потери данных (LUKS требует пересоздания тома).

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

В процессе установки необходимо прочитать и согласиться с лицензией и ввести свой пароль в системе (или пароль рута). После этого TrueCrypt будет установлен в каталог /usr, захламляя систему неуправляемыми пакетным менеджером файлами (которые, правда, могут быть удалены с помощью команды truecrypt-uninstall.sh).

После установки запускаем команду truecrypt и видим перед собой графический интерфейс. Основное пространство окна занимает список смонтированных шифрованных образов/разделов, в верхней части располагается стандартное меню, а снизу – основные элементы управления программой: создать том (Create Volume), смонтировать, размонтировать, открыть существующий том и т.д. После нажатия на кнопку «Create Volume» ты попадешь в мастер создания томов. Он проведет тебя через все шаги создания зашифрованного тома, включая выбор носителя (файл или раздел), типа тома (обычный или скрытый), ввод полного пути до файла тома или выбор устройства, выбор алгоритма шифрования и хеширования ключей, ввод размера тома, ввод пароля для доступа, выбор файловой системы (FAT, Ext2 или Ext3) и т.д. Все просто и понятно. После того как том будет создан, его можно найти с помощью кнопки «Select File» в нижней части окна программы, ввести пароль доступа, и том появится в списке подключенных томов. Клик на томе автоматически откроет стандартный файловый менеджер. После окончания работы можно нажать «Dismount All» и выйти из программы.

Не каждый пользователь будет рад графическому интерфейсу, поэтому у TrueCrypt есть еще один тип интерфейса: интерактивный текстовый режим, активируемый с помощью флага '-t'. Создание тома в этом режиме очень похоже на создание тома, с использованием графического мастера. Ты просто запускаешь команду «truecrypt -t -c» и отвечаешь на все те же стандартные вопросы. По окончании будет создан образ (или TrueCrypt'ный том внутри раздела), который можно подключить с помощью следующей команды:

$ truecrypt -t /путь/до/образа /точка/монтирования

для размонтирования используется флаг '-d':

Замечу, что TrueCrypt совсем не уступает LUKS по степени обеспечения безопасности зашифрованных данных. В последней версии программы используется все тот же режим шифрования XTS, который мы использовали при создании зашифрованных разделов с помощью LUKS. В качестве алгоритмов шифрования могут быть использованы алгоритмы AES, Twofish и Serpent, ни один из них еще не был скомпрометирован. Более того, TrueCrypt позволяет использовать так называемые каскады алгоритмов, когда зашифрованный одним алгоритмом блок данных повторно шифруется другим.

EncFS

Виртуальная файловая система EncFS распространяется в виде обычного дистрибутивного пакета и не требует для своей работы ничего, кроме поддержки фреймворка fuse в ядре, libfuse, OpenSSL и небольшой библиотеки для логирования. Для инсталляции EncFS достаточно установить пакет с одноименным названием:

$ sudo apt-get install encfs

Создать зашифрованную с помощью EncFS файловую систему очень просто, для этого подойдет любой каталог. В качестве примера создадим два пустых подкаталога в /tmp, директория crypted будет содержать данные после их шифрования с помощью EncFS, а decrypted использоваться просто как точка монтирования для нее же:

$ cd /tmp
$ mkdir crypted decrypted

Подключим к каталогам EncFS:

$ encfs /tmp/crypted /tmp/decrypted

Теперь необходимо ответить на несколько вопросов. Первый вопрос: выбор режима работы EncFS с пользователем. Их всего два: expert (буква «x») и paranoid (буква «p»). Выбрав первый вариант, ты сможешь задать алгоритм шифрования (AES или Blowfish), длину ключа, такие вещи как Initialization Vector (если ты не знаешь, что это такое, можешь жать <Enter> для выбора ответа по умолчанию) и т.д. В режиме paranoid программа сама ответит на свои вопросы и предложит ввести пароль для доступа к данным.

Стоит сказать, что, хотя для большинства пользователей режим paranoid будет более правильным выбором, режим expert открывает некоторые возможности для оптимизации. Например, алгоритм Blowfish быстрее AES, но он не используется по умолчанию просто потому, что нелегален для частного использования в некоторых странах. Также система по дефолту устанавливает блок данных ФС равным 1024 байт, хотя лучшую производительность EncFS показывает при установке размера блока равным размеру страницы оперативной памяти. То есть 4096 байт для x86.

Но вернемся к нашему зашифрованному каталогу. Перейдем в каталог decrypted и создадим несколько файлов:

$ cd decrypted
$ echo qwerty > file1
$ echo asdfgh > file2
$ echo zxcvbn > file3

Отключим EncFS и взглянем на результат:

$ cd ..
$ fusermount -u /tmp/decrypted
$ cd crypted
$ ls

Как видишь, EncFS полностью скрыла имена и данные файлов, но оставила почти все метаданные на виду. Кроме того, EncFS создала небольшой скрытый файл, начинающийся с «.encfs» и заканчивающийся номером версии. Файл содержит в себе метаданные, такие как опции шифрования (алгоритм, длина ключа), заголовки MAC (Message authentication code) и размер блоков шифрования.

Что лучше?

Ситуация с шифрующими системами в Linux весьма неоднозначна. С одной стороны, здесь есть стандартная реализация под названием LUKS/dm-crypt, обладающая всеми присущими криптосистеме функциями/свойствами и поддерживаемая из коробки самыми популярными дистрибутивами. С другой стороны, у LUKS/dm-crypt есть серьезные конкуренты, которые уделывают ее по нескольким характеристикам. Так что однозначный выбор сделать трудно. Я бы рекомендовал использовать LUKS/dm-crypt или loop-aes для повседневного использования и прибегать к помощи TrueCrypt, когда необходимо создать кроссплатформенный том, и EncFS, когда другие системы не могут быть использованы (например, шифрованный бэкап).

LUKS/dm-crypt и образы ФС

LUKS/dm-crypt вполне пригоден и для создания образов ФС, которые можно использовать для хранения важной информации:

LUKS/dm-crypt и одноразовые ключи

LUKS/dm-crypt также умеет использовать одноразовые ключи, что очень полезно при шифровании swap-разделов:

WARNING

В целях безопасности индексацию зашифрованных разделов лучше отключить, отредактировав конфигурационный файл /etc/updatedb.conf. Файлы, зашифрованные EncFS, не могут иметь жестких ссылок, так как система шифрования привязывает данные не к inode, а к имени файла.

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

Операционные системы семейства Linux предоставляют функцию шифрования жестких дисков через специальные утилиты. Рассмотрим одну из них под названием LUKS. В качестве примера используется Ubuntu Server 18.04.

Предварительная подготовка

Утилиту LUKS используют в качестве стандарта для защиты дисков в Linux-системах. Ее преимущества:

  • Она бесплатна.
  • Совместима с 99% операционных систем Linux/Unix.
  • Позволяет сбросить пароль или кодовую фразу в случае утери либо компрометации.

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

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

Перечень свободных логических дисков

Скриншот №1. Перечень свободных логических дисков.

Выберем один из списка и перейдем к редактированию. В качестве примера будем использовать раздел /dev/sdb.

Запустим программу parted, указав выбранный том:

sudo parted /dev/sdb

Администратору будет доступен функционал утилиты через терминал.

Важно! Чтобы получить подробную информацию об утилите parted, введите ключ help.

Получив доступ к parted, разметим выбранный раздел соответствующим образом. Отредактируем под GPT:

Программа отобразит предупреждение о том, что вся информация будет удалена во время выполнения операции. Вводим «Yes»:

Удаление данных с тома

Скриншот №2. Удаление данных с тома.

После окончания операции создадим новый том как основной:

mkpart primary 1 -1

Его метка будет отображаться как «1». По окончании выходим из программы через команду quit.

Генерация ключа

Создадим ключ шифрования, используя команду DD:

sudo dd if=/dev/urandom of=/root/secret.key bs=1024 count=2

, где /root/secret.key — имя генерируемого ключа. Пользователь указывает его самостоятельно.

Теперь отредактируем права доступа к файлу:

sudo chmod 0400 /root/secret.key

Присвоим ему функцию на чтение «без редактирования».

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

Следующий этап — шифрование данных. По умолчанию LUKS интегрирована в большинство дистрибутивов. Если утилита недоступна, установим её, используя стандартные средства установки. Для примера с Ubuntu Server:

sudo apt-get install cryptsetup

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

cryptsetup luksFormat /dev/sdb1 /root/secret.key

Стирание диска

Скриншот №3. Стирание диска.

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

cryptsetup luksAddKey /dev/sdb1 /root/secret.key --key-file=/root/secret.key

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

cryptsetup luksOpen /dev/sdb1 secret --key-file=/root/secret.key

По окончании устройство будет доступно по пути /dev/mapper/secret.

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

cryptsetup resize secret

В нашем примере имя тома — secret. Если для опции resize не указываются дополнительные флаги, она занимает весь раздел. Смонтируем точку доступа для файловой структуры ext4 с именем тома secret:

Для проверки правильности выполненных действий вводим:

cryptsetup -v status secret

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

Раздел зашифрован — смонтируем его для операционной системы. Указываем точку входа для тома secret, а потом задаем права на доступ:

sudo mkdir -p /secret
sudo chmod 755 /secret

Через команду mount подключим раздел к ОС:

mount /dev/mapper/secret /secret

После этого проверим выполнение операции:

Чтобы постоянно не подключить LUKS-раздел к операционной системе, активируем автомонтирование тома.

Важно! Использование автоматического режима монтирования также автоматически расшифровывает том в момент его подключения к ОС.

Определим идентификатор защищенного диска:

ls -l /dev/disk/by-uuid

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

Важно! После знака «=» идет идентификатор, который используется в примере.

Создадим ссылку на сгенерированный ранее ключ secret.key:

sudo echo "secret UUID=$ /root/secret.key luks" >> /etc/crypttab

Последний шаг — добавляем соответствующие строки в файл монтирования разделов fstab:

sudo echo "/dev/mapper/secret /secret auto" >> /etc/fstab

Указав в терминале команду sudo mount –a, зашифрованный раздел автоматически будет подключаться при старте операционной системы.

Читайте также: