Marvin Pascale

[B.Log]

12 Aprile 2023

Rclone

rclone Di recente abbiamo parlato di backup con restic, e rclone è uno di quei strumenti modalità coltellino svizzero che è sempre meglio saper sfruttare.

Cos’è rclone?

Rclone è un software che permette di interfacciarsi con tantissimi cloud provider per poter leggere e scrivere sui vari “drive”; tra i vendor supportati c’è Google, AWS, Dropbox, Backblaze e tantissimi altri. Un elenco completo è consultabile al seguente link.

La configurazione è davvero semplice e intuitiva e rclone la rende ancora più facile ponendo una serie di domande all’utente.

Per lanciare la configurazione guidata

$ rclone config
Current remotes:

...

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config


e/n/d/r/c/s/q> n

name> drive

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)
 4 / Amazon Drive
   \ (amazon cloud drive)
 5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, China Mobile, Cloudflare, ArvanCloud, DigitalOcean, Dreamhost, Huawei OBS, IBM COS, IDrive e2, IONOS Cloud, Liara, Lyve Cloud, Minio, Netease, RackCorp, Scaleway, SeaweedFS, StackPath, Storj, Tencent COS, Qiniu and Wasabi
   \ (s3)
 6 / Backblaze B2
   \ (b2)
 7 / Better checksums for other remotes
   \ (hasher)
 8 / Box
   \ (box)
 9 / Cache a remote
   \ (cache)
10 / Citrix Sharefile
   \ (sharefile)

...

Ci fermiamo a 10 ma sappiate che sono molti, molti, molti di più.

Per avere una lista dei remote configurati

$ rclone listremotes

Si integra con restic?

Ma certo!

Come detto nel posto dedicato, restic può interfacciarci con diversi backend (dischi, share, S3, ecc), ma per tutti quei backend non ufficialmente supportati c’è rclone.

Per utilizzare la combo “restic + Rclone” basta impostare come backend il nome del remote impostato su quest’ultimo.

$ restic -r rclone:drive:backupBello init

NB: controllare le versioni di restic e Rclone perché questa funzionalità è stata aggiunta in seguito (restic: min 0.8.2 rclone: min 1.40).

Essere un pro

Tra i tantissimi backend configurabili ce n’è uno molto interessante: si chiama Crypt e vedremo insieme perché è così speciale.

Rclone permette di copiare/spostare file cartelle verso uno storage esterno e viceversa. Quello che non è sempre chiaro a tutti è che i file sono salvati in chiaro. Nei casi in cui lo storage sia di nostra proprietà, se la cifratura è gestite a monte, ecc questo potrebbe non essere un problema; ma in tutti gli altri casi non è così. Lo storage crypt si posizione tra il sistema e il drive esterno, creando una pipeline che permette di cifrare non solo il contenuto ma anche i nomi dei file/cartelle.

rclone crypt pipeline

Vediamo insieme come si configura. Nel mio esempio utilizzeremo un backend Google Drive, ma questa procedura vale per tutti gli storage

$ rclone config
Current remotes:

Name                 Type
====                 ====
gdrive               drive


e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n

Enter name for new remote.
name> Cifrato            

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)

...

Storage> 14

Option remote.
Remote to encrypt/decrypt.
Normally should contain a ':' and a path, e.g. "myremote:path/to/dir",
"myremote:bucket" or maybe "myremote:" (not recommended).
Enter a value.
remote> gdrive:crypt    

Option filename_encryption.
How to encrypt the filenames.
Choose a number from below, or type in your own string value.
Press Enter for the default (standard).
   / Encrypt the filenames.
 1 | See the docs for the details.
   \ (standard)
 2 / Very simple filename obfuscation.
   \ (obfuscate)
   / Don't encrypt the file names.
 3 | Adds a ".bin" extension only.
   \ (off)
filename_encryption> 1

Option directory_name_encryption.
Option to either encrypt directory names or leave them intact.
NB If filename_encryption is "off" then this option will do nothing.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (true).
 1 / Encrypt directory names.
   \ (true)
 2 / Don't encrypt directory names, leave them intact.
   \ (false)
directory_name_encryption> 1

Option password.
Password or pass phrase for encryption.
Choose an alternative below.
y) Yes, type in my own password
g) Generate random password
y/g> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 128
Your password is: skjddiedejf_fdfdsfjdksfjs
Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n>

Option password2.
Password or pass phrase for salt.
Optional but recommended.
Should be different to the previous password.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 128
Your password is: skjddiebvbvbjf_fdfdgriortiojdksfjs
Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n>

Edit advanced config?
y) Yes
n) No (default)
y/n>

Configuration complete.
Options:
- type: crypt
- remote: gdrive:crypt
- password: *** ENCRYPTED ***
- password2: *** ENCRYPTED ***
Keep this "Cifrato" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>

Current remotes:

Name                 Type
====                 ====
Cifrato              crypt
gdrive               drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Nel mio caso crypt è in posizione 14 e ho deciso di cifrare sia il contenuto che il nome dei file/cartelle con una chiave a 128 bit generata dal sistema e una salt sempre da 128 bit (SALVATELE!).

Ora per poter cifrare i dati basterà utilizzare il backend chiamato “Cifrato”

$ clone sync /home/marvin Cifrato:homeMarvin

Rclone penserà a tutto.

Trucchetto: Per avere una stima e una percentuale di progresso basta aggiungere il parametro –progress

$ clone sync --progress /home/marvin Cifrato:homeMarvin

Extra

Con Rclone posso montare i “drive” in cloud come fossero dischi locali e questo da il via ad una lunga serie di interazioni molto interessanti.

$ sudo mkdir -p /media/gdrive && sudo chown mpascale:mpascale /media/gdrive
$ nohup rclone mount gdrive: /media/gdrive --vfs-cache-mode writes >/dev/null 2>&1 &

$ df -hT | grep drive
gdrive:        fuse.rclone  1,1P   31G    1,0P   1% /media/gdrive

Non c’è limite a cosa si potrebbe o non potrebbe fare.


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

Risorse: