Шифрование (корневого раздела)

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

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

pelmen
Сообщения: 1268
ОС: debian

Шифрование

Сообщение pelmen »

Подскажите, хочу шифровать корень (понимаю, что это снизит производительность, что это делать бессмысленно, что нужно только /хоум или еще чего, в крайнем случае свап, но мне ПРОСТО ИНТЕРЕСНО). Наткнулся на 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) на флешке, чтоб при выборе ОС и при вводе пароля происходило расшифрование, монтирование и дальнейшая загрузка системы?
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Шифрование

Сообщение Ленивая Бестолочь »

pelmen писал(а):
05.09.2009 15:23
Вопрос в том, как сделать загрузчик (grub) на флешке, чтоб при выборе ОС и при вводе пароля происходило расшифрование, монтирование и дальнейшая загрузка системы?

я, честно говоря, никогда не занимался таким, но с загрузкой системы много извращался. имхо тут стоит обращать внимание не на загрузчик, а не initrd.
когда у вас grub загружает ядро, он распакоывавает initrd/initramfs (если оно есть) и передает управление скрипту init в initrd (не путать со скриптом init в корневой фс). этот скрипт осуществляет загрузку всего, что необходимо запустить до старта основной системы. например raid, lvm, какие-нибудь модули и т.п. туда же можно запихать и шифрование.
если будете делать руками, а не на основе каких-нибудь дистрибутивов могу порекомендовать взять генератор initrd - yaird - Yet Another mkInitRD. он маленький и простой, сгенирируйте им initrd, разпакуте его и поглядите там init. там все просто и понятно и можно добавить туда расшифровку.
я таким образом делал монтирование корневой ФС по сети поверх vpn.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Шифрование

Сообщение pelmen »

Ленивая Бестолочь писал(а):
05.09.2009 16:17
сгенирируйте им initrd, разпакуте его и поглядите там init.
А он чем запакован? Точнее, как его распаковать и потом после изменения запаковать :)
Спасибо сказали:
Аватара пользователя
strah
Сообщения: 283
ОС: Freebsd, linux, Solaris.

Re: Шифрование

Сообщение strah »

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: Шифрование

Сообщение Ленивая Бестолочь »

strah писал(а):
06.09.2009 10:09
Хотя я еще встречал initrd в виде образа ФС(ext2).

это вроде бы было во времена initramfs.

pelmen, http://wiki.openvz.org/Modifying_initrd_image
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Шифрование

Сообщение pelmen »

распаковал, посмотрел init, внес пока что для теста простое echo "hello world", запаковал, проверил.
Для того, чтобы запихнуть туда расшифровку (как я себе это представляю):
1. найти в init строку, монтирующую корневую ФС
2. заменить её на
- привязку зашифрованного раздела к /dev/loop0 (losetup) с расшифровкой
- монтирование /dev/loop0 в корень
3. впихнуть в инитрд необходимые модули для расшифровки и саму утилиту losetup (как это сделать я пока не знаю)
Отсюда вопрос:
1. как впихнуть туда losetup
2. зашифрованный раздел детектится как неотформатированный, значит не имеет UUID, соответственно, работать с ним можно только через /dev/sdxx, но тогда возможны проблемы, если в очередной раз он задетектится как /dev/sdyx (если, например, он на переносном жестком диске, а мы решили на другом компе его загрузить)
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Шифрование

Сообщение Ленивая Бестолочь »

pelmen писал(а):
06.09.2009 14:42
как впихнуть туда losetup

копируете losetup в распакованный initrd, с помощью команды ldd смотрите - какие ему нужны библиотеки, их тоже копируете.
скорее всего для работы понадобиться еще создать в initrd файл /etc/passwd (не факт, но вероятно).
возможно стоит запихать туда какой-нибудь шел, если его там нет, вставить в init вызов шела и потренироваться.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Шифрование

Сообщение pelmen »

запихнул туда losetup, модули все, библиотеки. В init скрипте, там где

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

case $ROOT in
LABEL=*)
...
;;
UUID=*)
...
;;
вставил еще

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

crypto)
losetup /dev/loop0 /dev/sdb1 (т.е. пока что без шифрования и раздел с рабочей системой. Потом сделаю /dev/sdc1 с зашифрованной)
ROOT=/dev/loop0
;;
сжал initrd-образ. В загрузчике /boot/grub/menu.lst добавил секцию

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

test
kernel /boot/vmlinuz root=crypto ro
initrd /boot/my_new_initrd
Гружусь... что-то идет-идет... бац - думает. Думает-думает и выдает ошибку, типа root-то правильно указали? И приписание: нет такого устройства /dev/loop0. Выкидывает в шел

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

(initramfs): _
Ввожу сразу же

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

losetup -a
пусто.

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

losetup /dev/loop0 /dev/sdb1
молчит.

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

losetup -a
показывает, что loop0 занят устройством sdb1. Ввожу

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

mkdir /mnt
mount /dev/loop0 /mnt
молчит. Ввожупоказывает мне все содержимое моей системы. Т.е. все нормально выполняет без всяких танцев. Но почему-то не выполняет это же в скрипте.
Для проверки в menu.lst в эту секцию "test" вписал root=UUID=josdafjga... (как у других секций) вместо root=crypto. Все работает. Странно, почему он не монтирует /dev/loop0 . . .
Он даже не то, чтобы /dev/loop0 не монтирует. Он даже losetup /dev/loop0 /dev/sdb1 не выполняет.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Шифрование

Сообщение pelmen »

помогите :)
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Шифрование

Сообщение arkhnchul »

а путь написать до losetup не пробовали?
Losing is fun!
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Шифрование

Сообщение pelmen »

это в скрипте вместо losetup написать /sbin/losetup ? Попробуем...
Спасибо сказали: