Marvin Pascale

[B.Log]

08 Maggio 2024

Restic

Restic

Nell’ambito della gestione di sistemi, il backup dei dati è un’operazione cruciale. Tuttavia, molte strategie di backup richiedono privilegi di amministratore per accedere a tutte le risorse del sistema. Questo approccio può esporre a rischi di sicurezza non trascurabili. Fortunatamente, esistono strumenti come Restic che permettono di effettuare backup efficaci anche senza privilegi di root. In questo articolo, esploreremo come configurare e utilizzare Restic per eseguire backup del sistema mantenendo un profilo di sicurezza elevato.

Cosa è Restic?

Restic è un software moderno di backup, scritto in Go, che offre diverse caratteristiche interessanti come la deduplicazione dei dati, la cifratura end-to-end e il supporto per vari backend di archiviazione (come SFTP, AWS S3, e Azure Blob Storage). La sua filosofia è di essere semplice da usare, veloce e sicuro.

Se vuoi approfondire ho già scritto un articolo in merito.

Perché evitare l’esecuzione come root?

Eseguire operazioni come root può esporre il sistema a rischi di sicurezza, specialmente se il software in esecuzione ha delle vulnerabilità non note. Minimizzare l’uso di privilegi elevati riduce la superficie d’attacco del sistema. Inoltre, operare senza privilegi di root può aumentare la flessibilità degli script di backup, permettendo ad esempio a più utenti di gestire i propri backup in modo indipendente.

Configurazione di Restic per l’uso senza privilegi di root

1. Installazione di Restic

Restic può essere installato tramite il gestore di pacchetti della tua distribuzione Linux o scaricando l’ultimo rilascio dal sito ufficiale. Per esempio, su Debian o Ubuntu, puoi usare:

sudo apt install restic

2. Preparazione dell’ambiente

Prima di iniziare, è necessario decidere dove i dati di backup saranno conservati. Restic supporta molteplici backend di archiviazione. Per questo esempio, utilizzeremo un server SFTP locale:

export RESTIC_REPOSITORY=sftp:user@host:/path/to/repo
export RESTIC_PASSWORD="your_password"

Assicurati che l’utente specificato abbia le necessarie autorizzazioni per scrivere nel percorso del repository.

NB: Restic offre anche altri backend come ad esempio gli object storage S3 e S3 compatibili ed è inoltre possibile utilizzare rclone come mostrato in questo articolo .

3. Inizializzazione del repository

A prescindere da quale è il nostro backend per iniziare a usare Restic, è necessario inizializzare un repository di backup:

restic init

4. Esecuzione del backup

Per eseguire un backup senza privilegi di root, è importante includere solo i file e le directory accessibili dall’utente. Puoi escludere i file o le directory specificando opzioni aggiuntive. Ecco un esempio di comando per il backup della tua home directory:

restic backup ~/ --exclude='*.cache'

Se volessimo invece eseguire il backup di tutto il sistema ci viene in aiuto un vecchio amico dei sistemi GNU/Linux: setcap.

Dopo aver installato Restic dovremmo arrivare un flag per permettere l’esecuzione del binario ad utenti non privilegiati. Nel mio caso creerò un utente ad-hoc senza possibilità di login e senza password

# useradd --system --create-home --shell /sbin/nologin restic
# mkdir ~restic/bin
# apt install -y bzip2
# curl -L https://github.com/restic/restic/releases/download/v0.16.4/restic_0.16.4_linux_amd64.bz2 | bunzip2 > ~restic/bin/restic
# chown root:restic ~restic/bin/restic
# chmod 750 ~restic/bin/restic
# setcap cap_dac_read_search=+ep ~restic/bin/restic

Attenzione!

Le funzionalità del comando setcap si applicano solo a questa copia specifica del binario restic. Se esegui l’aggiornamento automatico di restic, sostituisci o aggiorni in qualsiasi altro modo il binario, le funzionalità aggiunte sopra non saranno attive per il nuovo binario. Per mitigare questo problema, è sufficiente eseguire nuovamente il comando setcap, per assicurarsi che il nuovo binario abbia le stesse funzionalità del precedente.

Per eseguire un test possiamo lanciare il nostro primo backup utilizzando sudo per impersonare l’utente restic

# mkdir /opt/restic && chmod 770 /opt/restic && chown restic:restic /opt/restic

# sudo -u restic /home/restic/bin/restic -r /opt/restic init
enter password for new repository:
enter password again:
created restic repository 96b8a199e6 at /opt/restic

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

# sudo -u restic /home/restic/bin/restic --exclude={/dev,/media,/mnt,/opt/restic,/proc,/run,/sys,/tmp,/var/tmp} -r /opt/restic backup /
repository 96b8a199 opened (version 2, compression level auto)
created new cache in /home/restic/.cache/restic
no parent snapshot found, will read all files


Files:       25776 new,     0 changed,     0 unmodified
Dirs:         5208 new,     0 changed,     0 unmodified
Added to the repository: 1.152 GiB (742.334 MiB stored)

processed 25776 files, 1.263 GiB in 0:16
snapshot ff5c3220 saved

Con questi comandi creeremo il repository di test ed eseguiremo il backup di tutto il disco escludendo i path non utili o speciali. Con il -r /opt/restic comunichiamo a restic che utilizzeremo quel repository (se non diversameten specificato verrà utilizato il repository della variabile RESTIC_REPOSITORY).

Controllate di avere spazio a sufficienza altrimenti puntate direttametne al repository remoto.

Per un’ulteriore verifica

# sudo -u restic /home/restic/bin/restic  -r /opt/restic snapshots
enter password for repository:
repository 96b8a199 opened (version 2, compression level auto)
ID        Time                 Host        Tags        Paths
------------------------------------------------------------
ff5c3220  2024-05-06 10:04:24  vps01                   /
------------------------------------------------------------
1 snapshots

5. Automatizzazione del backup

Infine, per non dover avviare manualmente il backup ogni volta, puoi automatizzare il processo con cron. Ecco un esempio di job cron che esegue il backup ogni giorno alle 3:00 AM; in questo caso possiamo inserirlo nel cron dell’utente che deve “backuppare” la propria home:

0 3 * * * /usr/bin/restic backup ~/ --exclude='*.cache'

oppure per eseguire il backup dell’intero sistema utilizziamo il cron di root

0 3 * * * sudo -u restic /home/restic/bin/restic --exclude={/dev,/media,/mnt,/proc,/run,/sys,/tmp,/var/tmp} backup /

Considerazioni finali

Usare Restic senza privilegi di root è una pratica eccellente per mantenere alta la sicurezza del sistema. È essenziale, tuttavia, verificare che i permessi dei file siano configurati correttamente, per garantire che il backup sia completo e che dati sensibili siano protetti adeguatamente.

In conclusione, Restic offre una soluzione potente e flessibile per i backup, adattabile a vari contesti e esigenze, promuovendo al contempo una maggiore sicurezza tramite l’operatività con privilegi minimi.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: