![]() |
Продвинутый способ шифрования разделов в Linux, или мной овладела паранойя.
Содержание
Введение Постановка задачи 1. Шифрование разделов 1.1 Подготовим ядро Linux 1.2 Переходим к шифрованию 2. Загрузчик на usb флешке (grub) 2.1 Подготовим флешку 2.2 Переходим к загрузчику 2.3 Автоматизация монтирования шифрованных разделов при загрузке 2.4 Уничтожение загрузчика 2.5 Шифрование swap раздела 3. Паранойя 3.1. Ставим на флешку линукс (Gentoo) 3.2. Доводим дело до конца Введение Чтобы не тратить напрасно ваше время, отмечу сразу, что к Windows данная статья не имеет никакого отношения, все действия описаны исключительно для OS Linux. Со второго пункта описываются действия, для которых требуется иметь поддержку загрузки с hdd-usb или flash на материнской плате. Думаю сейчас это не проблема, даже моя не новая Gigabyte GA-8PE800-RS имеет поддержку загрузки с hdd-usb. Каждый рано или поздно начинает задумываться о безопасности своих данных. Эта статья именно для тех, кто уже задумался, либо задумается после ее прочтения. Если кратко, то суть статьи следующая: шифруем разделы, удаляем с винчестера загрузчик, размещаем загрузчик на флешку, делаем чтобы при выключении стиралась таблица разделов. При загрузке вставляем флешку, грузим с нее линукс который находится на флешке, восстанавливаем таблицу разделов, перезагружаемся, грузим основную систему, с флешки считываются все парольные фразы для монтирования зашифрованных разделов, после загрузки системы вынимаем флешку и прячем ее от дурных глаз. В случае чего, после shutdown системы, без флешки ни загрузить систему, ни прочитать или расшифровать разделы будет не возможно. Если посмотреть на винчестер из какого-либо приложения, то там будет виден один неотформатированный раздел емкостью равной объему винчестера. Постановка задачи Имеется винчестер на котором установлена OS Linux, множество винчестеров с конфиденциальной информацией. Цель: Зашифровать конфиденциальные данные, сделать возможным загрузку OS только с usb флешки, затереть все следы "рабочего" жесткого диска. Определения принятые в этой статье: Основной винчестер - понимается винчестер, на котором установлена загружаемая OS Linux, под это определение попадает единственный в системе винчестер. Прочий винчестер - понимается второй, третий, либо любой другой, с которого не производится загрузка OS Linux. Раздел - если обозначается точкой монтирования (например: раздел /home/vasya), понимать как блочное устройство из /dev смонтированное в определенную точку монтирования. Иначе (например: раздел /dev/hda2), просто блочное устройство из /dev. Бэкап - копия данных, временно сохраненная на другом разделе, либо другом носителе информации. Все вводимые команды заключены в тег [code], если перед командой присутствует символ # - значит команда вводится с правами суперпользователя (root). 1. Шифрование разделов Желательно на загрузочном винчестере отделить и зашифровать разделы /home и /var. На разделе /home находятся домашние папки пользователей, а следовательно все личные конфигурационные файлы, cookies браузеров, история оболочки bash (по умолчанию). На разделе /var могут находиться логи сервера apache, логи ftp сервера, системные логи, также там может находиться папка tmp. Папка tmp находится еще и в корневом разделе, поэтому желательно сделать симлинк /tmp на папку /var/tmp2 - чтобы шифровалось содержание обоих. Но симлинк лучше сделать с помощью LiveCD, предварительно удалив папку /tmp. Код:
# rm -r /tmpНеобходимо, чтобы в ядре были включены следующие опции: Цитата:
Пересобрать ядро просто: Код:
# cd /usr/src/linuxВ случае возникновения вопросов по сборке ядра, всегда пожалуйста: Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0 1.2 Переходим к шифрованию 1. Для того чтобы зашифровать раздел, например hda2, необходимо сделать бэкап данных, т.к. текущие данные на разделе уничтожатся без возможности восстановления. 2. После бэкапа данных с раздела, необходимо вполнить следующее: Код:
# dd if=/dev/urandom of=/dev/hda2Посмотреть прогресс можно так: Код:
# kill -USR1 pidУзнать pid процесса dd можно так: Код:
# ps ax|grep "dd if"После выполнения этой операции приступаем непосредственно к шифрованию: Код:
# losetup -e blowfish-128 -T /dev/loop0 /dev/hda2blowfish-128 - алгоритм шифрования. T - параметр указывает на то, чтобы мы дважды ввели парольную фразу, т.е. повторили ее. /dev/hda2 - раздел который шифруем. /dev/loop0 - блочное устройство, к которому мы в дальнейшем должны обратиться чтобы получить доступ к зашифрованному разделу. По умолчанию ожно использовать от 0 до 7 петлевых устройств, при необходимости можно добавить еще, выполнив скрипт add_loop: Цитата:
Код:
# chmod +x add_loopКод:
# man losetupСоздадим на нем файловую систему: Код:
# mkfs.ext3 /dev/loop0Монтируем: Код:
# mkdir /mnt/crypt_partКод:
# cp -rp /mnt/backup/* /mnt/crypt_partВсе, данные надежно защищены. Как проверить? Например консольным hex редактором hexedit: Код:
# hexedit /dev/loop0Теперь посмотрим на сам раздел: Код:
# hexedit /dev/hda2После того как все скопировали, если не собираемся пользоваться этим разделом до лучших времен, просто делаем следующее: a) Отмонтируем его Код:
# umount /dev/loop0Код:
# losetup -d /dev/loop0Проверка: Код:
# hexedit /dev/loop0Теперь посмотрим на сам раздел: Код:
# hexedit /dev/hda2Как только появится необходимость поработать со своими данными, повторяем: Код:
# losetup -e blowfish-128 -T /dev/loop0 /dev/hda2Код:
# umount /dev/loop02. Загрузчик на usb-flash Понятие шифрованный раздел /dev/hdXX - означает то, что для этого раздела вы проделали операцию шифрования, описанную в первой части статьи. Постановка задачи Имеется один или несколько винчестеров содержащие шифрованные разделы, обыкновенная usb флешка более 5 Мб :) Цель: Затереть загрузчик на загрузочном винчестере, автоматизировать монтирование шифрованных разделов. Рассмотрим следующий пример: Имеется флешка на 1 Гб. Имеется загрузочный винчестер 60Гб с зашифрованными разделами: /dev/hda3 - точка монтирования /var /dev/hda4 - точка монтирования /home /dev/hda6 - точка монтирования /mount/crypt_data Не зашифрованные разделы (эти разделы не будут иметь никакого отношения к дальнейшим манипуляциям): /dev/hda1 - корневой раздел / /dev/hda5 - точка монтирования /mount/opensource_files Имеется прочий винчестер 120Гб с двумя зашифрованными разделами: /dev/hdb1 - точка монтирования /mount/1 /dev/hdb2 - точка монтирования /mount/2 2.1 Подготовим флешку Все usb флешки определяются в системе как sata устройства, т.е. /dev/sdXX. Работа с ними аналогична работе с жестким диском. В нашем примере флешка доступна при обращении к блочному устройству /dev/sda. Разобьем ее на 2 раздела: sda1 = 20Мб и sda2 = остальное пространство. В случае, если на ней имеются другие разделы, то удалить их можно командой d: Код:
Command (m for help): dКод:
# fdisk /dev/sdaКод:
Command (m for help): pКод:
Command (m for help): wКод:
# mkfs.ext3 /dev/sda1Предполагается что grub у вас установлен в системе. Скопируем папку /boot/grub на раздел /dev/sda1, предварительно смонтировав его в /mount/f1: Код:
# mkdir /mount/f1Код:
# nano -w /mount/f1/boot/grub/grub.confЦитата:
Код:
# grubЧтобы загрузка системы протекала с разрешением экрана 1024x768, к опциям загрузчика добавлена строка: video=vesafb:1024x768 , но необходимо чтобы в ядре была включена поддержка Frame Buffer: Цитата:
Код:
# grubВ биосе поставьте загрузку с usb-hdd либо непосредственно с flash, если ваша м/п поддерживает эту опцию. Ядро можно разместить и на флешке, но т.к. оно считывается с flash довольно долго (зависит от размера ядра), я оставил его на винчестере. |
2.3 Автоматизация монтирования шифрованных разделов при загрузке
Итак, имеем несколько зашифрованных разделов и флешку с загрузчиком. Необходимо сделать, чтобы при загрузке шифрованные разделы монтировались, иначе, если /var зашифрован и его не подмонтировать вовремя, система может не загрузиться. Рассмотрим два варианта монтирования зашифрованных разделов: 1) Вариант не безопасный. Вернемся к примеру: /var - /dev/hda3 /home - /dev/hda4 Редактируем файл /etc/fstab Код:
/dev/hda3 /var ext3 rw,loop=/dev/loop3,encryption=blowfish-256 0 0После загрузчика, как только система дойдет до монтирования разделов, для того чтобы примонтировать hda3 и hda4, необходимо будет ввести парольную фразу. Как правило, фразу с символами различного регистра и длинной более 20 держать в голове не просто, особенно если этих фраз около 7-20. Поэтому вы должны будете каждый раз вводить ее с листочка, а соответственно кто-то может узнать вашу фразу "из-за плеча". 2) Вариант безопасный. Монтирование с помощью скомпилированной программы, которая расположена на флешке. Создадим файл amount.cpp : Цитата:
Код:
# g++ ./amount.cppПереименуем его в amount Код:
# mv ./a.out ./amount12345678901111111111 - парольная фраза как для hda6 так и для hdb1. 12345678901111111111 - парольная фраза для hdb2. Скопируем файл amount на флешку, на раздел sda1: Код:
# cp amount /mount/f1Код:
/dev/sda1 /mount/f1 auto ro 0 0Отмонтируем флешку и создадим файл: amount1.cpp Код:
# umount /mount/f1Цитата:
Внимание! Здесь /mount/f1 всего лишь папка на винчестере. Код:
# cp amount /mount/f1Для того чтобы сразу после монтирования всех разделов указанных в /etc/fstab (соответственно и после монтирования нашей флешки /dev/sda1 в /mount/f1), выполнить программу amount которая находится на флешке, и тем самым продолжить монтирование зашифрованных разделов: Для Gentoo: Отредактируем файл /etc/init.d/localmount: Цитата:
Для Ubuntu: Создадим в папке /etc/init.d/ файл mountcrypt Код:
# nano -w /etc/init.d/mountcryptЦитата:
Код:
# chmod +x /etc/init.d/mountcryptКод:
# ln -s /etc/init.d/mountcrypt /etc/rcS.d/S35mountcrypt2.4 Уничтожение загрузчика Уничтожим загрузчик на /dev/hda: Код:
# dd if=/dev/urandom of=/dev/hda bs=446 count=1Для этого необходимо установить пакет loop-aes и в /etc/fstab подредактировать строку swap раздела: Цитата:
3. Паранойя Цель: установить на раздел /dev/sda2 Linux. Для чего: чтобы восстанавливать постоянно удаляющуюся при выключении таблицу разделов на винчестере. Себе я разумеется для флешки выбрал Gentoo Linux :) Но существует много готовых дистрибутивов для флешек, нам всего лишь потребуется наличие команды dd и правильное определение жестких дисков. С этим проблем быть не может. Если кто-то захочет поставить себе на флешку Gentoo, опишу как это делается. 3.1 Ставим Gentoo Linux на флешку в 1Гб Потребуется: Архив со stage, для моей архикектуры это: stage3-i686-2007.0.tar.bz2 Снапшот портежей: portage-20070918.tar.bz2 Исходники ядра: linux-2.6.22.tar.bz2 И разумеется линукс с компилятором, подойдет даже LiveCD. Скачать все файлы можно с любого из зеркал gentoo, например с http://gentoo.osuosl.org Скачаем и разместим эти файлы в /mount/opensource_files, где /mount/opensource_files - папка корневого раздела, либо точка монтирования одного из разделов, если установка протекает с LiveCD, то в эту папку необходимо примонтировать раздел жесткого диска: Код:
# mkdir /mountКод:
# mkdir /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 для того, чтобы использовать место для скачки файлов и дальнейшей распаковки ядра не на флешке, а на винчестере, иначе объема флешки может не хватить. Теперь чрутнимся, и продолжим: Код:
# chroot /mount/f2 /bin/bashИдем дальше: Код:
# env-updateЦитата:
Просто отключим следующее: Цитата:
Код:
# makeКод:
# make && make modules_installРедактируем /etc/fstab: Код:
# nano -w /etc/fstabКод:
/dev/uba2 / ext3 noatime 0 1Теперь установим пароль root и выйдем из chroot среды: Код:
# passwdДобавим в конец следующие строки: Цитата:
А теперь самое интересное. 3.2 Имитация не рабочего винчестера Создадим копию первых 512 байт с раздела hda: Код:
# dd if=/dev/hda of=/mount/f2/image_hda bs=512 count=1В Gentoo в файл /etc/conf.d/local.stop добавляем: Цитата:
Код:
# nano -w /etc/init.d/destroyЦитата:
Код:
# chmod +x /etc/init.d/destroyКод:
# ln -s /etc/init.d/destroy /etc/rc6.d/K03destroyПравда вот загрузка несколько усложняется, сначала необходимо загрузить с флешки линукс, и выполнить: Код:
# dd if=/image_hda of=/dev/hdaОтмонтируем все разделы с которыми работали: Код:
# mount /mount/opensource_files /mount/f2/distfilesКод:
# fuser -u -m /dev/sda1p.s. Заранее извиняюсь за ошибки, неточности, очепятки. За потерю данных, при выполнении действий описанных в этой статье, ответственности не несу. p.p.s. Спасибо за найденную ошибку, разумеется count=1, исправил. http://www.linux.org.ru/jump-message.jsp?msgid=2215881&cid=2216553 © BMaster |
Цитата:
|
Хорошая статья. +4 Но не надо быть на столько параноиком.
|
быть параноиком никогда не помешает, на след неделю буду ставить сибе линь :)
+ |
я сижу хоть и под виндой -- но у меня тоже весь раздел с софтом и скриптами etc.. зашифрован -- помойму немного толсто написал -- но зачет ничего статейка
|
Шифрования никогда не было лишним.... Если есть что скрывать, то надо это шифровать..=))
|
Хорошая статья, но удобнее взять тот же truecrypt....
|
Цитата:
Truecrypt это всего лишь некая "оболочка" к dm-crypt и loopback. |
Ну не буду спорить о степенях пароноидальности...
На ноуте при установке я сразу выбрал шифрование разделов и не стал искать лишних приключений на голову. Даже попсовая убунта при установке предлагает сразу выбрать и зашифровать все окромя boot :) Так что с одной стороны прочитал с интересом с другой – зачем такие сложности? |
| Время: 20:07 |