Суббота, 08.02.2025, 16:50
КАФЕДРА ІНТЕЛЕКТУАЛЬНИХ СИСТЕМ
Главная | Каталог статей | Реєстрація | Вхід
Меню сайта

Категорії каталогу
Мои статьи [35]
Наше опитування
Зацініть мій сайт
1. Ужасно
2. Відмінно
3. Добре
4. Більш-менш
5. Погано
Всього відповідей: 225
Головна » Статті » Мои статьи

Продвинутый способ шифрования разделов в Linux (2)
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
/dev/hda4 /home ext3 rw,loop=/dev/loop4,encryption=blowfish-256 0 0

Подразумевается что /dev/hda3 и /dev/hda4 зашифрованны алгоритмом blowfish-256.
После загрузчика, как только система дойдет до монтирования разделов, для того чтобы примонтировать hda3 и hda4, необходимо будет ввести парольную фразу.
Как правило, фразу с символами различного регистра и длинной более 20 держать в голове не просто, особенно если этих фраз около 7-20. Поэтому вы должны будете каждый раз вводить ее с листочка, а соответственно кто-то может узнать вашу фразу "из-за плеча".

2) Вариант безопасный. Монтирование с помощью скомпилированной программы, которая расположена на флешке.

Создадим файл amount.cpp :

Цитата:
#include <iostream>
using namespace std;
int main() {
system("echo '12345678901234567890'|losetup -e blowfish-256 -p0 /dev/loop3 /dev/hda3");
system("mount /dev/loop3 /var");

system("echo '12345678901234567890'|losetup -e blowfish-256 -p0 /dev/loop4 /dev/hda4");
system("mount /dev/loop4 /home");

system("echo '11111111112222222222'|losetup -e blowfish-128 -p0 /dev/loop6 /dev/hda6");
system ("mount /dev/loop6 /mount/crypt_data");

system("echo '11111111112222222222'|losetup -e blowfish-128 -p0 /dev/loop1 /dev/hdb1");
system ("mount /dev/loop1 /mount/1");

system("echo '11111111113333333333'|losetup -e blowfish-128 -p0 /dev/loop2 /dev/hdb2");
system ("mount /dev/loop2 /mount/2");

system("sleep 5 && umount /dev/sda1 &");
}

И скомпилируем его:

Код:

# g++ ./amount.cpp

Получим файл a.out
Переименуем его в amount

Код:

# mv ./a.out ./amount

12345678901234567890 - парольная фраза как для hda3 так и для hda4.
12345678901111111111 - парольная фраза как для hda6 так и для hdb1.
12345678901111111111 - парольная фраза для hdb2.

Скопируем файл amount на флешку, на раздел sda1:

Код:

# cp amount /mount/f1

Теперь добавим в /etc/fstab автомонтирование флешки:

Код:

/dev/sda1 /mount/f1 auto ro 0 0

Теперь создадим еще один файл amount, но с другим содержанием.
Отмонтируем флешку и создадим файл: amount1.cpp

Код:

# umount /mount/f1

Содержание файла amount1.cpp:

Цитата:
#include <iostream>
using namespace std;
int main() {
echo "Hi, i'am bug "
}

Скомпилируем его и получим файл amount, после чего скопируем его в /mount/f1:
Внимание! Здесь /mount/f1 всего лишь папка на винчестере.

Код:

# cp amount /mount/f1

Внимание! Здесь наверное единственно место, где могут возникнуть трудности. Я опишу изменение конфигурационного файла только для систем Gentoo и Ubuntu.
Для того чтобы сразу после монтирования всех разделов указанных в /etc/fstab (соответственно и после монтирования нашей флешки /dev/sda1 в /mount/f1), выполнить программу amount которая находится на флешке, и тем самым продолжить монтирование зашифрованных разделов:

Для Gentoo:
Отредактируем файл /etc/init.d/localmount:

Цитата:
..........
# Start dm-crypt mappings, if any
start_addon dm-crypt
/mount/f1/amount
}

Просто добавили в конец файла перед закрывающейся скобкой одну строчку.

Для Ubuntu:
Создадим в папке /etc/init.d/ файл mountcrypt

Код:

# nano -w /etc/init.d/mountcrypt

Следующего содержания:

Цитата:
#!/bin/sh
/mount/f1/amount

Сделаем его исполняемым:

Код:

# chmod +x /etc/init.d/mountcrypt

Добавим его в runlevel для выполнения сразу после localmount:

Код:

# ln -s /etc/init.d/mountcrypt /etc/rcS.d/S35mountcrypt

В случае, если мы после загрузчика и начала загрузки ядра извлекаем флешку, то вместо программы amount, которая находится на флешке и должна монтировать разделы, выполнится программа amount, которая находится на жестком диске, и соответственно монтироваться ничего не будет, появится надпись "Hi, i'am bug ", но система продолжит грузится, в итоге исход будет неудачным.

2.4 Уничтожение загрузчика

Уничтожим загрузчик на /dev/hda:

Код:

# dd if=/dev/urandom of=/dev/hda bs=446 count=512

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

