Quickloox

Dal mondo Apple all'universo digitale, in visualizzazione rapida dell'ovvio

20 apr 2017

Servizio di sicurezza

Ho ricevuto da Paoloo tutto quanto segue, che pubblico con gratitudine e ammirazione per quanto ha saputo fare. Il funzionamento della faccenda è responsabilità sua. Così come il merito, quandunque la faccenda suddetta fosse di utilità effettiva.

Caro Lucio,

data la necessità di affidare a storage remoti i miei documenti in forma criptata ho implementato un servizio di sistema che archivia una cartella in formato 7zip con password utilizzando la cifratura AES-265 ( massimo standard di sicurezza oggigiorno ) e ne effettua l’upload simultaneo su Dropbox e Google Drive.

Dopo un paio d’anni d’utilizzo ho percepito, anche per caso se vogliamo, i caratteri di non banalità ed esclusività della mia soluzione e questo mi ha spinto alla condivisione della stessa.

Menu servizi

Dialog box

UPLOAD SIMULTANEO

( Qualora si usasse solo Dropbox creare la cartella “Multicloud” nella cartella dropbox, /Users/Paolo/Dropbox/Multicloud, e saltare questa sezione )

Per ottenere l’upload simultaneo su Dropbox e Google Drive bisogna creare una cartella in Google Drive e relativo symlink in Dropbox ( non vale Il contrario, Google Drive non digerisce i symlink ).

Nel mio caso ho creato la cartella Multicloud in Google Drive ( /Users/Paolo/Google Drive/Multicloud ) e suo symlink in Dropbox ( /Users/Paolo/Dropbox/Multicloud ), qualsiasi elemento aggiunto in Multicloud verrà uploadato simultaneamente verso i due servizi di storage.

Per creare il symlink da terminale

ln -s /path/to/original /path/to/symlink

nello specifico

ln -s /users/paolo/google\ drive/multicloud /users/paolo/dropbox/Multicloud

N.B. Gli spazi interni a un path devono essere preceduti da backslash ( \ ). I path sono case unsensitive tranne il nome del nuovo symlink ( “Multicloud” ).

KEKA

Lo script necessita la presenza dell’utility di de/compressione Keka.app http://www.kekaosx.com/it/ nella cartella Applicazioni ( utilizza infatti da Terminale il binario /Applications/Keka.app/Contents/Resources/keka7z ).

L’utility inoltre è indicata a scompattare su Mac i file 7zip creati.

INFO SUL SERVIZIO

Il servizio è attivo selezionando una cartella o un file, in quest’ultimo caso verrà archiviata la cartella che lo contiene.

Il servizio dev’essere configurato modificando le due variabili al punto #A dello script.

Il servizio controlla se nella cartella Multicloud esiste già un file 7z omonimo dell’archivio che si sta creando, in tal caso lo sposta nella cartella home aggiungendo il suffisso “_oldarchive” al nome del file. Nel caso remoto il servizio non andasse a buon fine e quindi il nuovo file 7zip non fosse creato in Multicloud, il vecchio archivio rimane disponibile nella home, altrimenti viene eliminato.

Il servizio si premura di non lasciar traccia delle password degli archivi disabilitando temporaneamente la registrazione dei comandi nella command hystory del Terminale ( punti #F e #Fb dello script ).

Il servizio crea l’archivio criptato tramite comando

keka7z a -t7z -mx -mhe -ms -mmt -w —p<password> <fileName>.7z <sourcePath>

con parametri

  • t7z - use 7z file type

  • mx - use max compression (level 9)

  • mhe - encrypt headers

  • ms - create solid archive

  • mmt - multithread the operation (faster)

  • w - use a temp directory as the working directory

  • p<password> - specifies password

  • <fileName>.7z - destination archive file

  • <sourcePath> - path to the source directory

IMPLEMENTAZIONE

Automator

Copiare lo script sottostante in Automator come da figura, modificare le variabili al punto #A . Salvare.

on run {input, parameters}
	
	# A - Modificare il valore delle seguenti due variabili secondo le proprie esigenze (valori in minuscolo) 
	set userName to "paolo"
	set dropFolderName to "multicloud"
	
	set pathToDropFolder to "/users/" & userName & "/dropbox/" & dropFolderName & "/"
	
	# B - Recupera pathToSourceDirectory, path della cartella da archiviare
	tell application "Finder"
		
		set selectedItem to item 1 of (get selection)
		
		if class of selectedItem is folder then
			set theFolder to selectedItem
		else
			set theFolder to (container of selectedItem)
		end if
		
		set pathToSourceDirectory to POSIX path of (theFolder as string)
		
	end tell
	
	# C - Finestra di dialogo, richiede all’utente nome e password dell'archivio
	display dialog "Verrà creato un 7z della cartella in dropbox/" & dropFolderName & return & return & "Inserisci nome e 	password separati da una virgola" default answer "NomeDellArchivio,password"
	
	
	# D - Imposta archiveName e archivePassword splittando il testo ritornato dal box di dialogo
	set nameAndPasswordByUser to text returned of the result
	set ASTID to AppleScript's text item delimiters
	set AppleScript's text item delimiters to ","
	set archiveName to first text item of nameAndPasswordByUser
	set archivePassword to second text item of nameAndPasswordByUser
	set AppleScript's text item delimiters to ASTID
	
	
	# E - Imposta oldAchiveExists, indica se in dropFolder esiste già <archiveName>.7z, file omonimo dell’archivio da creare
	set pathToArchive to pathToDropFolder & archiveName & ".7z"
	set oldAchiveExists to false
	tell application "Finder" to if exists pathToArchive as POSIX file then set oldAchiveExists to true
	
	
	tell application "Terminal"
		# F - Disabilita la registrazione della command history nel Terminale ( per non lasciar traccia della password )
		set currentTab to do script ("set +o history")
		
		# G - Se esiste già <archiveName>.7z in dropFolder, lo sposta nella cartella home rinominandolo <	archiveName>_oldarchive.7z
		if oldAchiveExists then
			set pathToOldArchive to "/users/" & userName & "/" & archiveName & "_oldarchive.7z"
			do script ("mv '" & pathToArchive & "' '" & pathToOldArchive & "'") in currentTab
		end if
		
		# H - Crea archivio compresso e crittografato AES256 nella dropFolder 
		do script ("/Applications/Keka.app/Contents/Resources/keka7z a -t7z -mx -mhe -ms -mmt -w -p" & archivePassword & " '" 	& pathToArchive & "' '" & pathToSourceDirectory & "'") in currentTab
		
		# I - Eventualmente elimina il vecchio archivio dalla home
		if oldAchiveExists then
			set newArchiveWasCreated to false
			tell application "Finder" to if exists pathToArchive as POSIX file then set newArchiveWasCreated to true
			
			if newArchiveWasCreated then
				do script ("rm '" & pathToOldArchive & "'") in currentTab
			end if
		end if
		
		# Fb - Ripristina la registrazione della command history nel Terminale
		set currentTab to do script ("set -o history")
	end tell
	
	return input
end run

Commenta