Каждый рано или поздно начинает задумываться о безопасности своих данных. Эта статья именно для тех, кто уже задумался, либо задумается после ее прочтения. © BMaster Содержание
Введение ВведениеЧтобы не тратить напрасно ваше время, отмечу сразу, что к Windows данная статья не имеет никакого отношения, все действия описаны исключительно для OS Linux. Со второго пункта описываются действия, для которых требуется иметь поддержку загрузки с hdd-usb или flash на материнской плате. Думаю сейчас это не проблема, даже моя не новая Gigabyte GA-8PE800-RS имеет поддержку загрузки с hdd-usb. Каждый рано или поздно начинает задумываться о безопасности своих данных. Эта статья именно для тех, кто уже задумался, либо задумается после ее прочтения. Если кратко, то суть статьи следующая: шифруем разделы, удаляем с винчестера загрузчик, размещаем загрузчик на флешку, делаем чтобы при выключении стиралась таблица разделов. При загрузке вставляем флешку, грузим с нее линукс который находится на флешке, восстанавливаем таблицу разделов, перезагружаемся, грузим основную систему, с флешки считываются все парольные фразы для монтирования зашифрованных разделов, после загрузки системы вынимаем флешку и прячем ее от дурных глаз. В случае чего, после shutdown системы, без флешки ни загрузить систему, ни прочитать или расшифровать разделы будет не возможно. Если посмотреть на винчестер из какого-либо приложения, то там будет виден один неотформатированный раздел емкостью равной объему винчестера. Постановка задачи
Имеется винчестер на котором установлена OS Linux, множество винчестеров с конфиденциальной информацией. 1. Шифрование разделов
Желательно на загрузочном винчестере отделить и зашифровать разделы /home и /var. Код:
1.1 Подготовим ядро Linux
Необходимо, чтобы в ядре были включены следующие опции: Цитата:
Алгоритмы, которыми будем пользоваться необходимо собрать в ядре (*), остальные можно модулем (M). Пересобрать ядро просто: Код:
В случае необходимости, подправить конфиг загрузчика. Об этом ниже. В случае возникновения вопросов по сборке ядра, всегда пожалуйста: Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0 1.2 Переходим к шифрованию
1. Для того чтобы зашифровать раздел, например hda2, необходимо сделать бэкап данных, т.к. текущие данные на разделе уничтожатся без возможности восстановления. Код:
Теперь ждать, для больших объемов (раздел на 250Гб и более) эта операция может достигать нескольких суток, для небольших объемов (раздел 20-50 Гб) нескольких часов. Посмотреть прогресс можно так: Код:
Здесь pid - цифровое значение. Узнать pid процесса dd можно так: Код:
Суть операции: забиваем раздел рандомным значением, т.е. мусором, для того чтобы нельзя было отличить какая часть раздела зашифрована. После выполнения этой операции приступаем непосредственно к шифрованию: Код:
Здесь: blowfish-128 - алгоритм шифрования. T - параметр указывает на то, чтобы мы дважды ввели парольную фразу, т.е. повторили ее. /dev/hda2 - раздел который шифруем. /dev/loop0 - блочное устройство, к которому мы в дальнейшем должны обратиться чтобы получить доступ к зашифрованному разделу. По умолчанию ожно использовать от 0 до 7 петлевых устройств, при необходимости можно добавить еще, выполнив скрипт add_loop: Цитата:
Код:
За подробностями по команде losetup, можно обратиться к мануалу: Код:
Итак, ввели команду, придумали парольную фразу - минимум 20 символов, чтобы не ошибиться ввели ее дважды. Все. Теперь можно работать с зашифрованным разделом. Создадим на нем файловую систему: Код:
Здесь мы указываем /dev/loop0 - блочное устройство которое связано с нашим разделом /dev/hda2. Про /dev/hda2 можно забыть, теперь все операции осуществляем только с /dev/loop0. Монтируем: Код:
Теперь открываем любимый файловый менеджер, либо просто консольной командой cp возвращаем предварительно сохраненный бекап на место. Т.е. копируем данные: Код:
/mnt/backup - папка в которой был сохранен бэкап. Все, данные надежно защищены. Как проверить? Например консольным hex редактором hexedit: Код:
Увидим вначале нули, что свойственно файловой системе ext3. Теперь посмотрим на сам раздел: Код:
Увидим кучу мусора, неотформатированное пространство, что-то неизвестное, и самое главное - никаких признаков наличия зашифрованных данных. Просто обыкновенный мусор, который неизвестно откуда и как образовался После того как все скопировали, если не собираемся пользоваться этим разделом до лучших времен, просто делаем следующее: a) Отмонтируем его Код:
b) И удалим связь /dev/loop0 с /dev/hda2 Код:
Все. Сохранив парольную фразу в надежном месте, можно не волноваться за свои данные. Проверка: Код:
Увидим что файл пуст. Теперь посмотрим на сам раздел: Код:
Таже куча мусора что и была. Как только появится необходимость поработать со своими данными, повторяем: Код:
Работаем, закрываем все: Код:
Но этот способ хорош в том случае, если мы работаем с зашифрованным разделом крайне редко. О том как автоматизировать процесс монтирования зашифрованных разделов при загрузке, написано в следующей части статьи. 2. Загрузчик на usb-flashПонятие шифрованный раздел /dev/hdXX - означает то, что для этого раздела вы проделали операцию шифрования, описанную в первой части статьи. Постановка задачи
Имеется один или несколько винчестеров содержащие шифрованные разделы, обыкновенная usb флешка более 5 Мб 2.1 Подготовим флешку
Все usb флешки определяются в системе как sata устройства, т.е. /dev/sdXX. Код:
А теперь создадим разделы: Код:
В итоге: Код:
После чего сохраняем таблицу разделов: Код:
Создадим на всех разделах файловую систему ext3: Код:
2.2 Переходим к загрузчику
Предполагается что grub у вас установлен в системе. Код:
Подправим наш файл конфигурации grub: Код:
Цитата:
Хеш пароля можно сгенерировать так: Код:
При выборе в списке LINUX, необходимо ввести пароль qqqqqq, для загрузки Windows в меню необходимо нажать "p" и ввести пароль 123456. За это отвечает опция lock. Чтобы загрузка системы протекала с разрешением экрана 1024x768, к опциям загрузчика добавлена строка: video=vesafb:1024x768 , но необходимо чтобы в ядре была включена поддержка Frame Buffer: Цитата:
Теперь произведем установку загрузчика на /dev/sda: Код:
Все, загрузчик установлен. Здесь, hd2 - наша флешка, 0 - первый раздел, тот где находится /boot на флешке - /dev/sda1. В биосе поставьте загрузку с usb-hdd либо непосредственно с flash, если ваша м/п поддерживает эту опцию. Ядро можно разместить и на флешке, но т.к. оно считывается с flash довольно долго (зависит от размера ядра), я оставил его на винчестере. Итак, имеем несколько зашифрованных разделов и флешку с загрузчиком. Необходимо сделать, чтобы при загрузке шифрованные разделы монтировались, иначе, если /var зашифрован и его не подмонтировать вовремя, система может не загрузиться. Рассмотрим два варианта монтирования зашифрованных разделов: 1) Вариант не безопасный. Вернемся к примеру: /var - /dev/hda3 /home - /dev/hda4 Редактируем файл /etc/fstab Код:
Подразумевается что /dev/hda3 и /dev/hda4 зашифрованны алгоритмом blowfish-256. После загрузчика, как только система дойдет до монтирования разделов, для того чтобы примонтировать hda3 и hda4, необходимо будет ввести парольную фразу. Как правило, фразу с символами различного регистра и длинной более 20 держать в голове не просто, особенно если этих фраз около 7-20. Поэтому вы должны будете каждый раз вводить ее с листочка, а соответственно кто-то может узнать вашу фразу "из-за плеча". 2) Вариант безопасный. Монтирование с помощью скомпилированной программы, которая расположена на флешке. Создадим файл amount.cpp : Цитата:
И скомпилируем его: Код:
Получим файл a.out Переименуем его в amount Код:
12345678901234567890 - парольная фраза как для hda3 так и для hda4. 12345678901111111111 - парольная фраза как для hda6 так и для hdb1. 12345678901111111111 - парольная фраза для hdb2. Скопируем файл amount на флешку, на раздел sda1: Код:
Теперь добавим в /etc/fstab автомонтирование флешки: Код:
Теперь создадим еще один файл amount, но с другим содержанием. Отмонтируем флешку и создадим файл: amount1.cpp Код:
Содержание файла amount1.cpp: Цитата:
Скомпилируем его и получим файл amount, после чего скопируем его в /mount/f1: Внимание! Здесь /mount/f1 всего лишь папка на винчестере. Код:
Внимание! Здесь наверное единственно место, где могут возникнуть трудности. Я опишу изменение конфигурационного файла только для систем Gentoo и Ubuntu. Для того чтобы сразу после монтирования всех разделов указанных в /etc/fstab (соответственно и после монтирования нашей флешки /dev/sda1 в /mount/f1), выполнить программу amount которая находится на флешке, и тем самым продолжить монтирование зашифрованных разделов: Для Gentoo: Отредактируем файл /etc/init.d/localmount: Цитата:
Просто добавили в конец файла перед закрывающейся скобкой одну строчку. Для Ubuntu: Создадим в папке /etc/init.d/ файл mountcrypt Код:
Следующего содержания: Цитата:
Сделаем его исполняемым: Код:
Добавим его в runlevel для выполнения сразу после localmount: Код:
В случае, если мы после загрузчика и начала загрузки ядра извлекаем флешку, то вместо программы amount, которая находится на флешке и должна монтировать разделы, выполнится программа amount, которая находится на жестком диске, и соответственно монтироваться ничего не будет, появится надпись "Hi, i'am bug ", но система продолжит грузится, в итоге исход будет неудачным. 2.4 Уничтожение загрузчика
Уничтожим загрузчик на /dev/hda: Код:
2.5 Шифрование swap раздела
Для этого необходимо установить пакет loop-aes и в /etc/fstab подредактировать строку swap раздела: Цитата:
где /dev/hda7 - swap раздел 3. Паранойя
Цель: установить на раздел /dev/sda2 Linux. 3.1 Ставим Gentoo Linux на флешку в 1Гб
Потребуется: Код:
Смонтируем /dev/sda2 в /mount/f2 и начнем установку Код:
Внимание! # mount -o bind /mount/opensource_files /mount/f2/distfiles # mount -o bind /mount/opensource_files /mount/f2/usr/src Эти команды монтируют папку /mount/opensource_files в папки /mount/f2/distfiles и /mount/f2/usr/src для того, чтобы использовать место для скачки файлов и дальнейшей распаковки ядра не на флешке, а на винчестере, иначе объема флешки может не хватить. Теперь чрутнимся, и продолжим: Код:
Команда emerge -pvf gentoo-sources выдаст нам ссылки на нужные файлы, т.к. ядро уже скачено, останется скачать несколько патчей, скачаем их самостоятельно и скопируем в /mount/opensource_files. Идем дальше: Код:
Необходимо сконфигурировать и собрать ядро. Для того, чтобы загрузить линукс с флешки, в ядре должны быть включены следующие опции: Цитата:
По желанию можно сделать ядро монолитным, т.е. все опции соберутся непосредственно в ядро, модулей не будет: Просто отключим следующее: Цитата:
В случае, если ядро монолитное, далее выполняем: Код:
Если не монолитное (с поддержкой модулей) то выполняем: Код:
Последние штрихи: Редактируем /etc/fstab: Код:
Если убрать все комментарии, то получим: Код:
/dev/uba2 - именно так в ядре определяется наш второй раздел на флешке. Теперь установим пароль root и выйдем из chroot среды: Код:
Изменим конфиг grub, который находится на /dev/sda1 Добавим в конец следующие строки: Цитата:
На этом установка Gentoo Linux на флешку завершена. За всеми подробностями, а также за послеустановочной настройкой, если вам это потребуется, обращайтесь Gentoo Handbook А теперь самое интересное. 3.2 Имитация не рабочего винчестера
Создадим копию первых 512 байт с раздела hda: Код:
Копию байт разместим на флешке в файле image_hda. В Gentoo в файл /etc/conf.d/local.stop добавляем: Цитата:
В Ubuntu создадим в папке /etc/init.d/ файл destroy Код:
Следующего содержания: Цитата:
Сделаем его исполняемым: Код:
Добавим его в runlevel для выполнения при выключении: Код:
Т.е. при выключении первые 512 байт будут забиваться рандомом. И соответственно таблица разделов от 446 до 512 байт тоже. Определить где начинается какой раздел, да еще если половина из них зашифрована, будет практически невозможно. И всегда с гордостью можно заявить, что винчестер не рабочий, он был отфортирован, были удалены разделы... Правда вот загрузка несколько усложняется, сначала необходимо загрузить с флешки линукс, и выполнить: Код:
А после грузить с флешки основную систему. Отмонтируем все разделы с которыми работали: Код:
В случае, если какой-то из разделов откажется отмонтироваться, вычисляем процесс которым он занят, и убиваем его: Код:
На этом все. p.s. Заранее извиняюсь за ошибки, неточности, очепятки. За потерю данных, при выполнении действий описанных в этой статье, ответственности не несу. © BMaster
|
|||||||||||||||||