LINUX.ORG.RU

расшифровака root раздела ключом

 , , ,


2

2

Требуется ключом расположенным на флешке расшифровывать root раздел при загрузке.

нашёл простой гайд:
https://gist.github.com/martijnvermaat/2726386
http://www.cheshirekow.com/wordpress/?p=810
http://proc.fsckwits.com/2010/05/ubuntu-encrypted-lvms-and-keyfile-on.html
Пишут в комментах, что они работают, но у меня не взлетает. п.с. пробовал разные скрипты и гайды, ошибки одни. И действия там одни и те же.

Что сделал:
настроил lvm, шифрование по паролю, в шифрованном разделе создал root и swap, boot отдельно не шифрованный.
Всё работает, но нужно каждый раз вводить пароль.
Создал ключ, добавил его в контейнер, расположил на юсб флешке. Отредактировал crypttab. Создал скрипт для отправки ключа с флешки в стдаут(или вроде того)). Обновил образ.

На проверку зашифровал /tmp, всё работает, в boot.log видно что расшифровка происходит уже после монтирования root. С root разделом это не работает, хотя гайд как раз для этого случая и написан.

/etc/crypttab

sda5_crypt UUID=*** none luks,keyscript=/sbin/keyscript

/sbin/keyscript

#!/bin/sh
modprobe usb-storage
sleep 5
mkdir /keydev 1>&2
mount -t ext4 -o ro /dev/disk/by-uuid/d58009e6-a694-47b6-a9ca-6a4ada8383a8 /keydev 1>&2
cat /keydev/key
umount /keydev 1>&2

Вываливаются ошибки wrong syntax #!/bin/sh и ещё что-то(под рукой лога нет)

Кодировку менял, не помогло. Думаю не подгружаются системные переменные поэтому ошибки и вываливаются, но знаний не хватает для решения проблемы.

П.с.с пробовал разные дистрибутивы, дебиан, минт, убунту. Везде одно.

Помогите познать безопасность 256 битного аеs. Или ткните в рабочий гайд или скрипт.

Прочти в документации на Debian. Сорри, просто неохота вчитываться в те ссылки, что ты привел. В Debian вместе с пакетом cryptsetup идет документация:

/usr/share/doc/cryptsetup/README.Debian.gz, README.initramfs.gz и еще README.keyctl.

Про флешку с ключом, кстати, в Debian уже подумали. Прочти README.initramfs.gz раздел «10. The „passdev“ keyscript» . Вот скриптом passdev я даже пользовался для NAS, но только / не шифровал. Еще раз: он уже заготовлен в Debian. Использовался вот так в crypttab:

share_crypt   /dev/disk/by-uuid/f1500b88-fa6e-4b6c-9f34-f985b63da475   /dev/disk/by-uuid/E0D4-AEFA:/keyfile    luks,hash=plain,keyscript=/lib/cryptsetup/scripts/passdev

или можно сделать несколько флешек с метками SECRET:

share_crypt   /dev/disk/by-uuid/f1500b88-fa6e-4b6c-9f34-f985b63da475   /dev/disk/by-label/SECRET:/keyfile luks,hash=plain,keyscript=/lib/cryptsetup/scripts/passdev

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

Не забыть все необходимые модули в initrd добавить. Если чего-то, что необходимо для расшифровки root, не окажется в образе, то система не сможет загрузиться.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Почитал ман, как вы и говорили, всё уже реализовано.

\ расшифровывается passdev скриптом из коробки.

Спасибо за помощь.

Вот гайд https://www.brawndo.org/index.php?id=1 для тех кто с такой же проблемой столкнётся.

Самое главное, гугл про коробочный скрипт ничего мне не рассказал. зато самопальных полно.

dzirtt ()
Ответ на: комментарий от dzirtt

Вот гайд https://www.brawndo.org/index.php?id=1 для тех кто с такой же проблемой столкнётся.

