Страница 1 из 2

Зеркалирование загрузочного раздела

Добавлено: 2009-02-28 4:35:57
hishnik
Здравствуйте.
Пытаюсь собрать следующую конфигурацию:
FreeBSD загружается с usb-drive на котором находятся ключи шифрования от всего диска (geli), естественно с паролем. (уже сделано)
Проблема же заключается в следующем - после загрузки должна быть возможность извлечь флешку, чтобы сохранить ключи, без потери /boot раздела.
Идея - во время начальной загрузки создать md диск который добавить в зеркало с /boot, затем отключить флешку и потереть ключи на загрузочном разделе.
Не знаю что меня останавливает %)
Просто хочу спросить Ваше мнение на этот счет.
Заработает?

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-02-28 12:49:17
Alex Keda
зачем их сохранять после загрузки?
раздел же уже примонтирован

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-02-28 16:08:21
hishnik
А сохранять их надо для возможности подгрузки модулей ядра во время работы ОС.
И проблема как раз в том и состоит, что флешку надо выдернуть и кинуть на карман, чтобы ключи никому не достались...
Ну а /boot останется на md0 например.

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-02-28 18:37:56
Alex Keda
ну, а в чём проблема собственно?
что не получается?

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-03-01 0:40:03
hishnik
Хочется еще все это на GPT сделать.
Допустим скрипт поместим в /etc/rc.d/bootmirror.sh
Сможет ли ОС загрузиться, если я обработаю раздел `gmirror label ...`?

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-03-01 1:00:34
Alex Keda
флэшку с ГПТ?
изврат....

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-03-01 4:04:43
hishnik
Согласен - Из_врат!
Потому и хочется... ;)
Можна будя написати хав-ту на тему: "АкууИЫВ Total Offline Security" %)

Re: Зеркалирование загрузочного раздела

