Шифрование (корневого раздела)
Модераторы: SLEDopit, Модераторы разделов
-
pelmen
- Сообщения: 1268
- ОС: debian
Шифрование
Подскажите, хочу шифровать корень (понимаю, что это снизит производительность, что это делать бессмысленно, что нужно только /хоум или еще чего, в крайнем случае свап, но мне ПРОСТО ИНТЕРЕСНО). Наткнулся на 2 варианта шифрования раздела:
1. losetup -e aes /dev/loop0 /dev/hda1
2. truecrypt --keyfile-create file && truecrypt -k file -c /dev/hda1
И в том и в другом случае получается "контейнер" с нешифрованными данными (/dev/loop0 и /dev/mapper/truecrypt0), который можно примонтировать и работать. Вопрос в том, как сделать загрузчик (grub) на флешке, чтоб при выборе ОС и при вводе пароля происходило расшифрование, монтирование и дальнейшая загрузка системы?
1. losetup -e aes /dev/loop0 /dev/hda1
2. truecrypt --keyfile-create file && truecrypt -k file -c /dev/hda1
И в том и в другом случае получается "контейнер" с нешифрованными данными (/dev/loop0 и /dev/mapper/truecrypt0), который можно примонтировать и работать. Вопрос в том, как сделать загрузчик (grub) на флешке, чтоб при выборе ОС и при вводе пароля происходило расшифрование, монтирование и дальнейшая загрузка системы?
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Шифрование
я, честно говоря, никогда не занимался таким, но с загрузкой системы много извращался. имхо тут стоит обращать внимание не на загрузчик, а не initrd.
когда у вас grub загружает ядро, он распакоывавает initrd/initramfs (если оно есть) и передает управление скрипту init в initrd (не путать со скриптом init в корневой фс). этот скрипт осуществляет загрузку всего, что необходимо запустить до старта основной системы. например raid, lvm, какие-нибудь модули и т.п. туда же можно запихать и шифрование.
если будете делать руками, а не на основе каких-нибудь дистрибутивов могу порекомендовать взять генератор initrd - yaird - Yet Another mkInitRD. он маленький и простой, сгенирируйте им initrd, разпакуте его и поглядите там init. там все просто и понятно и можно добавить туда расшифровку.
я таким образом делал монтирование корневой ФС по сети поверх vpn.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
pelmen
- Сообщения: 1268
- ОС: debian
Re: Шифрование
А он чем запакован? Точнее, как его распаковать и потом после изменения запаковатьЛенивая Бестолочь писал(а): ↑05.09.2009 16:17сгенирируйте им initrd, разпакуте его и поглядите там init.
-
strah
- Сообщения: 283
- ОС: Freebsd, linux, Solaris.
Re: Шифрование
pelmen писал(а): ↑06.09.2009 00:03А он чем запакован? Точнее, как его распаковать и потом после изменения запаковатьЛенивая Бестолочь писал(а): ↑05.09.2009 16:17сгенирируйте им initrd, разпакуте его и поглядите там init.
initrd? Вообще это cpio-архив, сжатый gzip-ом. Хотя я еще встречал initrd в виде образа ФС(ext2).
/earth: file system full
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Шифрование
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
pelmen
- Сообщения: 1268
- ОС: debian
Re: Шифрование
распаковал, посмотрел init, внес пока что для теста простое echo "hello world", запаковал, проверил.
Для того, чтобы запихнуть туда расшифровку (как я себе это представляю):
1. найти в init строку, монтирующую корневую ФС
2. заменить её на
- привязку зашифрованного раздела к /dev/loop0 (losetup) с расшифровкой
- монтирование /dev/loop0 в корень
3. впихнуть в инитрд необходимые модули для расшифровки и саму утилиту losetup (как это сделать я пока не знаю)
Отсюда вопрос:
1. как впихнуть туда losetup
2. зашифрованный раздел детектится как неотформатированный, значит не имеет UUID, соответственно, работать с ним можно только через /dev/sdxx, но тогда возможны проблемы, если в очередной раз он задетектится как /dev/sdyx (если, например, он на переносном жестком диске, а мы решили на другом компе его загрузить)
Для того, чтобы запихнуть туда расшифровку (как я себе это представляю):
1. найти в init строку, монтирующую корневую ФС
2. заменить её на
- привязку зашифрованного раздела к /dev/loop0 (losetup) с расшифровкой
- монтирование /dev/loop0 в корень
3. впихнуть в инитрд необходимые модули для расшифровки и саму утилиту losetup (как это сделать я пока не знаю)
Отсюда вопрос:
1. как впихнуть туда losetup
2. зашифрованный раздел детектится как неотформатированный, значит не имеет UUID, соответственно, работать с ним можно только через /dev/sdxx, но тогда возможны проблемы, если в очередной раз он задетектится как /dev/sdyx (если, например, он на переносном жестком диске, а мы решили на другом компе его загрузить)
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Шифрование
копируете losetup в распакованный initrd, с помощью команды ldd смотрите - какие ему нужны библиотеки, их тоже копируете.
скорее всего для работы понадобиться еще создать в initrd файл /etc/passwd (не факт, но вероятно).
возможно стоит запихать туда какой-нибудь шел, если его там нет, вставить в init вызов шела и потренироваться.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
pelmen
- Сообщения: 1268
- ОС: debian
Re: Шифрование
запихнул туда losetup, модули все, библиотеки. В init скрипте, там где
вставил ещесжал initrd-образ. В загрузчике /boot/grub/menu.lst добавил секциюГружусь... что-то идет-идет... бац - думает. Думает-думает и выдает ошибку, типа root-то правильно указали? И приписание: нет такого устройства /dev/loop0. Выкидывает в шелВвожу сразу жепусто.
молчит.показывает, что loop0 занят устройством sdb1. Ввожумолчит. Ввожупоказывает мне все содержимое моей системы. Т.е. все нормально выполняет без всяких танцев. Но почему-то не выполняет это же в скрипте.
Для проверки в menu.lst в эту секцию "test" вписал root=UUID=josdafjga... (как у других секций) вместо root=crypto. Все работает. Странно, почему он не монтирует /dev/loop0 . . .
Он даже не то, чтобы /dev/loop0 не монтирует. Он даже losetup /dev/loop0 /dev/sdb1 не выполняет.
Код: Выделить всё
case $ROOT in
LABEL=*)
...
;;
UUID=*)
...
;;Код: Выделить всё
crypto)
losetup /dev/loop0 /dev/sdb1 (т.е. пока что без шифрования и раздел с рабочей системой. Потом сделаю /dev/sdc1 с зашифрованной)
ROOT=/dev/loop0
;;Код: Выделить всё
test
kernel /boot/vmlinuz root=crypto ro
initrd /boot/my_new_initrdКод: Выделить всё
(initramfs): _Код: Выделить всё
losetup -aКод: Выделить всё
losetup /dev/loop0 /dev/sdb1Код: Выделить всё
losetup -aКод: Выделить всё
mkdir /mnt
mount /dev/loop0 /mntКод: Выделить всё
ls /mntДля проверки в menu.lst в эту секцию "test" вписал root=UUID=josdafjga... (как у других секций) вместо root=crypto. Все работает. Странно, почему он не монтирует /dev/loop0 . . .
Он даже не то, чтобы /dev/loop0 не монтирует. Он даже losetup /dev/loop0 /dev/sdb1 не выполняет.
-
arkhnchul
- Сообщения: 2284
- Статус: Толчковый инженер
- ОС: Debian, Fedora
-
pelmen
- Сообщения: 1268
- ОС: debian
Re: Шифрование
это в скрипте вместо losetup написать /sbin/losetup ? Попробуем...