Sincronizzare KeePassX con ownCloud e Android

Da quasi un anno utilizzo felicemente ownCloud per tenere sincronizzati file, calendari e contatti tra il portatile, il tablet, il telefono e il server.

Logo owncloudCon l’ultimo update (5.0) il servizio ha raggiunto un ottimo livello, la ciliegina sulla torta dovrebbe arrivare tra un paio di mesi con l’integrazione dell’applicazione News, un’alternativa a Google Reader che ormai volge alla fine del suo ciclo di vita.

Per sincronizzare le cartelle sul telefono e sul tablet uso Foldersync e direi che mi trovo molto bene, l’UI è curata e piacevole e l’applicazione matura dal punto di vista dello sviluppo e supporta, oltre a WebDAV, SkyDrive, Dropbox, Dropbox, Dump Truck, SugarSync, Ubuntu One, Box.net, LiveDrive, HiDrive, Google Docs, NetDocuments, Amazon S3, FTP, FTPS, SFTP e SAMBA.


logo-app
App Name
Tacit Dynamics
Free   
pulsante-google-play-store
pulsante-appbrain
qrcode-app

Un paio di settimane fa mi hanno bloccato il bancomat dopo il mio terzo tentativo errato di inserimento del pin. Essendo di mia natura furbo come una faina continuavo a inserire il pin della carta di credito sul bancomat.. Solitamente le persone si scrivono il pin da qualche parte (solitamente salvato sulla rubrica del telefono sotto un fantomatico nome) ma la cosa non m’era mai piaciuta e, fino a poco tempo fa, non avevo mai avuto bisogno di controllarlo. Per farmelo riattivare la banca c’ha messo circa una settimana, un tempo sufficientemente lungo per convincermi a salvarmi le password da qualche parte.

KeePassX logo

Ho cominciato quindi a cercare una soluzione che potesse soddisfare le mie esigenze: password manager da installare su linux (debian e ubuntu) e che permettesse di esportare i dati ad una applicazione su Android. Fortunatamente ho trovato subito quello che faceva al caso mio: KeePassX per i pc e KeePassDroid per Android.


logo-app
App Name
Brian Pellin
Free   
pulsante-google-play-store
pulsante-appbrain
qrcode-app

Prima di utilizzare KeePassX quasi tutte le mie password erano salvate su Firefox, di inserirle tutte una per una sul password manager non se ne parlava proprio!

Il primo passo da fare è esportare le password da Firefox, per farlo c’è un plugin chiamato Password Exporter, questo plugin ci permetterà di salvare un file XML, ma che non potrà ancora essere importato direttamente in KeePassX. Cercando nella documentazione ufficiale mi sono imbattuto in un 3d dove ho trovato uno script che faceva al caso mio, l’unico problema è che lo script era scritto in Groovy. Allo script ho fatto qualche piccola modifica per adattarsi anche ai domini .net, .es, .it e gov.it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    /**
    2007 Matias Bjarland - Iteego (mbjarland@yahoo.com)
 
    Groovy script to convert passwords exported from
    FireFox into format readable by KeePass password safe
 
    You can change, distribute, modify, trash this file to your hearts
    content.
 
    Prerequisites:
      Java 1.5 (J2SE)
                      available at http://java.sun.com/products/archive/index.html
      Groovy Scripting Language
                      available at http://groovy.codehaus.org/
      Password export/import extension to FireFox
                      available at https://addons.mozilla.org/firefox/2848/
 
    Modification History
 
    Date        Who        Bug            Description
    ______________________________________________________________________________
    2007.Jan.19 mbjarland                 Initial Version
    2010.Feb.18 digsim                    Adapted to keepassx
    2013.Apr.06 usefulnoise               Added several domains to the replace list
    **/
 
    import groovy.xml.MarkupBuilder;
    import java.util.UUID;
 
    //This is the folder in KeePass where the passwords will be imported to,
    //it will be created if it doesn't already exist
    def DEFAULT_GROUP = "Firefox Imported";
 
    //need to specify both in- and outfile
    if (this.args.length != 2) {
      println("");
      println("Usage: groovy ConvertFirefoxPasswords.groovy  ");
      println("");
      println("Where: ");
      println("       infile  - XML file exported from firefox using plugin at https://addons.mozilla.org/firefox/2848/");
      println("       outfile - XML file to write to, this file can then be imported in KeePass using ");
      println("                 File -> Import From -> Import Keepass XML   ");
      println("");
      println("");
 
      System.exit(1);
    }
 
    //create file objects and check that infile is readable
    def inFile = new File(this.args[0]);
    def outFile = new File(this.args[1]);
    if (!inFile.exists() || !inFile.canRead()) {
      println("Unable to read file '${inFile}'");
      System.exit(1);
    }
 
    //Groovy handles reading/writing markup beautifully...
    //Walk trough each of the entries in the Firefox export and create KeePass
    //format output
    def inXml  = new groovy.util.XmlParser().parseText(inFile.getText());
    def markup = new groovy.xml.MarkupBuilder(new FileWriter(outFile));
    markup.database {
        group{
       title("Internet")
       icon("1")
      inXml.entries.entry.each() { inEntry ->
        entry {
          //group(DEFAULT_GROUP)
          def name = inEntry["@host"].replace('http:/', '');
          name = name.replace('https:/', '');
          name = name.replace('/', '');
          name = name.replace('.com', '');
          name = name.replace('.ch', '');
          name = name.replace('.org', '');
          name = name.replace('www.', '');
	  name = name.replace('.it', '');
	  name = name.replace('.net', '');
	  name = name.replace('.gov.it', '');
	  name = name.replace('.es', '');
          title(name + " | " + inEntry["@user"])
          username(inEntry["@user"])
          password(inEntry["@password"])
          url(inEntry["@host"])
          comment()
          icon("0")
          creation("2010-02-18T21:04:23")
          lastaccess("2010-02-18T21:04:23")
          lastmod("2010-02-18T21:04:23")
          //expire("Jamais")
          //create a random UUID to fake a KeePass UUID...there IS an infinitesimal (yea, that means
          //REALLY small) chance that this fails :). If so, re-run the conversion...
          //uuid(UUID.randomUUID().toString().replace('-', ''))
        }
      }
      }
      group{
       title("eMail")
       icon("19")
      }
    }
 
    println("");
    println("    --> Converted file saved at: '${outFile.getCanonicalPath()}'");
    println("");
 
    System.exit(0);

Se anche voi come me non avete mai utilizzato groovy, don’t panic! Se siamo sotto ubuntu basterà installare Java Runtime Environment tramite il pacchetto openjdk-6-jdk e poi potremo installare Groovy aggiungendo il ppa da terminale:

1
2
3
4
sudo apt-add-repository ppa:groovy-dev/groovy
sudo apt-get update
sudo apt-get install groovy
groovy -version

Se l’ultimo comando vi ritorna un risultato del tipo

1
Groovy Version: 1.8.6 JVM: 1.7.0_15 Vendor: Oracle Corporation OS: Linux

allora siete pronti per avviare la conversione con

1
groovy ConvertFirefoxPasswords.groovy psw kp.xml

A questo punto non dovrete fare altro che importare il nuovo file kp.xml in KeePassX e salvare il file kdb generato dal programma in una cartella sincronizzata con gli altri dispositivi. Se avete generato anche una chiave per decrittare il database delle password vi consiglio di non lasciarla sul cloud, di metterla in una cartella separata e di trasferirla manualmente nei vari dispositivi sincronizzati.

Happy sync!

Commenti e reazioni su:

Lascia un commento

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

No Trackbacks.