Для Debian в стандартной поставке шаг с прописыванием модулей в /etc/initramfs-tools/modules можно опустить. Если в файле /etc/initramfs-tools/initramfs.conf прописано MODULES=most, то эти все модули (USB, диски, файловые системы) уже включаются. То есть можно просто update-initramfs -u сделать и должно вроде все заработать. Но если используется другая опция, то, конечно, надо в список нужные модули добавить.

#
# MODULES: [ most | netboot | dep | list ]
#
# most - Add most filesystem and all harddrive drivers.
#
# dep - Try and guess which modules to load.
#
# netboot - Add the base modules, network modules, but skip block devices.
#
# list - Only include modules from the 'additional modules' list
#

P.S. Тему тогда можно пометить как решенную (галочку поставить).

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
cd /root
mkdir hooks ramfs
gdisk /dev/sdd		1. ef00 100мб
cd hooks;./hook_cr
lsblk -f  (UUID sda crypto_LUKS) > hooks/crypt
pacstrap /mnt base base-devel gummiboot
genfstab -p /mnt >> /mnt/etc/fstab (закоментить /boot)

arch-chroot /mnt
bash
gummiboot install
nano /boot/loader/entries/arch.conf {
title Arch Linux Encrypted
linux /vmlinuz-linux
options initrd=/initramfs-linux.img root=/dev/mapper/crypted_root rw }
nano /etc/mkinitcpio.conf { MODULES="loop"; HOOKS="...encrypt..." }
mkinitcpio -p linux
ln -s /usr/share/zoneinfo/Eorupe/Moscow /etc/localtime
nano /etc/locale.gen { ru_RU.UTF-8 }
locale-gen
echo LANG=ru_RU.UTF-8 > /etc/locale.conf 
pacman -S sudo xf86-video-intel xorg-server xorg-xinit gdm file-roller unrar dodsfstools gimp gnome-screenshot xinnamon vlc viewnior openssh wget pavucontrol pulseaudio gedit terminus-font sakura
nano /etc/sudoers { %wheel ALL=(ALL) ALL }
systemctl enable gdm.service
systemctl enable NetworkManager.service
useradd -m -g users -G wheel one
passwd one
passwd
exit

cd /root/ramfs
mv /mnt/boot/initramfs-linux.img .
pacman -Syy;pacman -S cpio
gunzip -c -9 initramfs-linux.img | cpio -i -d -H newc --no-absolute-filenames
cp /root/hooks/* /root/ramfs/hooks
nano *config { HOOKS="udev crypt" } 
find . | cpio -o -H newc | gzip -9 > initramfs-linux.img
mv initramfs-linux.img /mnt/boot

reboot

 -hook_cr-
ROOT_DEV=/dev/sda      # root device
cryptsetup close keyf
cryptsetup close crypted_root
rm -f image.iso crypt

dd if=/dev/urandom of=image.iso count=4096 &&
cryptsetup --align-payload=1 luksFormat -c aes-xts-plain64 -s 512 -h sha512 image.iso &&
cryptsetup luksOpen image.iso keyf &&
cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 $ROOT_DEV --key-file=/dev/mapper/keyf &&
cryptsetup luksOpen $ROOT_DEV crypted_root --key-file=/dev/mapper/keyf &&

IFS=' '
TEXT=$(cat <<'EOTEXT'
#!/usr/bin/ash

run_hook() {
        modprobe -a -q dm-crypt >/dev/null 2>&1
        [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
        modprobe -a -q loop >/dev/null 2>&1
        [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"

sleep 1

cryptsetup open /hooks/image.iso keyf
cryptsetup open UUID=a1aa1a1-0a1a1e-4e43-8ccc-9798ea25f7d5 crypt_root --key-file=/dev/mapper/keyf
cryptsetup close keyf
}

# vim: set ft=sh ts=4 sw=4 et:
EOTEXT
)

echo $TEXT > crypt
chmod 755 crypt
QIQuJIunn ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.