OpenStreetBugs — лёгкий способ сообщить об ошибке в OpenStreetMap

OpenStreetBugs — лёгкий способ сообщить об ошибке в OpenStreetMap

Вы, конечно, знаете о свободной карте OpenStreetMap. Это настоящая народная карта, создаваемая такими же людьми как и вы! Это такой же opensource-проект как Linux и как Википедия. Конечно же, как и в других картах, в OpenStreetMap имеются ошибки, но в отличие от тех же Яндекс.Карт, где ошибки не исправляются годами из-за сложной бюрократической процедуры (я уже не говорю о намеренных ошибках), в OpenStreetMap всё гораздо проще и лучше для всех нас...
Подробнее..

CloudMade Navigation поддерживает ограничения манёвров

CloudMade Navigation поддерживает ограничения манёвров

Не так давно CloudMade выделил несколько приоритетных направлений, среди которых оказалась и навигация. Решено было создать специальный проект Navi Studio, который объединял бы в себе несколько более мелких сервисов и позволял пользоваться ими, для создания полноценного навигационного программного обеспечения. В Navi Studio вошли: Работа закипела и уже появилось несколько приложений использующих данный проект. Но полноценной навигации без соблюдения правил ПДД не существует, а потому данному вопросу было также уделено не мало времени...
Подробнее..

Удали себя из интернет-социума — «Web 2.0 Suicide Machine»

Удали себя из интернет-социума — «Web 2.0 Suicide Machine»

Недавно наткнулся в сети на один занимательный интернет-сервис, именующийся Web 2.0 Suicide machine . Предназначен он для того, чтобы позволить людям, обремененным «социальной жизнью в интернете», в пару кликов удалить свои аккаунты на Facebook (в данный момент сервис блокирован администрацией по IP), Twitter, Linkedin и Myspace. В общем-то судя по количеству положительных отзывов и «успешных очищений» — пипл хавает зависимые от социальных сетей успешно пользуются сервисом и довольны...
Подробнее..



Мечта параноика или Еще раз о шифровании

Веб разработка - Информационная безопасность

мечта параноика или еще раз о шифровании


В свете последних событий с torrents.ru и активизации государственных группировокорганов по борьбе с пиратством, думаю многие задумались как же обезопасить себя или свой сервер на случай если придут нежданные «гости». Вот и мне подвернулась задача защитить локальный медиасервер от посягательств, проведя пару дней за гугленнием и чтением мануалов/howto — мне удалось это реализовать. Скажу сразу, статей по шифрованию очень много, но в основном они рассчитаны на шифрование только определенных разделов, либо устарели/содержат много ошибок.

ЦЕЛИ:
ТЕОРИЯ:


Для начала вкратце объясню теорию как это все будет работать: загрузчик системы и ключ доступа будут храниться на небольшом(<50Mb) разделе флешки, при включении загрузчик разблокирует доступ к шифрованному винту, загружает ядро, подключает виртуальные разделы(LVM), далее происходит обычная загрузка системы.
В качестве операционной системы был выбран Ububtu Server 9.10, но реализовать эту задачу можно на любой UNIX-like системе. Сразу оговорюсь, в самом инсталляторе есть возможность шифрования системы на этапе установки, но там нельзя реализовать пункты 1 и 2 из списка выше потому будем действовать в ручную.

Нам понадобится:
ЭТАП 1. Подготовка флешки и жесткого диска
А) Разбивка флешки на разделы и создание ключа

