Переключение с ядра на ядро во время работы. Возможно?
Модератор: Модераторы разделов
-
- Сообщения: 64
- ОС: Debian
Переключение с ядра на ядро во время работы. Возможно?
Ситуация следующего плана:
Хочу сделать, чтобы линукс работал на полностью закриптованном 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 ?
Хочу сделать, чтобы линукс работал на полностью закриптованном 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 ?
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
Очень интересный вопрос!
Если в оперативе уже есть ядро от LiveCD системы, то туда нельзя загрузить новое ядро (выгрузив live-ядро, мы получим крах live-системы).
Хотя с другой стороны никто не мешает загрузить в память бинарник. Проблема в том, что передавая на него управление, Вы запускаете его в адресном пространсве live-системы. И раз Вы ее собираетесь выгружать, то нужно что-то типа... создания еще одного kernel-пространства. Чисто теоретически, я думаю, это возможно, но этот реальный хак, потребует написание не одного модуля ядра и хорошего знания ассемблера.
Хотя опять же: ядру важно не просто быть загруженным в оперативу, код определенных системных вызовов должен находиться по определенным адресам, в которых находится старое ядро + ко всему этому надо установить свои обработчики прерываний и прочую муть. Атомарно переключиться на новое ядро точно не получится, а подхватить работу ядра теоретически можно, но сложно - поэтому вряд-ли это реализовано.
Если размышлять дальше в этом направлении, т.е. заюзать смещение адресов, то...
Ядро может и будет думать, что оно одно и думаю, что оно само по себе работать станет, но только вот приложения-то думают, что код ядра не смещен, и будут пытаться передавать на него управление в системных вызовах. С обработчиками вообще все сложно, надо как-то обрабатывать страничные прерывания для этого надо подхватить виртуальную память, надо подхватить планировщик, надо переписать значения в некоторых системных регистрах (как миниму переустановить глобальную таблицу дескрипторов).
Если я не ошибаюсь, что-то такое возможно получиться сделать на power-архитектуре.
Если в оперативе уже есть ядро от 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)
"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)
-
- Модератор
- Сообщения: 21036
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Переключение с ядра на ядро во время работы. Возможно?
А хотя бы /boot оставить незашифрованным никак нельзя? Описанное НЯП вряд ли возможно за счёт разумных усилий (без существенной модификации ядра).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
Если в оперативе уже есть ядро от LiveCD системы, то туда нельзя загрузить новое ядро (выгрузив live-ядро, мы получим крах live-системы)
Тогда у меня вопрос:
Если оставить в оперативной памяти ядро LiveCD, а флешку вытащить после загрузки, краха системы и ошибок в работе мы не получим? А если после извлечения флешки нужно будет подцепить какой нибудь модуль к ядру? Что будет тогда?
Если возможно оставить ядро LiveCD в оперативной памяти, то возможно, чтобы /proc тоже был на зашифрованном HDD?
А хотя бы /boot оставить незашифрованным никак нельзя? Описанное НЯП вряд ли возможно за счёт разумных усилий (без существенной модификации ядра).
Если /boot оставить незашифрованным, тогда ядро будет грузится с /boot, а вот дальше как сделать, чтобы сперва получить доступ на закриптованный HDD, а потом присоединить все точки монтирования?
-
- Модератор
- Сообщения: 21036
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Переключение с ядра на ядро во время работы. Возможно?
Ну а за этим можно уже спокойно идти в гугл. Я, например, вот что нашёл.
Кстати, никто не мешает /boot на флешке держать.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
Ну оно же свопится на флешку. Если загружать систему и указывать параметром ядра, что /proc - это раздел на диске (возможно создать небольшой раздел на hdd для загрузки live-системы под /proc).
А откуда Вы собираетесь подгружать модули?
На такие вопросы точно/наверняка ответить можно после тестов.
Можно попробовать вот что сделать: добавить в 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)
"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)
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
+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)
"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)
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
А откуда Вы собираетесь подгружать модули? smile.gif
Ну а за этим можно уже спокойно идти в гугл. Я, например, вот что нашёл.
Кстати, никто не мешает /boot на флешке держать.
Спасибо.
Кстати эту статью я видел.
Можно попробовать вот что сделать: добавить в initrd криптомодули и указать, что корень и есть наш зашифрованный диск.
Буду пробовать. Спасибо
В общем буду пробовать и тестировать.
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
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)
"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)
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
Переключится с ядра на ядро пока не получилось.Не получилось?
А вот грузится с закриптованного диска получилось. В общем ситуация следующая.
Закриптовал весь рутовый раздел dm-crypt'ом, а разделы var, home закриптовал losetup'ом. losetup монтируется автоматически при старте системы, скриптом, который я написал. Т.е. остался один незакриптованный раздел - /boot.
В initrd не правил ничего(пока только разобрался как и что в нем устроено).
/boot на флешке тоже не стал размещать(по крайней мере пока) - не удобно флешку все время вставленной держать. Или я ошибаюсь? Можно ли достать флешку после того как ядро с флешки загрузится и подмонтируется закриптованный HDD и система будет работать? (разумеется если необходимо будет подгрузить модули к ядру, то модули будут грузится с HDD диска).
Если можно извлекать флешку после загрузки, то скорее всего приду к тому, что /boot раздел будет находится на флешке, а все остальное будет на HDD. Правда для этого придется править initrd.
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
Дык, я ж об этом и писал.
У Вас весь диск зашифрован. Модули, чтобы читать зашифрованный диск, лежат на флешке. Вставляем флешку, включаем комп - загружается 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)
"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)
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
Дык, я ж об этом и писал.
Просто вы так об этом написали, что не понятно, то ли это был прикол то ли всерьёз. Вот я и решил переспросить на всякий случай.
Сейчас я буду всё настраивать, чтобы все работало. Потом (недели через две) отпишу как и что я делал, и что получилось. Всем спасибо.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Переключение с ядра на ядро во время работы. Возможно?
Единственное "переключение", которое возможно с ядром Linux - это загрузка ядра средствами kexec, поддержка которого имеется в ядре уже пару лет. Никакого сохранения контекста не выполняется, просто новое ядро загружается старым, после чего старое передаёт управление новому. Всё что это даёт - отказ от сброса процессора и сокращение последовательности "Инициализация процессора -> Инициализация BIOS -> Поиск загрузочного носителя -> Запуск загрузчика ядра -> Загрузка ядра -> Передача ему управления" до "Загрузка ядра -> Передача ему управления".
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
Всем СПАСИБО. Тему можно закрывать.
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Переключение с ядра на ядро во время работы. Возможно?
Дык... получилось или нет? С 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)
"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)
-
- Сообщения: 64
- ОС: Debian
Re: Переключение с ядра на ядро во время работы. Возможно?
Всем СПАСИБО. Тему можно закрывать.
Извиняюсь. Проглядел свой предыдущий пост. До 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 ?
-
- Сообщения: 2565
- ОС: Debian