- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF80:Шифрование
Материал из Linuxformat.
УЧЕБНИК Шифрование
МОБИЛЬНАЯ БЕЗОПАСНОСТЬ
Содержание |
Шифрование Защита файловых систем
Захотим обезопасить свои данные – обойдемся и без знаменитой Энигмы. Грэм Моррисон покажет, как зашифровать ваш USB-брелок и данные на ноутбуке, используя Fuse, EncFuse и небольшой модуль под названием dm-crypt.
О шифровании говорят многие, но мало кто им реально пользуется. Нам всем нравится идея засекретить данные, причем так, чтобы их можно было видеть как обычно, и все мы прошли через рутину баловства с GNU Privacy Guard и помещения наших публичных ключей в Интернет. Но судя по всему, только пользователи, обладающие важными данными, которые действительно надо прятать, или особо усердствующие насчет сетевой безопасности, пользуются шифрованием ежедневно.
Те из нас, у кого есть переносные устройства, не должны быть столь апатичны. Довольно неприятно потерять ноутбук, но потерять вместе с ним еще и ценные данные вообще ужасно. А последствия утери жёсткого диска с конфиденциальными данными, описывающими все аспекты вашей жизни, могут быть просто катастрофичны. И даже не из-за пропажи финансовой информации вроде номеров кредитных карт и банковских счетов – адресная книга и почтовый архив могут быть много важнее. Как это ни глупо, но большинство из нас скорее предпочитают закрывать глаза на возможность беды, нежели предпринять несколько простых предосторожностей. И один из простейших способов защитить наши данные – это зашифровать их.
Существует три основных подхода к шифрованию данных в вашей системе Linux. Первый – это зашифровать ваши файлы при помощи GPG или подобного инструмента. Способ хорошо работает в том случае, когда вы храните всю вашу важную информацию (типа паролей и сетевой банковской информации) в немногочисленных файлах. Когда надо будет прочитать или изменить данные, вы можете расшифровать их. На этой теории основана масса приложений типа защищенных бумажников, появившихся в течение последней пары лет. Важная информация шифруется в несколько файлов, а отпирается глобальным ключом.
Расширением идеи шифрования только некоторых файлов является создание особого каталога: файлы, помещаемые в него, зашифровываются, и дешифруются при необходимости их извлечения и чтения – естественно, при вводе правильного ключа; а в остальном каталог работает как привычный компонент вашей файловой системы. Данный подход известен как файловая система с паролем, и у него множество преимуществ по сравнению с обычным шифрованием файлов; но более важно то, что он работает как обычная файловая система. После шифрования вы видите ту же файловую структуру, только имена файлов и папок выглядят бессмысленной абракадаброй. Можно распространить такое шифрование на весь USB-брелок, для уверенности в том, что если он потеряется, то информацию будет нельзя извлечь.
ЧАСТЬ 1. ВИРТУАЛЬНЫЕ ЗАШИФРОВАННЫЕ КАТАЛОГИ
Наиболее простой и эффективный способ создания зашифрованной области для ваших файлов – это использовать Fuse, Файловые системы в пространстве пользователя (Filesystems in USErspace), детально рассмотренные в нашем учебнике в LXF76. Fuse – модуль ядра, позволяющий пользователям создавать свои собственные локальные файловые системы, в своём домашнем каталоге или на USB-брелке, например. Главное преимущество здесь в том, что можно затем открыть файловую систему носителя под другими операционными системами – особенно полезное, если вы собираетесь подключать ваш USB-брелок к другим компьютерам (а именно для этого USB-брелок и придуман).
Fuse, легкий способ
Обычно вам не нужно беспокоиться о самостоятельной установке Fuse. Практически во всех дистрибутивах последних версий, включая SUSE, Fedora и Ubuntu, это предусмотрено. Хотя в прошлый раз при рассмотрении Fuse мы ограничились SSH, для зашифрованных файловых систем и Fuse тоже существует специально разработанный инструмент.
Этот инструмент называется EncFS, и благодаря Fuse решение получается весьма эффективным и гибким. Если вы не смогли найти пакет EncFS для вашей системы (что маловероятно), сборка из исходных текстов займет столько времени, сколько вам потребуется для того, чтобы найти и установить Fuse и связанные с ним библиотеки разработчика. Вам также понадобится пакет rlog (созданный автором EncFS), который доступен по адресу http://arg0.net/wiki/EncFS.
После установки EncFS, для создания зашифрованного каталога достаточно просто набрать EncFS ~/crypt-raw ~/crypt. EncFS сначала спросит, хотите ли вы создать два каталога, указанные в вышеприведенной команде (crypt-raw и crypt), которые, в нашем примере, расположены в домашнем каталоге. «Реальным» каталогом является crypt-raw, содержащий зашифрованные файлы, тогда как crypt содержит виртуальную файловую систему – расшифрованную версию содержимого каталога crypt-raw.
Следующий необходимый шаг – указание желаемого режима настройки. Выбор включает Expert Configuration (Для Эксперта), Preconfigured For The Paranoid (Для параноика) и Standard Mode (Стандартный). В большинстве случаев стандартный режим более чем достаточен – он применяет 160-битные ключи и алгоритм шифрования SSL/Blowfish от Брюса Шнайера (Bruce Schneier). Экспертный режим предоставляет также 256-битное AES-шифрование, надежное, как в Пентагоне. Размер области зашифрованных данных определяется размером блока. Пусть вы хотите сохранить одиночный байт, EncFS все равно создаст зашифрованный блок указанного вами размера.
Последний шаг в построении файловой системы – установка пароля для блокировки содержимого. Пароль обычно считается самым слабым местом в шифровании, так как многие люди используют один и тот же простой пароль много раз, и теоретически Blowfish особенно уязвим для атак на слабые ключи. Хотя на практике это почти невозможно, слабые ключи несомненно упрощают работу хакера, а пароли случайной природы, включающие символы и цифры наряду с буквами, труднее для взлома, чем девичья фамилия матери. Проблема в том, что если вы забудете пароль для EncFS, то нет инструментов для восстановления ваших данных. В результате, лучше проявить слабость, взяв запоминающийся пароль, а не недоступный для взлома.
Затем войдите в каталог crypt и создайте файл. Команда touch newfile создаст пустой файл с именем newfile, но вы можете легко скопировать в этот каталог данные, которые хотите защитить. Теперь, взглянув на содержимое каталога crypt-raw, вы увидите то же количество файлов, но их имена и содержимое будут представлять собой случайный набор символов. Эта криптограмма – результат шифрования. Однако права доступа к файлу, вместе с датой и временем изменения, все еще читаемы. Это представляет небольшой риск, но зато программы резервного копирования смогут понять, когда файл изменялся в последний раз, и сделать его копию. В каталоге raw есть также скрытый файл, с именем encfs5, в нем содержится информация, облегчающая понимание содержимого исходной файловой системы для EncFS.
Вы можете размонтировать зашифрованную файловую систему, набрав fusermount -u ~/crypt – запрет на шифрование в каталог crypt-raw, и ваши файлы будут как в сейфе. Чтобы вновь получить к ним доступ, просто запустите первую команду, которую мы использовали для создания каталога.
ЧАСТЬ 2. ШИФРОВАНИЕ ВСЕЙ ФАЙЛОВОЙ СИСТЕМЫ
Для переносных устройств виртуального каталога недостаточно. Если вы, например, потеряете ноутбук, то потеряете намного больше, чем важные данные – операционная система и используемые вами приложения станут вашими злейшими врагами. Офисные приложения при редактировании почти всегда создают копии документа, которые не бросаются вам в глаза. Также рискованно обнародовать кэш и cookies вашего браузера.
Теперь, познакомив вас с основами шифрования частей вашей файловой системы, я собираюсь перейти к следующему этапу – шифрованию целого компьютера. Шифрование всей файловой системы кардинально отличается от виртуальных папок. Проблема в загрузке зашифрованной корневой файловой системы – надо знать, в какой момент сообщить ядру, что оно управляет зашифрованной файловой системой. А если файловая система зашифрована, то как загрузить ядро в первый раз?
К счастью, это проторенный путь, и создать Linux-систему, запускающуюся с полностью зашифрованного корневого раздела, не так уж и сложно. Но потребуется принятие некоторых специальных решений, поскольку в настоящий момент нельзя просто преобразовать ваши разделы в зашифрованную версию. Мы рекомендуем использовать последнюю версию Ubuntu, в которой и опробовались все наши инструкции; впрочем, для большинства других дистрибутивов процесс весьма схож (кроме последнего шага). Вы можете также установить сильно усеченную версию Ubuntu, выбрав в меню загрузки пункт 'server', и обновить до офисной машины позднее. Процесс намного бы упростился, если бы дистрибутив разрешал сразу создать зашифрованный раздел, но большинство дистрибутивов этого не разрешают.
Загрузочный раздел
Перед началом работы важно уяснить, как именно происходит загрузка системы и в какой момент мы можем переключиться на зашифрованную систему. Поскольку большинство дистрибутивов Linux в настоящее время используют ядро версии 2.6, то мы сосредоточимся именно на нем. Можно зашифровать файловую систему и при использовании старой версии ядра, но этот процесс сильно отличается – обычно он основан на методе Loop-AES. Есть превосходный HOWTO, описывающий этот метод, он является частью Linux Documentation Project (www.tldp.org).
Мы употребим модуль dm-crypt, который впервые появился в ядре версии 2.6.4. Он пользуется инфраструктурой отображения устройств (device-mapping infrastructure), чтобы создавать виртуальные блочные устройства, например, раздел жесткого диска, и почти прозрачен. Большинство ядер обеспечивают поддержку dm-crypt по умолчанию, и намного проще использовать ее, чем компилировать свою собственную версию. Вы можете проверить свое ядро на наличие данной поддержки, попытавшись загрузить модуль и просеять вывод lsmod при помощи grep. Например, выполнив команды modprobe dm-crypt и lsmod lgrep crypt с правами root, вы должны получить нечто подобное:
dm_crypt 12424 0 dm_mod 58936 2 dm_crypt
Начиная на голом месте с новой установки, вы должны создать отдельный загрузочный раздел плюс достаточно большой основной, а также временный раздел, который будет содержать минимальную установку дистрибутива. У меня загрузочным разделом является hda1, основным – hda2, а временным – hda3, и, конечно, потребуется еще раздел подкачки (swap) – hda4. Установите минимально возможную версию редакцию дистрибутива, используя hda3 в качестве главного раздела, и не забудьте указать hda1 в качестве загрузочного раздела (boot).
Захватчики пространства
Как только установка закончится и вы получите доступ к оболочке, необходимо заполнить случайными данными раздел (hda2), который станет зашифрованным корневым разделом. Может, вы уже и сделали это, избавляясь от остаточных следов удаленных вами файлов, но причина заняться этим сейчас в том, что когда зашифрованная система начнет заполняться файлами, можно будет узнать, сколько места используется и сколько остается свободным, просто посмотрев двоичную карту диска. Свободное место выглядит более упорядоченно, чем имеющие случайную природу зашифрованные данные, а если записать в неиспользованные участки диска случайные данные, то занятое место на диске определить невозможно. Просто наберите if=/dev/urandom of=/dev/hda2, чтобы скопировать поток случайных данных на второй раздел (все команды урока требуют привилегий администратора).
Вам понадобится установить пакет cryptsetup, который обычно входит в основные дистрибутивы (хотя пользователям Debian/Ubuntu придется просмотреть репозитарии Universe и Multiverse). Cryptsetup – инструмент пространства пользователя для управления модулем dmcrypt. Чтобы создать зашифрованный раздел при помощи Cryptsetup, наберите то же самое, что и в нашем примере. Будет запрошен ввод пароля (pass phrase), который должен быть достаточно сложен, но запоминаем. Потеря пароля блокировки машины в корне отличается от потери пароля, блокирующего зашифрованный файл – вы потеряете ваши электронные письма, закладки, нажитые мучительным трудом последние версии... одним словом, всё.
Cryptsetup -y create root /dev/hdb2 Enter passphrase: Verify passphrase:
Затем dm-crypt отобразит зашифрованный диск в /dev/mapper/root точно так же, как когда мы использовали зашифрованные файлы в предыдущем разделе. Но поскольку это блочное устройство, мы можем форматировать его как настоящий жесткий диск, а это необходимо сделать перед тем, как копировать на него корневую файловую систему. Так как Linux рассматривает его как обычное блочное устройство, для его форматирования вы можете использовать вашу любимую утилиту. Но мы используем командную строку, чтобы отформатировать отображенный раздел в ext3. Вы увидите примерно такое:
mkfs -t ext3 /dev/mapper/root Password: mke2fs 1.38 (30-Jun-2005) Filesystem label= OS type: Linux Writing inode tables: 24/49
Перед тем, как скопировать наш минимальный дистрибутив с текущей корневой файловой системы на новую зашифрованную, нужно смонтировать ее в удобном месте. Чтобы это сделать, наберите mkdir /mnt/enc_root и mount /dev/mapper/root /mnt/enc_root. Скопируйте ваш старый корневой раздел в новый, используя команду вроде cp -axv / /mnt/enc_root.
Последний шаг – измените порядок загрузки и убедитесь, что загружаемая система знает, что делать с зашифрованной файловой системой. Первой целью является /etc/fstab на зашифрованной файловой системе, и запись для корневого устройства необходимо изменить на /dev/mapper/root, чтобы она выглядела следующим образом:
/dev/mapper/root / ext3 defaults,errors=remount-ro 0
Для пользователей Debian и Ubuntu последний шаг значительно облегчен, потому что, отредактировав пару файлов, они будут готовы к загрузке зашифрованной системы. Просто добавьте root /dev/hda2 в /etc/crypttab (не забыв изменить hda2 на имя вашего зашифрованного диска), а ramdisk = '/usr/sbin/mkinitrd' в /etc/kernel-img.conf, и, наконец, отредактируйте Grub (/boot/grub/menu.lst), изменив строку, начинающуюся с '# kopt' на
# kopt=root=/dev/mapper/root devfs=mount ro
Для внесения изменений в Grub также необходимо выполнить команду dpkg-reconfigure linux-image-2.6.15-15-386, чтобы убедиться, что используется корректная версия ядра. Если все прошло как планировалось, после перезагрузки ваша машина запросит пароль корневого каталога, и только потом вы сможете загрузить зашифрованную систему и ввестипароль пользователя.
Другие дистрибутивы
Пользователи дистрибутивов, основанных не на Debian, должны будут изменить скрипт linuxrc. Это сценарий, выполняющийся при первой загрузке системы, и ему необходим локальный доступ к модулям, использующимся при шифровании. Это подразумевает копирование модулей dm-mod.ko dm-crypt.ko в загрузочный раздел (boot) и их загрузку из скрипта linuxrc перед ручным созданием точки монтирования /dev/mapper/root как мы делали ранее. Большинство дистрибутивов содержат пример скрипта для выполнения подобных вещей.
Шифрование файловой системы становится всё более важным, поскольку всё больше и больше народу используют ноутбуки и USB-брелки. SUSE – один из немногих дистрибутивов, предлагающих при установке выбрать режим использования зашифрованной файловой системы. Эта опция доступна в окне Экспертное Разбиение (Expert Partitioner), которое появляется сразу после выбора раздела для установки. Для создания зашифрованного раздела просто щелкните на кнопке Редактировать (Edit) и установите галочку в пункте Шифровать файловую систему (Encrypt File System). Появится диалоговое окно, в котором дважды запрашивается один и тот же пароль – точно так же, как при создании зашифрованного раздела вручную – и вы должны ввести пароль, который будет необходим при загрузке. Для создания зашифрованного раздела и виртуальных каталогов можно также использовать Yast, если SUSE уже установлен, но корневую файловую систему вы зашифровать не сможете.
Уже недолго ждать предоставления большинством дистрибутивов режима установки в зашифрованный раздел. Но ничто не сравнится с душевным покоем, проистекающим из сознания, что вы сами позаботились о своей безопасности и все сделали правильно. Дайте знать, что у вас получилось. И не забудьте наши форумы, если вам нужен совет!