LINUX.ORG.RU

Загрузка с несколькими шифрованными PV

 , , , ,


0

1

Я правильно понимаю, что генерируемые initramfs заточены на открытие только одного LUKS? Схема с несколькими PV, некоторые из которых зашифрованы, деградирует, придётся следить за расположением / и /usr, dm-raid тоже пролетает?

Самому можно настроить как угодно. Вопрос пока про genkernel, dracut и прочие.


Самому можно настроить как угодно. Вопрос пока про genkernel, dracut и прочие.

Ты больше времени потратишь на выяснение вот таких вот вопросов, чем на освоение того, как сделать собственный initramfs.

Kroz ★★★★★ ()
Ответ на: комментарий от t184256

Grub2 грузит с зашифрованного boot самосборный initramfs? Сложновато. Crypttab это что-то из systemd, без него обойдусь

На самом деле цель у меня не защитить всё, а только гарантийные диски. Старые могу просто выкинуть. А загружаюсь с efi-stub.

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

Grub2 грузит с зашифрованного boot самосборный initramfs? Сложновато.

Это очень просто, особенно если в твоем дистре уже есть на это хуки.

Crypttab это что-то из systemd, без него обойдусь

Лол, удачи.

t184256 ★★★★★ ()

Тупо продублировал переменные и условия в скриптах genkernel, сделал патч и положил к portage. Ключ лежит на ESP в открытом виде, рядом с ядром и initramfs.

~ $ cat /etc/portage/patches/sys-kernel/genkernel-3.5.3.3/root_luks1-2.patch 
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 2fb0eb4..98022d9 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -258,7 +258,7 @@ bootstrapCD() {
 }
 
 bootstrapKey() {
-       # $1 = ROOT/SWAP
+       # $1 = ROOT/LUKS1/LUKS2/SWAP
        local KEYDEVS=`devicelist`
        eval local keyloc='"${CRYPT_'${1}'_KEY}"'
 
@@ -1282,6 +1282,12 @@ openLUKS() {
                root)
                        local TYPE=ROOT
                        ;;
+               luks1)
+                       local TYPE=LUKS1
+                       ;;
+               luks2)
+                       local TYPE=LUKS2
+                       ;;
                swap)
                        local TYPE=SWAP
                        ;;
@@ -1454,6 +1460,24 @@ startLUKS() {
                fi
        fi
 
+       [ -n "${CRYPT_LUKS1_KEY}" ] && [ -z "${CRYPT_LUKS1_KEYDEV}" ] \
+               && sleep 6 && bootstrapKey "LUKS1"
+
+       if [ -n "${CRYPT_LUKS1}" ]; then
+               openLUKS "luks1"
+               # Rescan volumes
+               startVolumes
+       fi
+
+       [ -n "${CRYPT_LUKS2_KEY}" ] && [ -z "${CRYPT_LUKS2_KEYDEV}" ] \
+               && sleep 6 && bootstrapKey "LUKS2"
+
+       if [ -n "${CRYPT_LUKS2}" ]; then
+               openLUKS "luks2"
+               # Rescan volumes
+               startVolumes
+       fi
+
        # same for swap, but no need to sleep if root was unencrypted
        [ -n "${CRYPT_SWAP_KEY}" ] && [ -z "${CRYPT_SWAP_KEYDEV}" ] \
                && { [ -z "${CRYPT_ROOT}" ] && sleep 6; bootstrapKey "SWAP"; }
@@ -1476,6 +1500,14 @@ startLUKS() {
                rm /root.decrypted
        fi
 
+       if [ -e /luks1.decrypted ]; then
+               rm /luks1.decrypted
+       fi
+
+       if [ -e /luks2.decrypted ]; then
+               rm /luks2.decrypted
+       fi
+
        if [ -e /swap.decrypted ]; then
                rm /swap.decrypted
        fi
@@ -1489,6 +1521,8 @@ startdropbear() {
        # setup environment variables for the ssh login shell
        echo "CRYPT_ROOT=${CRYPT_ROOT}" >  /etc/login-remote.conf
        echo "CRYPT_SWAP=${CRYPT_SWAP}" >> /etc/login-remote.conf
+       echo "CRYPT_LUKS1=${CRYPT_LUKS1}" >>  /etc/login-remote.conf
+       echo "CRYPT_LUKS2=${CRYPT_LUKS2}" >>  /etc/login-remote.conf
        touch /var/log/lastlog
        /usr/sbin/dropbear
 }
diff --git a/defaults/linuxrc b/defaults/linuxrc
index d58ef06..4fb0779 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -216,6 +216,12 @@ do
                crypt_root=*)
                        CRYPT_ROOT=${x#*=}
                ;;
+               crypt_luks1=*)
+                       CRYPT_LUKS1=${x#*=}
+               ;;
+               crypt_luks2=*)
+                       CRYPT_LUKS2=${x#*=}
+               ;;
                crypt_swap=*)
                        CRYPT_SWAP=${x#*=}
                ;;
@@ -228,6 +234,24 @@ do
                root_trim=*)
                        CRYPT_ROOT_TRIM=${x#*=}
                ;;
+               luks1_key=*)
+                       CRYPT_LUKS1_KEY=${x#*=}
+               ;;
+               luks1_keydev=*)
+                       CRYPT_LUKS1_KEYDEV=${x#*=}
+               ;;
+               luks1_trim=*)
+                       CRYPT_LUKS1_TRIM=${x#*=}
+               ;;
+               luks2_key=*)
+                       CRYPT_LUKS2_KEY=${x#*=}
+               ;;
+               luks2_keydev=*)
+                       CRYPT_LUKS2_KEYDEV=${x#*=}
+               ;;
+               luks2_trim=*)
+                       CRYPT_LUKS2_TRIM=${x#*=}
+               ;;
 
                swap_key=*)
                        CRYPT_SWAP_KEY=${x#*=}[\code]

boowai ()