Подключаем флешку к компьютеру на котором будет шифроваться винт и загружаемся с LiveCD. Наша задача создать на нашей флешке 2 раздела: первый займет почти все пространство и будет отформатирован в FAT16,FAT32,NTFS(на ваш выбор), второй раздел делаем в конце флешки на 50MB и форматируем в ext2. Такая разбивка не случайна — благодаря начальному разделу флешка будет полностью функциональна в любой ОС. Также в windows второй раздел будет недоступен — что является плюсом, если ваша флешка попадет не в те руки. Для создания разделов я воспользовался графической утилитой GParted(была на LiveCD), но никто не мешает вам воспользоваться fdisk. После создания разделов примонтируем их в системе:sudo su
mkdir /mnt/flash /mnt/boot
mount /dev/sdb1 /mnt/flash
mount /dev/sdb2 /mnt/boot
Теперь создадим файл-ключ с помощью которого будем шифровать винт и сделаем его дубликат (на всякий случай):
dd if=/dev/random of=/mnt/boot/mykey bs=1 count=256
cp /mnt/boot/mykey /mnt/flash/

Б) Подготовка винта для шифрования

Для начала нам нужно забить наш винт полностью случайными данными. Это делается для того чтобы невозможно было определить в каких секторах находятся ваши данные и сколько места они занимают, грубо говоря весь винт открытый в HEX-редакторе, должен выглядеть равномерно забитым несвязным мусором, вне зависимости от количества вашей информации. Существует 2 стандартных способа сделать это, оба они медленные, так что запаситесь терпением.
Первый способ. Случайная информация берется из псевдогенератора случайных чисел и пишется на винт блоками по 2MB. Скорость генерации данных на Core Quad Q6600 составила всего 6Mb/сек, так что тестовый винт на 80Гиг заполнился за 4 часа.
sudo dd if=/dev/urandom of=/dev/sda bs=2M
Второй способ лично я не проверил так как нашел уже после подготовки винта. В нем используется программа проверки винта на BAD-блоки. О скорости данного способа и «качестве» рандомданных сказать ничего не могу.
sudo /sbin/badblocks - c 10240 - s - w - t random - v /dev/sda

Теперь, когда поверхность диска заполнена, пора его зашифровать. Для этого воспользуемся технологией LUKS.
sudo cryptsetup - h=sha256 -c=aes-cbc-essiv:sha256 - s=256 luksFormat /dev/sda /mnt/boot/mykey
Вас предупредят об уничтожении данных, для подтверждения нужно написать YES(большими буквами). Подключаем шифрованный диск:
sudo cryptsetup - d=/mnt/boot/mykey luksOpen /dev/sda drivespace
Вводим пароль и получаем новое блочное устройство /dev/mapper/drivespace. С полученным устройством можно работать как с обычным винтом.

В) Создание виртуальной разбивки на разделы(LVM)

Можно создать обычные разделы и отформатировать их, но такой способ не позволит в будущем расширять наши разделы(придется добавлять новые) поэтому воспользуемся технологией LVM. Вкратце она позволяет в любой момент добавить новые винты в пул и расширить логические разделы на добавленное свободное место. Мой LiveCD загрузился без нужных пакетов поэтому сначала устанавливаем их, а потом создаем из нашего расшифрованного винта физический раздел и делим его на логические.
sudo su
apt-get install lvm2
pvcreate /dev/mapper/drivespace
vgcreate vg /dev/mapper/drivespace
lvcreate - L1G - nswap vg
lvcreate - L3G - nroot vg
lvcreate - l 100%FREE - ndata vg
Теперь у нас есть еще 3 блочных устройства /dev/mapper/vg-swap /dev/mapper/vg-root /dev/mapper/vg-data. Форматируем их в нужные ФС.
sudo su
mkswap /dev/mapper/vg-swap
mkfs.ext4 /dev/mapper/vg-root
mkfs.xfs /dev/mapper/vg-data
Все! Наш винт готов к переносу ОС на него. Для подготовки системы нам понадобятся UUIDы винта и разделов потому сохраним их в файл на флешке
ls - l /dev/disk/by-uuid >/mnt/flash/uuid.txt

ЭТАП 2. Подготовка операционной системы
А) Установка системы