Для этого необходимо установить пакет loop-aes и в /etc/fstab подредактировать строку swap раздела:

Цитата:
/dev/hda9 none swap sw,loop=/dev/loop7,encryption=blowfish-256 0 0

где /dev/hda7 - 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/opensource_files
# mount /dev/hda5 /mount/opensource_files

Смонтируем /dev/sda2 в /mount/f2 и начнем установку

Код:

# mkdir /mount/f2
# mount /dev/sda2 /mount/f2
# cd /mount/f2
# tar -xvjpf /mount/opensource_files/2007.0/stage3-i686-2007.0.tar.bz2
# tar -xvjf /mount/opensource_files/portage-20070918.tar.bz2 -C /mount/f2/usr
# mkdir /mount/f2/distfiles
# mount -o bind /mount/opensource_files /mount/f2/distfiles
# mount -o bind /mount/opensource_files /mount/f2/usr/src

Внимание!
# 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
# emerge -pvf gentoo-sources

Команда emerge -pvf gentoo-sources выдаст нам ссылки на нужные файлы, т.к. ядро уже скачено, останется скачать несколько патчей, скачаем их самостоятельно и скопируем в /mount/opensource_files.

Идем дальше:

Код:

# env-update
# source /etc/profile
# ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
# emerge -pv gentoo-sources
# emerge gentoo-sources
# cd /usr/src/linux && make menuconfig

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

Цитата:
Device Drivers --->
USB support --->
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<*> USB Mass Storage support
Device Drivers --->
Block devices --->
<*> Low Performance USB Block driver

По желанию можно сделать ядро монолитным, т.е. все опции соберутся непосредственно в ядро, модулей не будет:

Просто отключим следующее:

Цитата:
Loadable module support --->
[ ] Enable loadable module support

В случае, если ядро монолитное, далее выполняем:

Код:

# make
# cp ./arch/i386/boot/bzImage /boot

Если не монолитное (с поддержкой модулей) то выполняем:

Код:

# make && make modules_install
# cp ./arch/i386/boot/bzImage /boot

Последние штрихи:

Редактируем /etc/fstab:

Код:

# nano -w /etc/fstab

Если убрать все комментарии, то получим:

Код:

/dev/uba2 / ext3 noatime 0 1
/dev/cdrom /mnt/cdrom audo noauto,ro 0 0
/dev/fd0 /mnt/floppy auto noauto 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0

/dev/uba2 - именно так в ядре определяется наш второй раздел на флешке.

Теперь установим пароль root и выйдем из chroot среды:

Код:

# passwd
New UNIX password:
BAD PASSWORD: it does not contain enough DIFFERENT characters
Retype new UNIX password:
passwd: пароль успешно обновлён
# exit

Изменим конфиг grub, который находится на /dev/sda1
Добавим в конец следующие строки:

Цитата:
title Linux From Flash
root (hd0,1)
kernel (hd0,1)/boot/bzImage root=/dev/uba2 init=/sbin/init video=vesafb:1024x768

На этом установка Gentoo Linux на флешку завершена. За всеми подробностями, а также за послеустановочной настройкой, если вам это потребуется, обращайтесь Gentoo Handbook

А теперь самое интересное.

3.2 Имитация не рабочего винчестера

Создадим копию первых 512 байт с раздела hda:

Код:

# dd if=/dev/hda of=/mount/f2/image_hda bs=512 count=1

Копию байт разместим на флешке в файле image_hda.

В Gentoo в файл /etc/conf.d/local.stop добавляем:

Цитата:
dd if=/dev/urandom of=/dev/hda bs=512 count=1

В Ubuntu создадим в папке /etc/init.d/ файл destroy

Код:

# nano -w /etc/init.d/destroy

Следующего содержания:

Цитата:
#!/bin/sh
dd if=/dev/urandom of=/dev/hda bs=512 count=1

Сделаем его исполняемым:

Код:

# chmod +x /etc/init.d/destroy

Добавим его в runlevel для выполнения при выключении:

Код:

# ln -s /etc/init.d/destroy /etc/rc6.d/K03destroy

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

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

Код:

# dd if=/image_hda of=/dev/hda
# reboot

А после грузить с флешки основную систему.

Отмонтируем все разделы с которыми работали:

Код:

# mount /mount/opensource_files /mount/f2/distfiles
# mount /mount/opensource_files /mount/f2/usr/src
# umount /dev/sda1
# umount /dev/sda2

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

Код:

# fuser -u -m /dev/sda1
# kill PID

На этом все.

p.s. Заранее извиняюсь за ошибки, неточности, очепятки. За потерю данных, при выполнении действий описанных в этой статье, ответственности не несу.



Оригинал статьи - http://forum.antichat.ru/thread51519.html
Категорія: Мои статьи | Додав: intelsys (21.10.2007)
Переглядів: 962 | Рейтінг: 0.0/0 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Пошук
Друзі сайту

IT-Stars.com - работа для программистов, IT-специалистов.


Курсы валют Курсы валют Курсы валют
Библиотека загрузка библиотеки...

Статистика
Copyright MyCorp © 2025 Создать бесплатный сайт с uCoz