#acl FreaknetGroup:read,write,admin,delete,revert All:read = Raspberry pi 5 - installazione con LUKS = == Post 1 by @roadstar — 2026-10-04T09:47:34Z == Metto qui la guida che ho seguito per creare il mio server raspberry pi5 con cifratura forte della partizione di sistema, e’ strutturata in modo che lo sblocco dopo un riavvio puo’ avvenire sia in locale tramite tastiera fisica che in remoto tramite ssh su porta dedicata. == Server Linux headless su Raspberry Pi 5 == NVMe 1 TB con cifratura LUKS2 e sblocco all’avvio da tastiera locale o via SSH == 1. Panoramica == Si usa Raspberry Pi OS Lite (64 bit) con root su LUKS2 e dropbear-initramfs per lo sblocco remoto. Il Pi 5 ha l’accelerazione AES hardware, quindi le prestazioni restano ottime. * /boot/firmware (FAT, 512 MB) resta non cifrata: il bootloader del Pi non legge LUKS. Contiene solo kernel e initramfs, nessun dato personale. * Il resto dell’NVMe e’ un container LUKS2 (aes-xts-plain64, chiave 512 bit, argon2id) con dentro ext4. * Servono: Pi 5 con NVMe funzionante, microSD con Pi OS Lite per la fase di installazione, rete con accesso a internet, un PC con client SSH. Sostituisci nei comandi: = UUID della partizione FAT, = UUID della partizione LUKS, e gli indirizzi di rete con i tuoi. == 2. Preparazione == == 2.1 EEPROM e ordine di boot == Avvia il Pi dalla microSD (abilita SSH e crea l’utente con Raspberry Pi Imager), poi: {{{ sudo apt update && sudo apt full-upgrade -y sudo rpi-eeprom-update -a sudo raspi-config # Advanced Options > Boot Order > NVMe/USB Boot sudo reboot }}} == 2.2 Pacchetti == {{{ sudo apt install cryptsetup cryptsetup-initramfs dropbear-initramfs busybox rsync }}} == 2.3 Partizionamento NVMe (/dev/nvme0n1) == Con {{{sudo fdisk /dev/nvme0n1}}} crea tabella GPT, partizione 1 da 512 MB (tipo EFI/FAT) e partizione 2 con il resto del disco. == 2.4 Cifratura LUKS2 == {{{ sudo cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 \ --key-size 512 --pbkdf argon2id /dev/nvme0n1p2 sudo cryptsetup open /dev/nvme0n1p2 cryptroot sudo mkfs.ext4 /dev/mapper/cryptroot }}} Scegli una passphrase lunga. Ti verra’ chiesta a ogni avvio. == 3. Copia del sistema sull’NVMe == == 3.1 Formatta, monta e copia == {{{ sudo mkfs.vfat -F32 /dev/nvme0n1p1 sudo mkdir -p /mnt/newroot sudo mount /dev/mapper/cryptroot /mnt/newroot sudo mkdir -p /mnt/newroot/boot/firmware sudo mount /dev/nvme0n1p1 /mnt/newroot/boot/firmware sudo rsync -axHAX --info=progress2 / /mnt/newroot/ sudo rsync -rt /boot/firmware/ /mnt/newroot/boot/firmware/ sudo blkid /dev/nvme0n1p1 /dev/nvme0n1p2 }}} Annota i due UUID: p1 (FAT) e p2 (LUKS). == 3.2 Entra nel chroot == {{{ for d in dev dev/pts proc sys run; do sudo mount --bind /$d /mnt/newroot/$d; done }}} == 4. Configurazione (dentro il chroot) == == 4.1 /etc/crypttab == {{{ cryptroot UUID= none luks,initramfs }}} == 4.2 /etc/fstab (sostituisci le righe vecchie) == {{{ /dev/mapper/cryptroot / ext4 defaults,noatime 0 1 UUID= /boot/firmware vfat defaults 0 2 }}} == 4.3 /boot/firmware/cmdline.txt == Il file deve contenere una sola riga. Rimuovi ogni {{{root=PARTUUID=…}}} e ogni riferimento a firstboot. Parte base: {{{ console=tty1 root=/dev/mapper/cryptroot rootfstype=ext4 rootwait }}} In fondo alla stessa riga, aggiungi una delle due opzioni di rete (serve a dropbear): {{{ DHCP: ip=:::::eth0:dhcp IP fisso: ip=192.168.1.50::192.168.1.1:255.255.255.0:pi5:eth0:off }}} Per l’IP fisso il formato e’ {{{ip=IP::GATEWAY:NETMASK:HOSTNAME:INTERFACCIA:off}}}. Adatta i valori alla tua rete. == 4.4 /boot/firmware/config.txt == Aggiungi sotto la sezione [all]: {{{ auto_initramfs=1 }}} Se l’NVMe non viene rilevato al boot, aggiungi anche {{{dtparam=pciex1}}}. == 5. Sblocco via SSH con dropbear == == 5.1 Chiave SSH sul tuo PC == {{{ Se non ne hai una: ssh-keygen -t ed25519. Poi mostra la chiave pubblica con cat ~/.ssh/id_ed25519.pub. }}} == 5.2 Installa la chiave nel chroot == {{{ mkdir -p /etc/dropbear/initramfs nano /etc/dropbear/initramfs/authorized_keys # incolla la chiave pubblica chmod 600 /etc/dropbear/initramfs/authorized_keys }}} == 5.3 /etc/dropbear/initramfs/dropbear.conf == {{{ DROPBEAR_OPTIONS="-I 300 -j -k -p 2222 -s -c cryptroot-unlock" }}} Significato: timeout 300 s, nessun port forwarding (-j -k), porta 2222, solo chiave (-s), comando forzato di sblocco. == 5.4 Genera l’initramfs e verifica == {{{ update-initramfs -u -k all ls /boot/firmware | grep initramfs lsinitramfs /boot/firmware/initramfs_2712 | grep -E "dropbear|cryptsetup" }}} Devi vedere il file {{{initramfs_2712}}} e righe con dropbear e cryptsetup. == 6. Chiusura e primo avvio == {{{ exit sudo umount -R /mnt/newroot sudo cryptsetup close cryptroot sudo shutdown now }}} Togli la microSD e riaccendi. Verifica che l’ordine di boot dia priorita’ all’NVMe. == 7. Sblocco all’avvio == * Locale: la console chiede la passphrase, digitala sulla tastiera collegata. * Remoto: {{{ssh -p 2222 [[mailto:root@192.168.1.50|root@192.168.1.50]]}}} e inserisci la passphrase. La sessione si chiude e dopo circa 30 secondi il Pi risponde sul normale SSH (porta 22). Per evitare avvisi di host key diversa, nel tuo {{{~/.ssh/config}}} aggiungi una voce separata: {{{ Host pi5-unlock HostName 192.168.1.50 Port 2222 User root HostKeyAlias pi5-unlock }}} == 8. Sicurezza e manutenzione == * Backup dell’header LUKS: {{{sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file header.img}}}. Conservalo fuori dal Pi (se l’header si rovina, i dati sono persi). * Passphrase di recupero: {{{sudo cryptsetup luksAddKey /dev/nvme0n1p2}}}. * Dopo ogni aggiornamento del kernel l’initramfs si rigenera da solo; in caso di dubbio esegui {{{sudo update-initramfs -u -k all}}}. * Limite noto: /boot non e’ cifrato, quindi un attaccante con accesso fisico potrebbe manomettere l’initramfs. Se e’ un rischio per te, valuta firma del boot e Secure Boot del Pi 5. == 9. Risoluzione problemi == * Si ferma su waiting for root device: aggiungi nvme in {{{/etc/initramfs-tools/modules}}} e rigenera l’initramfs. * Dropbear non risponde: controlla il parametro ip= in {{{cmdline.txt}}} (interfaccia e rete corrette) e che la porta sia 2222. * Avviso di host key cambiata: usa la voce pi5-unlock descritta sopra. * Emergenza: avvia dalla microSD, riapri il volume con {{{cryptsetup open /dev/nvme0n1p2 cryptroot}}}, monta e rientra nel chroot (sezione 3.2). ----