Un piccolo script, in bash, per editare i nostri libri mantenendoli protetti quando non li usiamo.
Può capitare a chi scrive, specialmente per diletto, di avere il computer in condivisione con altri componenti della famiglia. Oppure avendo spesso l’impulso di scrivere nei momenti liberi, di usare un computer portatile che può restare aperto in zone dove bazzica altra gente.
Può anche essere che abbiamo copia aggiornata del nostro lavoro, in progresso, in un’area in cloud, dove notoriamente non è cosa sana tenere file importanti non protetti.
Questo script, l’ho creato proprio per questo scopo: uso MEGA, come area di sincronizzazione cloud dei miei dati importanti; e pur essendo nominalmente codificati da loro, preferisco aggiungere un livello di sicurezza personale ai miei file.
Essendo una cosa, per me legata, esclusivamente ai libri in scrittura, ho creato lo script per la specifica attività, ma modificarlo per integrarlo in un vostro script di backup, per esempio, non è cosa complicata per nulla.
Lo script fa queste 12 cose:
- Verifica l’ambiente di lavoro se oSX (Mac) o Posix (Linux) e di conseguenza cerca due particolari tool necessari per la cancellazione sicura dei file. Nel caso di oSX cerca bcwipe nel caso di Posix cerca wipe. I due tool fanno praticamente la stessa cosa: ossia ricoprire il file, byte per byte con caratteri casuali per un certo numero di volte. È una delle procedure standard più usate per la cancellazione sicura di un oggetto posto su un file system.
- Se il rispettivo tool, a seconda del sistema operativo, non risulta presente viene segnalata la necessità di installarlo e la procedura termina.
- Lo script si sposta nella cartella /tmp ove terrà tutti i file transitori, mentre lavorerete al vostro progetto.
- Viene decriptato il file salvato l’ultima volta, chiedendo la password usata nella fase di codificazione precedente.
- Viene usato il comando open per avviare il programma, assegnato dal sistema operativo, per l’apertura di un file con una certa estensione. Nel mio caso usando file con estensione .scriv viene aperto il programma Scrivener che a sua volta aprirà il file associato. La comodità di open sta nel fatto che cambiassi tipo di programma, non servirebbe mettere mano allo script per la parte avvio programma, perché capirebbe da solo che se è un .doc(x) deve aprire Office, se è un .odt deve aprire LibreOffice, se e un .pages deve avviare Pages e così via.
- A questo punto la procedura si mette in attesa della pressione del tasto INVIO, lasciandovi tutto il tempo che è necessario per passare a Scrivener (nel mio caso) per creare, editare o cancellare il documento. Una volta terminate le modifiche chiudo il programma totalmente e torno allo script premendo il tasto INVIO per farlo proseguire.
- Viene raggruppato in un file .tar tuto il materiale della cartella, sotto cartelle incluse.
- Viene eseguita la codifica usando openssl e chiedendovi password e verifica password.
- Il file generato avrà una estensione .encrypt: una mia scelta arbitraria; essa non è associata in automatico ad openssl.
- Viene verificato nuovamente in che sistema operativo siete, ed a seconda di quale viene riscontrato, viene eseguito il necessario per la cancellazione sicura dei dati temporanei nella cartella /tmp
- Viene presentata una notifica di corretta chiusura della procedura
- Venite riportati nella cartella originaria in cui saranno presenti solo il file script, in bash, ed il file criptato contenente tutto il vostro materiale.
Alcune note:
- L’uso delle procedure di cancellazione sicura può essere piuttosto lunga nel caso di progetti complessi in cui, oltre al puro testo, siano memorizzati, nella stessa cartella, o in sottocartelle del progetto come di solito si fa, di molte altre cose come ricerche, schede personaggi, capitoli alternativi, immagini, video ecc. ecc. La regola di base è che più sono i file da cancellare, e più sono grossi, più tempo la cancellazione sicura necessiterà.
Potete usare la cancellazione tradizionale, molto più rapida, ma ovviamente meno sicura: è una vostra scelta. Nel caso decidiate per la cancellazione rapida troverete un secondo listato modificato per questa esigenza. - Potete usare multiple versioni dello stesso script per progetti diversi: basterà tenere lo script, modificato per la parti nome file e cartella originaria, nelle rispettive cartelle dei rispettivi progetti.
Io per esempio ho una cartella $HOME/…/Writer in cui ho le cartelle con i vari progetti ed uno script per ogni cartella, chiaramente adeguata al nome progetto. - Lo script una volta creato va reso eseguibile con il comando chmod u+x nomescript.
- Per le estensioni, in Linux non hanno alcuna importanza: una volta reso eseguibile che sia .sh o meno non cambia nulla, sebbene per definizione uno script bash dovrebbe avere una estensione .sh; ma per convenzione: non per necessità.
Per quanto riguarda oSX (Mac) la cosa è un po’ diversa: se lanciate lo script da Finder (il file manager grafico di Mac) con il doppio click tradizionale, allora il file DEVE avere l’estensione .command. Se non ha questa estensione, il file manager (Finder) si rifiuterà di eseguirlo, nonostante lo abbiate definito eseguibile.
È una impostazione propria di questo sistema operativo, per cui dovete sottostare a questa regola. Se invece sempre da oSX (Mac) lo eseguite dal terminale allora valgono le stesse regole viste per Linux: ossia l’estensione non ha importanza al fine di eseguire lo script stesso purché sia attivo il bit per l’esecuzione.
A seguire il codice, vero e proprio, dello script bash con cancellazione sicura:
#!/bin/bash # # Versione per oSX: unica differenza rispetto a linux è: # bcwipe: tool oSX per cancellazione sicura dei file e dir # wipe: tool Linux per cancellazione sicura dei file e dir # if [ "$(uname)" == "Darwin" ]; then if ! [[ -x "/opt/local/bin/bcwipe" ]] then echo -e "\n\nDevi installare il pacchetto bcwipe per eseuire questo script!!\n\n" exit -1 fi elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then if ! [[ -x "/opt/local/bin/wipe" ]] then echo -e "\n\nDevi installare il pacchetto wipe per eseuire questo script!!\n\n" exit -1 fi fi # # Assegna a $Libro il percorso attuale del libro # cd -- "$(dirname "$0")" Libro01=$HOME/MEGA/ownCloud/Documenti/Writer/Libro01 # # Spostarsi in /tmp e decriptare il file # Estrarre il tar # cd /tmp openssl des3 -d -salt -in $Libro01/Libro01.tar.encrypt -out Libro01.tar && tar pxf Libro01.tar && # # Usiamo il comando open per avviare Scrivener # open avvia l'applicazione associata all'estensione del file # open /tmp/Libro01/Libro01.scriv # # Metti in pausa sino a pressione del tasto INVIO # e proseguiamo con la nostra creazione, edizione o cancellazione # del nostro testo. # # A chiusura di Scrivener torniamo al termiale # read -p "Premi [Invio] per continuare..." # # Crea tar della cartella Libro01 e relative sotto cartelle # Usa openssl per crittografare il file ottenuto # tar cf Libro01.tar Libro01/ && openssl des3 -salt -in Libro01.tar -out $Libro01/Libro01.tar.encrypt && # # Distruggi i file usando bcwipe o wipe a seconda dell'OS # echo -e "\n\nDistruggo tracce di tutti i file in chiaro...." if [ "$(uname)" == "Darwin" ]; then bcwipe -md -fI Libro01.tar && bcwipe -md -rfI Libro01/ elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then wipe -qsf Libro01.tar && wipe -Rqsf Libro01/ fi echo -e "\n\nFiles in chiaro distrutti !!\n" cd $Libro01 exit 0
Segue la versione senza i comandi di cancellazione veloce: non serve più determinare in che sistema operativo siamo.
#!/bin/bash
#
# Assegna a $Libro il percorso attuale del libro
#
cd -- "$(dirname "$0")"
Libro01=$HOME/MEGA/ownCloud/Documenti/Writer/Libro01
#
# Spostarsi in /tmp e decriptare il file
# Estrarre il tar
#
cd /tmp
openssl des3 -d -salt -in $Libro01/Libro01.tar.encrypt -out Libro01.tar &&
tar pxf Libro01.tar &&
#
# Usiamo il comando open per avviare Scrivener
# openavvia l'applicazioneassociata all'estensione del file
#
open /tmp/Libro01/Libro01.scriv
#
# Metti in pausa sino a pressione del tasto INVIO
# e proseguiamo con la nostra creazione, edizione o cancellazione
# del nostro testo.
#
# A chiusura di Scrivener torniamo al termiale
#
read -p "Premi [Invio] per continuare..."
#
# Crea tar della cartella Libro01 e relative sotto cartelle
# Usa openssl per crittografare il file ottenuto
#
tar cf Libro01.tar Libro01/ &&
openssl des3 -salt -in Libro01.tar -out $Libro01/Libro01.tar.encrypt &&
#
# Distruggi i file usando usando i comandi standard
#
echo -e "\n\nDistruggo tracce di tutti i files in chiaro...."
del Libro01.tar &&
rm -r Libro01/ &&
echo -e "\n\nFiles in chiaro distrutti !!\n"
cd $Libro01
exit 0
Se avete qualche dubbio contattatemi pure.
Chiaramente, la prima volta dovrete creare il file crittato a mano con questi due semplici comandi:
tar cf VostraCartellaDati.tar VostraCartellaDati/ && openssl des3 -salt -in VostraCartellaDati.tar -out VostraCartellaDari.tar.encrypt