Переключение с ядра на ядро во время работы. Возможно?

Взгляд изнутри

Модератор: Модераторы разделов

Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Ситуация следующего плана:
Хочу сделать, чтобы линукс работал на полностью закриптованном HDD. (т.е. все разделы, такие как "/", "/root", и др. были зашифрованы)
Имеется:
а. Debian, LiveCD расположенный на USB(флешке). (если нужно, Debian 5 lenny, 2.6.26-2-amd64)
б. HDD, который будет закриптованным, и на котором установлена (копия/рабочая) ОС Debian. (если нужно, Debian 5 lenny, 2.6.26-2-amd64)
в. И все остальное, что необходимо для настольного ПК

Вот примерная схема работы:
1. Грузимся с LiveCD (подгружаем ядро с LiveCD и все модули, для работы с криптованием), чтобы иметь доступ на закриптованный HDD.
2. Когда доступ, на закриптованный HDD, получен, нужно переключиться с ядра LiveCD, на ядро, расположенное на закриптованном HDD. По возможности переключиться так, чтобы флешку с LiveCD можно было вытащить и работать дальше без нее.

Вопросы:
Возможно ли то, что описано в пункте 2, и как это реализовать ? (при помощи каких команд) (укажите в какую сторону копать)
Если такое не возможно, то какие есть инструменты, позволяющие максимально приблизить желаемое в пункте 2 ?
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

Очень интересный вопрос!

Если в оперативе уже есть ядро от LiveCD системы, то туда нельзя загрузить новое ядро (выгрузив live-ядро, мы получим крах live-системы).

Хотя с другой стороны никто не мешает загрузить в память бинарник. Проблема в том, что передавая на него управление, Вы запускаете его в адресном пространсве live-системы. И раз Вы ее собираетесь выгружать, то нужно что-то типа... создания еще одного kernel-пространства. Чисто теоретически, я думаю, это возможно, но этот реальный хак, потребует написание не одного модуля ядра и хорошего знания ассемблера.

Хотя опять же: ядру важно не просто быть загруженным в оперативу, код определенных системных вызовов должен находиться по определенным адресам, в которых находится старое ядро + ко всему этому надо установить свои обработчики прерываний и прочую муть. Атомарно переключиться на новое ядро точно не получится, а подхватить работу ядра теоретически можно, но сложно - поэтому вряд-ли это реализовано.

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

Если я не ошибаюсь, что-то такое возможно получиться сделать на power-архитектуре.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21036
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Bizdelnick »

А хотя бы /boot оставить незашифрованным никак нельзя? Описанное НЯП вряд ли возможно за счёт разумных усилий (без существенной модификации ядра).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Если в оперативе уже есть ядро от LiveCD системы, то туда нельзя загрузить новое ядро (выгрузив live-ядро, мы получим крах live-системы)

Тогда у меня вопрос:
Если оставить в оперативной памяти ядро LiveCD, а флешку вытащить после загрузки, краха системы и ошибок в работе мы не получим? А если после извлечения флешки нужно будет подцепить какой нибудь модуль к ядру? Что будет тогда?
Если возможно оставить ядро LiveCD в оперативной памяти, то возможно, чтобы /proc тоже был на зашифрованном HDD?

А хотя бы /boot оставить незашифрованным никак нельзя? Описанное НЯП вряд ли возможно за счёт разумных усилий (без существенной модификации ядра).

Если /boot оставить незашифрованным, тогда ядро будет грузится с /boot, а вот дальше как сделать, чтобы сперва получить доступ на закриптованный HDD, а потом присоединить все точки монтирования?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21036
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Bizdelnick »

dduck писал(а):
28.11.2009 00:31
Если /boot оставить незашифрованным, тогда ядро будет грузится с /boot, а вот дальше как сделать, чтобы сперва получить доступ на закриптованный HDD, а потом присоединить все точки монтирования?

Ну а за этим можно уже спокойно идти в гугл. Я, например, вот что нашёл.

Кстати, никто не мешает /boot на флешке держать.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

dduck писал(а):
28.11.2009 00:31
Если оставить в оперативной памяти ядро LiveCD, а флешку вытащить после загрузки, краха системы и ошибок в работе мы не получим?

Ну оно же свопится на флешку. Если загружать систему и указывать параметром ядра, что /proc - это раздел на диске (возможно создать небольшой раздел на hdd для загрузки live-системы под /proc).

dduck писал(а):
28.11.2009 00:31
А если после извлечения флешки нужно будет подцепить какой нибудь модуль к ядру? Что будет тогда?
А откуда Вы собираетесь подгружать модули? :)

dduck писал(а):
28.11.2009 00:31
Если возможно оставить ядро LiveCD в оперативной памяти, то возможно, чтобы /proc тоже был на зашифрованном HDD?

На такие вопросы точно/наверняка ответить можно после тестов.

dduck писал(а):
28.11.2009 00:31
Если /boot оставить незашифрованным, тогда ядро будет грузится с /boot, а вот дальше как сделать, чтобы сперва получить доступ на закриптованный HDD, а потом присоединить все точки монтирования?