Устанавливать нашу ОС нужно либо на отдельный винт, либо на втором компьютере(вирт. машине). Перед установкой подключаем нашу флешку. Установку лучше делать в минимальной конфигурации, настройки выбираете под свои нужды. Единственный важный момент — нужно указать чтобы /boot устанавливался на второй раздел флешки сразу же(чтобы потом не переносить) и убедится что загрузчик Grub будет поставлен на флешку.

Б) Установка дополнительных пакетов, изменение настроек

После завершения установки нам нужно добавить в систему пакеты для поддержки шифрования и LVM и подправить некоторые конфиги. Устанавливаем пакеты(при подключеном инете):
sudo apt-get - y install cryptsetup lvm2 Правим конфиг GRUB. В Ubuntu используется GRUB2, потому правим /boot/grub/grub.cfg. Ищем menuentry «Ubuntu, Linux 2.6.31-14-server» и чуть ниже меняем
linux /vmlinuz-2.6.31-14-server root=UUID=9a651089-88fa-46d6-b547-38d3e10d4e67 ro quiet splash
на
linux /vmlinuz-2.6.31-14-server root=/dev/mapper/vg-root ro quiet splash
Правим /etc/fstab
proc /proc proc defaults 0 0
UUID=eb7f5e37-b957-43dd-8af6-3c8983670df5 /boot ext2 defaults 0 2
/dev/mapper/vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/vg-data /home xfs defaults 0 1
/dev/mapper/vg-swap none swap sw 0 0
Для /boot точку монтирования указываем в виде UUID второго раздела флешки(можно взять с файла на флешке или посмотреть заново в системе), это нужно чтобы система всегда монтировала правильный раздел независимо от количества подключенных флешек/винтов.
Правим /etc/crypttab
drivespace UUID=090d14c1-e3c8-48e7-b123-6d9b8b2e502b /boot/mykey luks,cipher=aes-cbc-essiv:sha256
тут указываем UUID от нашего шифрованного винта(смотрим его в файле на флешке)

В) Изменение initrd

Подготавливаем initrd для работы с шифрованием и LVM. В файле /etc/initramfs-tools/modules добавляем:
dm_mod
dm_crypt
sha256
aes_generic
Создаем файл /etc/initramfs-tools/hooks/cryptokeys с таким скриптом:
PREREQ=

prereqs()
{
echo $PREREQ
}

case $1 in
prereqs)
prereqs
exit 0
;;
esac

if [ ! - x /sbin/cryptsetup ]; then
exit 0
fi

. /usr/share/initramfs-tools/hook-functions
mkdir ${DESTDIR}/etc/console
cp /boot/mykey ${DESTDIR}/etc/console
copy_exec /sbin/cryptsetup /sbin

Он скопирует наш файл-ключ в необычное место внутри образа initrd, чтобы лишний раз флешку не монтировать. Создаем файл /etc/initramfs-tools/scripts/local-top/cryptokeys со скриптом:
PREREQ= udev

prereqs()
{
echo $PREREQ
}

case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
modprobe - b dm_crypt
modprobe - b aes_generic
modprobe - b sha256

while ! /sbin/cryptsetup - d=/etc/console/mykey luksOpen /dev/disk/by-uuid/090d14c1-e3c8-48e7-b123-6d9b8b2e502b drivespace; do
echo Try again...
done
Он выполнится в процессе загрузки initrd, загрузит нужные модули ядра и будет пытаться открыть наш зашифрованный винт с UUID=090d14c1-e3c8-48e7-b123-6d9b8b2e502b. (Цикл был сделан для случая с парольной фразой вместо ключа). Вам нужно вписать сюда свой UUID от зашифрованного винта.
Теперь выполняем:
sudo update-initramfs - u ALL

Г) Упаковка системы для переноса

