Sbloccare LUKS da remoto con SSH

Pubblicato il ven 08 giugno 2018 in informatica • 2 min read

Note

Questo tutorial presuppone che abbiate già provveduto ad effettuare un'installazione cifrata di Arch Linux. Qui di seguito sono descritti i passi necessari per sbloccare il disco cifrato via Secure Shell tramite chiave pubblica.

Tutte le informazioni necessarie su come installare Arch Linux su un disco cifrato le potete trovare sulla wiki ufficiale ed in particolare qui. Oppure se siete impazienti potete leggere la guida rapida che trovate nella sezione downloads del sito.

Io ho scelto di usare tinyssh perché è un server ssh molto leggero che supporta egregiamente i nuovi algoritmi ssh ed25519 + curve25519-sha256@libssh.org + chacha20-poly1305@openssh.com. In questo modo posso far uso della chiave di autenticazione cv25519 presente sul mio token OpenPGP NitroKey-Start/FST-01.

Attenzione: questo metodo ed i pacchetti necessari non sono supportati ufficialmente da Arch Linux. Spero sappiate cosa state facendo.

Procedura

Ci servono dei pacchetti presenti nel repository AUR (Arch User Repository) mantenuti dalla community che si possono installare tra l'altro con yaourt.

~ $ yaourt -S mkinitcpio-netconf mkinitcpio-utils mkinitcpio-tinyssh

Terminata l'installazione come utente root aprite il file /etc/tinyssh/root_key

~ # vim /etc/tinyssh/root_key

ed incollatevi dentro la chiave pubblica ssh; è la stessa che andremmo a mettere nel classico file ~/.ssh/authorized_keys

luks-remote-unlock-05.png

A questo punto dobbiamo modificare il file di configurazione /etc/mkinitcpio.conf in modo tale da includere nel ramdisk gli HOOKs necessari

~ # vim /etc/mkinitcpio.conf

e modificare la variabile HOOKS=(....) sostituendo encrypt

luks-remote-unlock-10.png

con netconf tinyssh encryptssh e ottenendo quindi

luks-remote-unlock-11.png

Adesso bisogna modificare il file /etc/default/grub per configurare i parametri da passare al kernel necessari a configurare la rete.

La sintassi è questa:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

Editiamo il file che si presenta così nella mia VM di test:

luks-remote-unlock-16.png

e modifichiamolo in questo modo:

luks-remote-unlock-17.png

Nel mio caso, avendo un server dhcp, ho scelto di far assegnare al server dhcp l'indirizzo ip.

ip=:::::eth0:dhcp

Ma a meno che non siate sicuri di quello che state facendo vi consiglio di impostare un indirizzo statico.

La sintassi è questa:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

Ad esempio potreste avere:

ip=192.168.1.20::192.168.1.1:255.255.255.0::eth0:none:

dove 192.168.1.20 sarà l'indirizzo ip del pc da sbloccare, 192.168.1.1 è l'indirizzo del gateway (solitamente il vostro router di casa) e 255.255.255.0 la netmask.
Occorre prestare attenzione al fatto che nell'indicare il nome della scheda di rete vanno usati i nomi del Kernel (eth0, eth1,...) e non quelli di udev (ad esempio: enp0s1, ...).
Maggiori informazioni le potete trovare nella documentazione ufficiale del Kernel.

Terminata la configurazione dobbiamo rigenerare il ramdisk:

~ # mkinitcpio -p linux

luks-remote-unlock-14.png

ed aggiornare la configurazione di grub:

~ # grub-mkconfig -o /boot/grub/grub.cfg

Se non avete commesso alcune errore, riavviando il pc, potrete connetervi tramite ssh per inserire la password di decodifica del disco cifrato.

luks-ssh-unlock-pinentry.png