Можно попробовать вот что сделать: добавить в initrd криптомодули и указать, что корень и есть наш зашифрованный диск.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

Bizdelnick писал(а):
28.11.2009 00:50
Кстати, никто не мешает /boot на флешке держать

+1

Если топиксартер хочет винт целиком шифровать, то это, я думаю, должно прокатить. Не забывайте про модули в initrd.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

А откуда Вы собираетесь подгружать модули? smile.gif
:)

Ну а за этим можно уже спокойно идти в гугл. Я, например, вот что нашёл.
Кстати, никто не мешает /boot на флешке держать.

Спасибо.
Кстати эту статью я видел.

Можно попробовать вот что сделать: добавить в initrd криптомодули и указать, что корень и есть наш зашифрованный диск.

Буду пробовать. Спасибо

В общем буду пробовать и тестировать.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

dduck

Не получилось?
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Не получилось?
Переключится с ядра на ядро пока не получилось.
А вот грузится с закриптованного диска получилось. В общем ситуация следующая.
Закриптовал весь рутовый раздел dm-crypt'ом, а разделы var, home закриптовал losetup'ом. losetup монтируется автоматически при старте системы, скриптом, который я написал. Т.е. остался один незакриптованный раздел - /boot.

В initrd не правил ничего(пока только разобрался как и что в нем устроено).
/boot на флешке тоже не стал размещать(по крайней мере пока) - не удобно флешку все время вставленной держать. Или я ошибаюсь? Можно ли достать флешку после того как ядро с флешки загрузится и подмонтируется закриптованный HDD и система будет работать? (разумеется если необходимо будет подгрузить модули к ядру, то модули будут грузится с HDD диска).

Если можно извлекать флешку после загрузки, то скорее всего приду к тому, что /boot раздел будет находится на флешке, а все остальное будет на HDD. Правда для этого придется править initrd.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

dduck писал(а):
04.12.2009 16:42
Если можно извлекать флешку после загрузки, то скорее всего приду к тому, что /boot раздел будет находится на флешке, а все остальное будет на HDD. Правда для этого придется править initrd.

Дык, я ж об этом и писал.

У Вас весь диск зашифрован. Модули, чтобы читать зашифрованный диск, лежат на флешке. Вставляем флешку, включаем комп - загружается Linux. Вынимаем флешку, включаем комп - ничего не загружается.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Дык, я ж об этом и писал.

Просто вы так об этом написали, что не понятно, то ли это был прикол то ли всерьёз. Вот я и решил переспросить на всякий случай. :)

Сейчас я буду всё настраивать, чтобы все работало. Потом (недели через две) отпишу как и что я делал, и что получилось. Всем спасибо.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение serzh-z »

Единственное "переключение", которое возможно с ядром Linux - это загрузка ядра средствами kexec, поддержка которого имеется в ядре уже пару лет. Никакого сохранения контекста не выполняется, просто новое ядро загружается старым, после чего старое передаёт управление новому. Всё что это даёт - отказ от сброса процессора и сокращение последовательности "Инициализация процессора -> Инициализация BIOS -> Поиск загрузочного носителя -> Запуск загрузчика ядра -> Загрузка ядра -> Передача ему управления" до "Загрузка ядра -> Передача ему управления".
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Всем СПАСИБО. Тему можно закрывать.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение Stauffenberg »

dduck писал(а):
04.12.2009 19:11
Сейчас я буду всё настраивать, чтобы все работало. Потом (недели через две) отпишу как и что я делал, и что получилось. Всем спасибо.

dduck писал(а):
10.12.2009 15:50
Всем СПАСИБО. Тему можно закрывать.


Дык... получилось или нет? С kexec пробовали?
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение dduck »

Всем СПАСИБО. Тему можно закрывать.

Извиняюсь. Проглядел свой предыдущий пост. :) До kexec пока не дошёл. Пробовал, на простой системе (без криптования) - грузится.

Пока разбираюсь. Возник ещё один вопрос. Файл initrd распаковал. Начал править файл init. Однако оказалось, что там грузится пакет BusyBox, в котором урезанные версии приложений. Я скопировал оригинальный исполняемый файл нужной мне программы (losetup) из своей корневой системы в каталог /sbin, который располагается в файле initrd. Сжал это всё дело обратно. Оказалось, что всё равно запускается урезанная версия losetup, которая присутствует в BusyBox. А эта урезанная версия не поддерживает шифрование.
вот код который я дописал в файл init:

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

/sbin/losetup -e blowfish128 /dev/loop0 /dev/hda
mount -t ext3 /dev/loop0 /mnt/disk

Подскажите как сделать, чтобы запускался нужный мне, не урезанный losetup ?
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Переключение с ядра на ядро во время работы. Возможно?

Сообщение IMB »

dduck писал(а):
14.12.2009 11:42
Подскажите как сделать, чтобы запускался нужный мне, не урезанный losetup ?

Обратите внимание, что все программы в BusyBox являются ссылками на него. Скорее всего Вам поможет пересборка BusyBox с отключением losetup.
Спасибо сказали: