Hallo zusammen,
Ich möchte ein vollverschlüsseltes System haben, wo ich zur Entschlüsselung keine Passphrase mehr eingeben muss, sondern bei der vom eingesteckten USB-Stick <x> Blöcke ausgelesen werden, in denen sich der Schlüssel befindet.
Meine bisherige Vorgehensweise (für die einzig vorhandene 128GB SSD):
LVM2 + LUKS wird benutzt...
modprobe dm-crypt
parted -s /dev/sda mklabel msdos
parted -s -a optimal /dev/sda mkpart primary 0% 256MB
parted -s /dev/sda mkpart primary 256MB 100%
mkfs.ext4 /dev/sda1
cryptsetup -s 512 -y luksFormat /dev/sda2
cryptsetup luksOpen /dev/sda2 lvm
pvcreate /dev/mapper/lvm
vgcreate sys /dev/mapper/lvm
lvcreate -L 24000M -n root sys
lvcreate -l 100%FREE -n home sys
mkfs.ext4 /dev/mapper/sys-root
mkfs.ext4 /dev/mapper/sys-home
Als nächstes der Part für den USB-Stick (liegt hier gerade auf /dev/sdb):
lsblk
fdisk -l /dev/sdb
# Der Startsektor ist hier 96
# Kein grub auf dem Stick, ich überschreibe den Zwischenraum mit random Daten
dd if=/dev/urandom of=/dev/sdb bs=512 seek=1 count=94
# Ich benutzte hier 4 512byte Sektoren, beginnend ab Sektor 30
dd if=/dev/sdb bs=512 skip=29 count=4 > key.bin
cryptsetup luksAddKey /dev/sda2 key.bin
# udev Regel erstellen
udevadm info -a -p `udevadm info -q path -n /dev/<device>` | grep ATTRS{serial}
udevadm info -a -p `udevadm info -q path -n /dev/<device>` | grep ATTRS{product}
# Liefert mir beispielsweise "14AB0000000096" zugehörig zum "USB Mass Storage Device"
echo 'SUBSYSTEMS=="usb", ATTRS{serial}=="14AB0000000096", KERNEL=="sd*", SYMLINK+="cryptstick%n"' > /etc/udev/rules.d/50-cryptstick.rules
udevadm control --reload-rules
# Stick abziehen + anstecken -> Ist unter /dev/cryptstick + /dev/cryptstick1 (für die einzige vorhandene fat32 Partition) vorhanden
# Hier dann die eigentliche Systeminstallation per pacstrap + Anpassungen (Zeit, locales, usw. usf.)
...
# Im gechrooteten System
# /etc/mkinitcpio.conf editiert und "keymap encrypt lvm2" vor "filesystems" eingefügt
mkinitcpio -p linux
grub-install /dev/sda
# Grub anpassen
# 14848 = 29 x 512
# /etc/default/grub editiert
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:sys cryptkey=/dev/cryptstick:14848:2048"
grub-mkconfig -o /boot/grub/grub.cfg
# Rest der Konfiguration
...
Beim Booten erhalte ich dann:
:: running early hook [udev]
starting version 228
:: running early hook [lvm2]
:: running hook [udev]
:: Triggering uevents...
:: running hook [keymap]
:: Loading keymap...done.
:: running hook [encrypt]
Waiting 10 seconds for device /dev/cryptstick ...
Keyfile could not be opened. Reverting to passphrase.
A password is required to access the sys volume:
Enter passphrase for /dev/sda2:
Passphrase eingegeben, es wird korrekt entschlüsselt und ich kann mich einloggen...
Ich hab schon alles mögliche für
GRUB_CMDLINE_LINUX=
probiert (nachdem ich
https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#Boot_loader gelesen aber scheinbar nicht verstanden habe...)
Letzte Fassung:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sys/root:root root=/dev/mapper/sys-root cryptkey=/dev/cryptstick:14848:2048"
Funktionierte aber auch nicht, ich musste erst wieder über die Arch Boot CD an das System ran, um zumindest eine Variante einzutragen, bei der ich
die Passphrase eingeben "darf").
Außerdem hatte ich es statt udev Namen für den Stick mit seiner ID probiert (ls -la /dev/disk/by-id und der korrekten für den Stick, nicht seiner ersten Partition).
Entweder meine 14848 ist falsch (gerechnet) oder ich bin schlicht zu doof, die korrekten Namen für cryptdevice= | root= oder cryptkey= zu verwenden...
Ich tippe auf alles :/
Jemand eine Idee, was ich falsch mache?