Добавлено: 2009-03-04 20:06:30
hishnik
Чтож, жаль что Вы меня не поддержали...
А у меня 8-ка, установленная на юсб-флешку грузиться отказывается, не видит da0s1a. Никто не сталкивался? Вроде ядро даже umass0 определяет, но при этом da не видит... мне 8-ка нужна чтобы флешку сделать...

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 13:38:27
hishnik
Я так и не понял насчёт того, какие команды надо писать, чтобы рэйд забыл флешку, но потом при следующей загрузке разметка gmirror осталась в норме. Покамест вижу лишь одно решение - флешка с защитой от записи %(

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 15:47:32
BirdGovorun
Мне кажется слишком мудрёно вы делаете.
Шифрование с паролем, чревато применением терморектального криптоанализа. :-D
Шифрование по ключу, самое то.

У меня шифрование по ключу, ключ на флешке
и скрипт

Код: Выделить всё

%cat mount_geli
#!/bin/sh
/usr/local/etc/rc.d/samba stop
mdconfig -at vnode -f /data/doc
mount -t msdosfs /dev/da0s1 /mnt
geli attach -p -k /mnt/md0.key /dev/md0
mount /dev/md0.eli /usr/samba/doc
/usr/local/etc/rc.d/samba start
umount /mnt
вставил флешку, скрипт отработал, выташил флешку, отдал директору
всё руки не доходят вставить в загрузку системы, нет флешки - нет загрузки системы.

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 16:19:41
hishnik
Да, но 2 фактора, есть 2 фактора.
У меня вообще планы сделать по отпечатку. Есть даже флешка с хардвёрной аутентификацией по пальцу, одна проблема - на ней максимум 5 пользователей может быть, а найти загрузчик, который будет грузить с разных разделов флешки разные ОС , да ещё и понимающий GPT+ZFS или хотя бы UFS - я пока тоже не смог ;( [хотя поговаривали про grub2]

Кстати, Ваше монтирование я бы сделал по событию вставки флешки (ридера?) (devd.conf). Да и ещё одно: что-то я не обнаружил в скрипте перенос данных на md0, а если они в зеркале, то его придётся разметить...в общем не внял я... %((

Если уж разговор заладился, продолжу: т.к. с загрузчиком пока всё плохо, решил сменить схему. Загрузчик с ключом - на microSD, пароль - в голове. Идея такова: носить microSD в лацкане пиджака например, и в случае опасности - разгрызть и съесть (Для верности можно смазать цанидом %). Как вариант - изготовить криптекс на основе термита...
Отсюда кстати следует не сильно праздный вопрос: Кто нибудь разгрызал microSD? Как ощущения?

Насчёт ключа на флешке - идея порочная, она не гарантирует единственности копии ключа, его можно украсть с флешки, а также подменить ядро на такое же, но со встроенным рут-китом.

В идеале - это должна быть SmartCard, но быстрых и таких что могут использоваться через crypto(4) - не видал.
Кража ключа ничего не даст, если у Вас установлен ещё и пароль.
Коли нет нормальных ключей, приходится извращаться: проверка контрольных сумм файлов на флешке + шифрование с ключом и паролем.
Подобную конфигурацию использую уже лет 5, ещё начиная с bde...
Считаю шифрование необходимостью на всех мобильных устройствах (и для телефонов тоже %).

Сам UseCase должен быть построен так, чтобы минимизировать вероятность утечки...политикой называется кажется.

По сути нужно отключить от gmirror'a флешку, не нарушая gmirror разметки. Сейчас - я дёргаю на горячую, а потом при загрузке он ругается, мол грязный раздел и т.п. хочется чистого решения.

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 16:26:48
hishnik
З.Ы.Ж
Лучше всего использовать GPT-labels для адресации устройств хранения, тогда всё ОК.

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 16:37:55
BirdGovorun
hishnik писал(а): Кстати, Ваше монтирование я бы сделал по событию вставки флешки (ридера?) (devd.conf). Да и ещё одно: что-то я не обнаружил в скрипте перенос данных на md0, а если они в зеркале, то его придётся разметить...в общем не внял я... %((
А зачем данные переносить? Они уже там, зашифрованны. И у меня зеркало.

Код: Выделить всё

FreeBSD 8.2-RELEASE-p2
%gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad4
                      ad6
%geli status
   Name  Status  Components
md0.eli  ACTIVE  md0
%
Всё сделанно на скорую руку, после масок-шоу на соседних предприятиях.
Кстати, Ваше монтирование я бы сделал по событию вставки флешки (ридера?) (devd.conf)
Собирался делать, но ключи храняться в службе безопасности головного предприятия.
Что использовать, ключ или пароль или ключ+пароль, это наверное зависит от ситуации.
Украсть всё могут и паяльники в свободной продаже :smile:

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-11-22 20:17:15
hishnik
Извините, не понял с первого раза %(.
Зеркало тут ни при чём.
В Вашем случае действительно так удобней, но пароли никто не отменял, тем паче их можно по частям раздать разным людям, и тогда паяльник грозит ИМ %)
У меня подобная схема на удостоверяющем центре. Геля позволяет иметь 2 независимых ключа (и пароля соответственно), поэтому одна флешка - у начальства в сейфе, а одна - в работе. При этом кнопка уничтожения ключа настроена на рабочий.

P.S.: считаю тред актуалным и буду благодарен тому кто придумает как вытащить флешку из зеркала, так чтобы разметка gmirror была в consistent state.

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-12-01 14:39:10
hishnik
!UP!

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-12-28 14:11:29
xrensgory
А попробовать по detach в devd делать
gmirror remove name prov

Код: Выделить всё

# gmirror list       
Geom name: gm0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2435888365
Providers:
1. Name: mirror/gm0
   Mediasize: 250059349504 (232G)
   Sectorsize: 512
   Mode: r5w5e14
Consumers:
1. Name: ad4
   Mediasize: 250059350016 (232G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: DIRTY
   GenID: 0
   SyncID: 1
   ID: 1751864585
2. Name: ad6
   Mediasize: 250059350016 (232G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: DIRTY
   GenID: 0
   SyncID: 1
   ID: 3619172574

# gmirror remove gm0 ad4        
# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad6 (ACTIVE)
а по attach gmirror insert

Re: Зеркалирование загрузочного раздела

Добавлено: 2011-12-28 14:30:56
hishnik
Вот выдержка из мана, по-поводу remove:
remove Remove the given component(s) from the mirror and clear meta-
data on it.
Мне же необходимо выдернуть из рэйда флешку, не затронув метаданные. Сейчас - я её просто выдёргиваю, но флаг "подключённости" к рэйду остаётся и в статус он потом пишет DIRTY.

По поводу события on-detach - мне не сильно подходит, так как уже на флешку ничего не скинешь.

Повторю ещё раз основную идею:
Загрузка с MicroSD (GELI+KEYs+PASS), затем создание memorydrive, включение md0 в gmirror microSDшки, ожидание окончания процесса зеркалирования, отключение microSD из рэйда, вытаскивание флешки должно вызывать событие удаления ключей с md0.

Пока - просто терплю сообщения о грязном RAID при загрузке %(((

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-02 22:18:44
manefesto
а если процессы начнут кушать свап, а у тебя его нету ?

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-05 20:38:43
Barmaglot
Зачем /boot на флэшке? На ней нужны только ключи. Больше ничего. /boot можно оставить на жестком диске.

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-07 3:03:42
hishnik
Boot не должен быть в свободном доступе. На диске он подвержен атакам, тем паче - модули ядра работают в нулевом кольце защиты процессора. Да и есть флешка с хардвёрной аутентификацией по отпечатку - самый раз чтобы загрузчики с ключами там разместить.
...немного оффтоп...Правда следующую проблему стоит обсудить в отдельном треде: нужен загрузчик, чтобы ставился на флешку (желательно с GPT-разметкой) и мог передавать управление загрузчикам разделов - там много граблей %(. например если делаешь GPT-разметку и делаешь раздел типа freebsd-boot то с какого раздела будет произведена загрузка - со следующего или это где-то можно настроить?

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-07 3:07:15
hishnik
manefesto писал(а):а если процессы начнут кушать свап, а у тебя его нету ?
Ну почему же у меня его нету?
Я на свап не скуплюсь, и вообще люблю `mdconfig -t swap` побаловаться в целях ускорения процессов...

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-07 12:09:23
Barmaglot
hishnik писал(а):Boot не должен быть в свободном доступе. На диске он подвержен атакам, тем паче - модули ядра работают в нулевом кольце защиты процессора. Да и есть флешка с хардвёрной аутентификацией по отпечатку - самый раз чтобы загрузчики с ключами там разместить.
...немного оффтоп...Правда следующую проблему стоит обсудить в отдельном треде: нужен загрузчик, чтобы ставился на флешку (желательно с GPT-разметкой) и мог передавать управление загрузчикам разделов - там много граблей %(. например если делаешь GPT-разметку и делаешь раздел типа freebsd-boot то с какого раздела будет произведена загрузка - со следующего или это где-то можно настроить?
Какие-то сложности на ровном месте, правда.
Хорошо, пусть будет /boot на флэшке, тогда его просто не надо монтировать на /boot после загрузки. На корне должен быть свой /boot не разделом, с модулями ядра и прочим. Системе решительно все равно где находится /boot/kernel/modules.
Загрузчик у тебя уже есть, называется loader(8). man boot. Еще читай developers-handbook, там процедура загрузки подробнее рассматривается.
man loader - на предмет root fs и настройки откуда и чего нужно грузить.

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-07 17:26:11
hishnik
не монтировать boot - хорошая идея. У меня была подобная конфигурация... не устроила тем, что не сильно прозрачна процедура обновления, да и возможностью появления "разноверсицы" модулей. Хотел скрипт набацать, чтобы всё это в фоне, на gmirror зеркалировалось на memorydrive, и по необходимости (после обновления ядра), эти данные синхронились с разделом флешки (поиграться с приоритетами).
Это решение было бы более технологично, на мой вкус.

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-07 23:31:53
Barmaglot
Технологично будет не усложнять. Сделать скрипт в один маунт флэшки, rsync и umount - это технологично. Все равно обновление системы/пересборка ядра это 95% операций с /boot и вызвать после этого руками некий afterupdateboot.sh вполне логично, просто и ясно.

Re: Зеркалирование загрузочного раздела

Добавлено: 2012-01-10 14:31:33
hishnik
Именно так (в смысле только (dump/restore)) выглядят мои нынешние конфигурации.
Тут разница во времени синхронизации серьёзная. dump/restore - минут 5, gmirror - и минуты не проходит.
А насчёт afterupdateboot.sh - всё так, но тогда ведь нет никакой разницы как он там внутри сделан gmirror или rsync.
Зеркало - быстрее и не позволяет случиться аномалиям в данных. Если уж делать скрипт, хорошо бы свести к минимуму возможность повредить системе.
Оба варианта - рабочие, проверял. Но, как я писал выше, хочется на зеркале сделать, пока не ясно как...