Damit man mit Servern in den Abstellkammern die vollverschlüsselt sind nicht komplett durchdreht gibt es bei automatischen Neustarts die Möglichkeit das System remote zu entsperren.
Vorteil: Das klappt auch von unterwegs solange man noch ins heimische Netzwerk per VPN kommt.
Vorlagen:
https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/
https://op-co.de/Doc/posts/initramfs_dropbear/
Leider hat dort überall gefehlt wie das Netzwerk-Modul gefunden wird, zudem brauche ich
Ich gehe hier davon aus, Sie haben kein Coreboot mit Netzwerk- und LUKS-Support, sondern starten eine unverschlüsselte /boot-Partition. Das ist nicht schlimm.
root@linux:~# apt install dropbear-initramfs
# Kann man ignorieren, tauschen wir noch
dropbear: WARNING: Invalid authorized_keys file, SSH login to initramfs won't work!
Ab Debian 12 liegt alles in /etc/dropbear/initramfs/
Dort tauschen wir als erstes die SSH-Host-Keys aus und konvertieren die vom System bereits erstellten - denn sonst erhalten Sie bei der Verbindung eine Warnung, dass da andere Schlüssel genutzt werden, was nicht schlimm ist, aber nervt.
Hier als Einzeiler:
root@linux:~# dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/dropbear/initramfs/dropbear_rsa_host_key && \
dropbearconvert openssh dropbear /etc/ssh/ssh_host_ecdsa_key /etc/dropbear/initramfs/dropbear_ecdsa_host_key && \
dropbearconvert openssh dropbear /etc/ssh/ssh_host_ed25519_key /etc/dropbear/initramfs/dropbear_ed25519_host_key
Dropbear bekommt jetzt noch die gleichen authorized keys von Ihrem Nutzer der sich ohne Passwort anmelden kann. Das sollte i.d.R. in ~/.ssh/id_ed25519.pub sein.
root@linux:~# cat ~/.ssh/id_ed25519.pub >> /etc/dropbear/initramfs/authorized_keys
In /etc/dropbear/initramfs/dropbear.conf
am Ende einfügen:
DROPBEAR_OPTIONS="-I 180 -j -k -p 22 -s -c cryptroot-unlock"
mehr braucht es da nicht. Wir lauschen auf Port 22 standard, kann man auch ändern und mehr als cryptroot-unlock ausführen darf man per SSH eh nicht. -s deaktiviert den Login per Passwort.
In /etc/initramfs-tools/initramfs.conf
am Ende die IP statisch einfügen:
# IP : NFS-Server : Gateway : Subnetzmaske : Hostname : Interface
# Den NFS-Server brauchen Sie nur für tftpboot, können wir hier weglassen, daher ::
#
# Wenn Sie mehrere Karten haben hier
# hinter dem Hostnamen noch das Interface :eth0 einfügen.
#
# Achtung, Linux benennt Interfaces neu, in dmesg finden Sie
# den "original"-Namen des Interfaces.
# [ 2.611858] e1000e 0000:00:19.0 eno0: renamed from eth0
IP=192.168.2.101::192.168.2.1:255.255.255.0:linuxClient
Bei beiden Dateien dran denken mit einer neuen Zeile zu schliessen.
Dieselbe IP-Zeile braucht aber auch noch Grub (nicht in jedem Fall, aber doppelt hält besser):
/etc/default/grub
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.2.101::192.168.2.1:255.255.255.0:linuxClient"
In /etc/initramfs-tools/modules
das Kernel-Modul für die Netzwerkkarte oder WLAN einfügen.
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
e1000e
Welches Modul das ist verrät Ihnen /sys/class/net/ <interface, z.B. eno0> /device/drivers
ls -l /sys/class/net/eno0/device/driver
lrwxrwxrwx 1 root root 0 Jan 01 00:00 /sys/class/net/eno0/device/driver -> ../../../bus/pci/drivers/e1000e
Das wars schon. Wir genererieren initramfs sowie grub neu und starten neu. Einmal per SSH auf den Server und es sollte das Passwort zum Entsperren abgefragt werden.
root@linux:~# update-initramfs -u
root@linux:~# update-grub
root@linux:~# reboot