Смонтируем наш раздел с корневой фс в отдельную папку и упакуем на первый раздел флешки:
mkdir /mnt/root && mount /dev/sda1 /mnt/root && cd /mnt/root
tar cfjv /mnt/flash/systembackup.tar.bz2 . #НЕ ПРОПУСТИТЕ ТОЧКУ В КОНЦЕ СТРОКИ
Теперь можно переносить систему.

ЭТАП 3. Перенос системы


Тут все просто: подключаем нашу флешку с бекапом, загружаемся с LiveCD, подключаем шифрованный винт, устанавливаем пакет поддержки LVM, монтируем виртуальный корневой раздел(возможно сначала придется выполнить vgscan и vgmknodes чтобы система увидела разделы), монтируем флешку и распаковываем архив с системой.
sudo su
cryptsetup - d=/mnt/boot/mykey luksOpen /dev/disk/by-uuid/090d14c1-e3c8-48e7-b123-6d9b8b2e502b drivespace
apt-get install lvm2
#vgscan && vgchange - a y && vgmknodes vg #Выполняем если система не увидела виртуальные разделы
mkdir /mnt/root
mount /dev/mapper/vg-root /mnt/root
mkdir /mnt/flash
mount /dev/sdb1 /mnt/flash
cp /mnt/flash/systembackup.tar.gz /mnt/root && cd /mnt/root #переносим архив на винт, для ускорения распаковки
tar xfvj systembackup.tar.bz2

Ну вот и все, перезагружаем компьютер и загружаемся с флешки. Если все сделано правильно, то через несколько секунд вы увидите надпись Key slot 0 unlocked, значит ваш винт расшифровался и подключился, после этого пойдет стандартная загрузка системы.

Примечания, источники


В случае домашнего компьютера такая система дает вам возможность надежно защитить свою личную информацию и не позволит никому пользоваться компьютером без вашего ведома(без флешки); в случае сервера в организации, если к вам пришла проверка — выдернули флешку и тыкнули reset и для экспертов у вас нерабочий/новый компьютер; для сервера у хостера я бы усложнил систему и хранил ключ где-то в сети, если сервер отключат и заберут, он не загрузится без инета(а вам нужно быстро убрать доступ к ключу — чтобы вообще не загрузился).

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

Обязательно сделайте копию своего ключа, чтобы не потерять доступ к своим данным. Также неплохой идеей будет добавить второй ключ в виде пароля(как это сделать можно прочитать в документации LUKS/cryptsetup). Организация устойчивого к сбоям хранилища на основе RAID1,5,6 также будет не лишней при хранении ценной инфы.

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

 


Читайте:


Добавить комментарий


Защитный код
Обновить

News image

WidgetPad – открытая среда для коллективной разработки мобильных прило

Сатоси Накадзима (Satoshi Nakajima) – создатель первой системы автоматизированного проектирования для ПК, один из ведущих разработчиков Windows 95 и...

News image

Совместная работа над кодом в компании Google

Во второй главе книги «Coders at Work», Брэд Фицпатрик (Brad Fitzpatrick) — автор Live Journal, а сейчас сотрудник компании Google, помимо всяких ин...

News image

Android NDK r3 – приложения для платформы Android получат скоростную г

Компания Google осуществила третий по счету выпуск своего инструментария для разработчиков Android NDK (Native Developer Kit) для создания приложени...

News image

Magic Trackpad — начальные впечатления

Что это такое наверное знают все. Если вдруг вы пропустили этот прелюбопытнейший продукт, тогда вам стоит почитать www.apple.com/magictrackpad/ М...

News image

Язык C#: от Microsoft для разработчиков

В последнее время внимание сообщества специалистов IT-индустрии приковано к новой инициативе компании Microsoft -- .NET. Однако в своем восприятии э...

Топ технологий:

News image

Оздана новая система беспроводной связи - она в 10

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

News image

Как взломали Twitter

В Интернетах, наряду с iPad, сканерами в аэропортах и войне между Google и Apple, уже второй день подряд активно обсуждается тема взлома и...