Gestione protetta dei nostri progetti editoriali.

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; pur essendo nominalmente codificati da loro, preferisco aggiungere uno strato 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:

  1. Verifica se l’ambiente di lavoro è Darwin (MacoSX) o Posix (Linux) e, di conseguenza, cerca due particolari tool, necessari, per la cancellazione sicura dei file. Nel caso di Darwin 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 in un file system.
  2. Se il rispettivo tool, a seconda del sistema operativo, non risulta presente viene segnalata la necessità di installarlo e la procedura termina.
  3. Successivamente, lo script, si sposta nella cartella /tmp ove terrà tutti i file transitori, mentre lavorerete al vostro progetto.
  4. Viene decriptato, il file salvato l’ultima volta, chiedendo la password usata nella fase di codificazione precedente.
  5. 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.
  6. 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.
  7. Viene raggruppato in un file .tar tuto il materiale della cartella, sotto cartelle incluse.
  8. Viene eseguita la codifica usando openssl e chiedendovi password e verifica password.
  9. Il file generato avrà una estensione .encrypt: una mia scelta arbitraria; essa non è associata in automatico ad openssl.
  10. 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
  11. Viene presentata una notifica di corretta chiusura della procedura
  12. 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 del nome file, 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 Darwin (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 Darwin (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 la permission 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
Chiaramente il percorso $HOME/MEGA/ownCloud/Documenti/Writer/Libro01 va sostituito con il percorso che punta al vostro scritto. In questo esempio era un Libro in una cartella denominata Libro01.

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...."

rm 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
In questo modo otterrete il vostro file VostraCartellaDati.tar.encrypt che verrà gestito dallo script.
Immagino, visto la presenza della shell Bash in Windows che si possa usare anche negli ambienti Microsoft, ma non ho mai sperimentato la cosa per cui non garantisco.
Licenza Creative Commons 
Questa opera è stata rilasciata con licenza Creative Commons Attribuzione – Non Commerciale – Condividi allo stesso modo 4.0 Internazionale. Per leggere una copia della licenza visita il sito  web a questo indirizzo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.