Sulla strada di Keys 1.0.0 – On the way to Keys 1.0.0

 

ita-flag
Sto lavorando alla versione 1.0.0 di Keys, il mio password manager a linea di comando.
La nuova versione correggerà alcuni bug che ho riscontrato nell’utilizzo quotidiano di keys, e aggiungerà moltissime funzionalità, oltre a una nuova interfaccia a “finestre” (finestre semigrafiche sfruttando ncurses e dialog). Inoltre, con keys 1.0.0 sarà possibile avere più di un keystore, usando chiavi gpg differenti e configurazioni personalizzate per ogni keystore.

Ecco qui un elenco dei bug che verranno corretti e delle nuove funzionalità che ho pianificato e su cui sto lavorando:

Bugs in release 0.9.1

  • la funzione search include nella ricerca il percorso completo (e non relativo) delle Key DB
  • le Key DB di tipo WEB, premendo “0”, tornano correttamente indietro di un ramo, mentre le altre tornano al menu principale
  • il path del keystore non ama che ci siano degli spazi (non funziona add new key db)
  • quando vengono lanciate assieme due istanze di keys, alla chiusura delle prima istanza viene rimossa anche la tempdir in /dev/shm creata dalla seconda istanza

Nuove funzionalità da inserire in versione 1.0.0

  • keystore multipli (per gestire più rami con diverse chiavi gpg)
  • spostamento della configurazione dei keystore da $HOME/.keysrc a <path_del_keystore>/.keysrc
  • Utilizzo di $HOME/ .keysrc per la definizione di variabili globali (di cui può essere fatto l’override nelle .keysrc dei singoli keystore)
  • creazione di una nuova utility, per la migrazione delle configurazioni di keys dalle vecchie versioni (0.9 e 0.9.1)
  • creazione di un nuovo tool per l’import e l’export di tutte le configurazioni e di tutti i keystore (utile per backup e ripristino)
  • Aggiungere una interfaccia “ncurses”
  • localizzazione dell’interfaccia anche in francese (oltre che in inglese e in italiano)

Idee e suggerimenti vostri sono naturalmente i benvenuti! Fatevi Avanti!

uk-flag
I’m working on the next (1.0.0) keys release. Keys is my command line password manager.
The new version will fix some bugs I’ve encountered during everyday use, and will add a couple of new features. Besides, it will feature a new “windowed” interface (thanks to ncurses and dialog).
Furthermore, the new keys 1.0.0 will allow multiple keystores, each with different gpg keys and configurations.

Lists of bugfixes and features of the upcoming release:

Current bugs still to be fixed in release 0.9.1

  • Search function includes the whole (not the relative) path of the DB Key
  • DB Keys of type “CMD” or “ACCOUNT” don’t work correctly when “0” is pressed (the user is moved  to the main menu instead of just up one branch)
  • The keystore path doesn’t allow spaces
  • When concurrent instances of keys exists, at the end of the first instance all tempdir with “keys.*” are deleted

New features

  • Multiple keystores
  • Global configuration in $HOME/.keysrc, keystore configuration in <keystore_path>/.keysrc
  • New import/export utility, for migration from old versions (0.9 and 0.9.1)
  • New import/export tool for backup and restore
  • New ncurses interface
  • New French localization

Any ideas/suggestions are welcome!!

Il nuovo Keys in anteprima
Il nuovo Keys in anteprima – preview of the upcoming keys

Keys 0.9.1

Per chi non conoscesse già Keys, rimando al precedente articolo, “Keys, un password manager a linea di comando“.

Ho appena pubblicato su Sourceforge la versione 0.9.1 del software che corregge un insidioso bug nell’autodigitazione, che si manifestava se era presente il carattere ‘@’ all’interno dello username o della password.
Inoltre, ho aggiunto un’icona per il software, in modo che Keys sia velocemente riconoscibile dal menu delle applicazioni.

È possibile scaricare l’aggiornamento di Keys (in versione tar.gz o come pacchetto deb) dal sito del progetto: http://sf.net/p/keys

Keys, un password manager a linea di comando

Keys è un password manager a linea di comando che ho personalmente scritto e pubblicato su sourceforge.net.
A differenza di altri software simili, keys non usa un proprio formato per la memorizzazione delle credenziali, dato che i set di credenziali vengono salvati su semplici file di testo, crittografati con Gpg.
Questo consente di aprire i propri set di credenziali anche senza keys, se ne dovesse sorgere la necessità, utilizzando i comandi standard di decrittazione di gnupg2.
Keys è sostanzialmente uno script in bash ‘evoluto’, che sfrutta utility esterne (ssh/sftp, rdesktop, tree, xdotool solo per citarne alcune) per assolvere ai propri compiti.
Grazie a xdotool, keys permette l’autodigitazione delle credenziali, una caratteristica comodissima e irrinunciabile per questa tipologia di software.
La versione 0.9 del software comprende queste funzionalità:

  • Memorizzazione di account per siti web e accesso a siti con il set di credenziali fornito, sfruttando l’autodigitazione
  • Memorizzazione di account ssh/sftp e connessione ai server
  • Memorizzazione di account microsoft e accesso a connessioni rdp (con rdesktop)
  • Memorizzazione di account generici (accoppiata username e password)
keys0.9
keys in azione in un terminale Gnome

Keys funziona con qualsiasi emulatore di terminale e con (sperabilmente!) qualsiasi distribuzione Gnu/Linux moderna.
I set di credenziali possono venire strutturati in ‘cartelle’ (labels, in inglese) che sono, a livello di filesystem, vere e proprie directory. In tal modo l’organizzazione delle chiavi può venir fatto sia internamente a keys, sia esternamente, utilizzando i normali comandi per la gestione di file e directory.

Assieme a keys viene fornita l’utility export-key che permette di esportare un set di credenziali creato con keys utilizzando una chiave pubblica gpg differente. In tal modo è possibile distribuire in modo sicuro set di credenziali ad altri, utilizzando le loro chiavi pubbliche.

Sul sito del progetto viene fornito un pacchetto deb per i sistemi Ubuntu e derivati; tale pacchetto è valido anche per gli utenti Debian, ma raccomando di leggere il wiki del progetto che segnala la procedura di installazione per tali utenti. Viene inoltre fornito un tarball da scompattare come utente root dalla radice del proprio sistema, da usare per le altre distribuzioni Gnu/Linux.

Keys è attualmente tradotto in inglese e in italiano. Se qualcuno volesse contribuire con nuove traduzioni, o migliorare le traduzioni esistenti si faccia avanti, è il benvenuto.

Potete scaricare keys dal sisto del progetto su sourceforge: http://sourceforge.net/p/keys

 

 

Controllare la crescita della directory Downloads (o Scaricati)

Premessa

Da un paio di anni, almeno, ho notato una crescente tendenza nella configurazione di default dei moderni browser web; impostare una directory di download predefinita dove salvare tutti i files scaricati durante la navigazione, senza chiedere l’interazione con l’utente.
La directory d’elezione su Gnu/Linux è Download, o Downloads, o Scaricati (a seconda della lingua di installazione e della distro installata).

Il problema

Questa configurazione (che si trova praticamente in tutti i browser, da Firefox a Chromium, da Opera e Rekonq) porta certamente una grande comodità e rapidità in fase di download dei contenuti; il rovescio della medaglia risulta però in una directory di download in continua, esponenziale, crescita.
La soluzione, in questi casi, può essere una pulizia manuale, eseguita ogni tanto e di buon cuore; oppure, potreste decidere di adottare lo script bash qui sotto descritto!

Lo script purgedirectory.sh

Per non dover eseguire noiose pulizie manuali, ho creato questo script, da lanciare ogni tanto oppure – in modo ancor più automatizzato – da inserire nel proprio crontab!

Le dipendenze

Questo script non ha particolari dipendenze, escluso il binario sendemail (da non confondere con il blasonato server SendMail); sendemail è uno script in perl che permette di inviare una mail senza impazzire tra files di configurazione.
Per installare sendemail basta far ricorso al solito apt-get install:

sudo apt-get install sendemail

Funzionamento

Purgedirectory.sh si occupa di controllare la directory target (definita dalla variabile $DirScan), spostando i files la cui data di ultimo accesso sia più vecchia di un mese all’interno di un’apposita directory .trash creata all’occorrenza come sub-dir della directory target. I files vecchi vengono quindi, in un primo momento, spostati (non cancellati!) all’interno della directory $DirScan/.trash.
Eseguita la scansione viene mandata, con sendemail, una mail contenente la lista di tutti i files che sono stati “marcati” per l’eliminazione.
L’eliminazione effettiva viene fatta solo alla  successiva esecuzione dello script, che si occupa di svuotare il contenuto della directory $DirScan/.trash.
In questo modo è possibile manterene la directory dei download sotto controllo, senza il rischio di cancellare automaticamente, per errore, download importanti, dato che l’effettiva cancellazione viene eseguita in un secondo tempo, e se esistono documenti importanti è possibile reuperarli all’interno della directory .trash prima dell’effettiva eliminazione.
Ecco lo script:

#!/bin/bash
#Elimino i file in $DirScan vecchi di un mese

#Impostazione variabili
#Sistemo la variabile bash Internal file separator
IFS=$'\n'

#Variabili per sendemail
mittente="[email protected]"$(hostname)".it"
destinatario="[email protected]"
server="server_smtp_com:porta"
#Decommentare e compilare se il server smtp richiede 
#l'autenticazione; modificare anche il comando sendemail,
#decommentando la parte relativa all'autenticazione smtp
#smtpuser=""
#smtppwd=""

#Imposto la directory da controllare
DirScan="$HOME/Scaricati"
logfile="/tmp/.purgedirectory.log"
logfile1="/tmp/.purgedirectory.log.1"
#Controllo se esiste $DirScan
if [ ! -d $DirScan ]; then
    echo "non esiste $DirScan"
    exit 1
fi

#Controllo se esiste la directory .trash in $DirScan
#altrimenti la creo
if [ ! -d $DirScan/.trash ]; then
    mkdir $DirScan/.trash
fi

#Svuoto i files presenti in $DirScan/.trash
rm -rf $DirScan/.trash/*

#Ottengo da data di oggi in formato Unix Timestamp
OggiUnixT=`date -u +%s`
#Tolgo un mese
let OldUnixT=OggiUnixT-2592000

for files in `ls $DirScan`; do 
    epocafile=`stat -c %X $DirScan/$files`
    if [ $epocafile -lt $OldUnixT ]; then 
        mv "$DirScan/$files" $DirScan/.trash/
        echo "$files<br>" >> $logfile
    fi
done

if [ -f $logfile ]; then
    echo "<b>Files marcati per l'eliminazione [Directory $DirScan]:</b><hr>" > $logfile1
    cat $logfile >> $logfile1
    echo "<hr><br>I files verranno effettivamente rimossi al prossimo ciclo di pulizia." >> $logfile1
    #Decommentare la seconda parte di questa riga, se il server smtp richiede l'autenticazione per l'invio
    sendemail -o message-content-type=html -o message-file=$logfile1 -u "Files marcati per l'eliminazione" -f $mittente -t $destinatario -s $server #-xu $smtpuser -xp $smtppwd -o tls=auto
    rm -f $logfile $logfile1
fi

exit 0

I campi da personalizzare/configurare all’interno dello script sono i seguenti:

  • DirScan: la directory target
  • destinatario: il proprio indirizzo email
  • server: il server smtp da utilizzare per inviare la notifica
  • smtpuser ed smtppwd: il nome utente e la password del proprio indirizzo email [Opzionale; necessario solo se il proprio server SMTP richiede l’autenticazione per l’invio della mail]
  • Decommentare la seconda parte del comando sendemail [Opzionale: necessario solo se il proprio server SMTP richiede l’autenticazione per l’invio della mail]

Crontab

Per automatizzare l’esecuzione dello script è possibile inserirlo nel proprio crontab. Eseguite, da terminale, il seguente comando:

crontab -e

Verrà aparto il vostro editor testuale predefinito; aggiungete la seguente riga

10 10 * * * /path/path/purgedirectory.sh

modificando, naturalmente /path/path con l’effettivo path dove avete salvato lo script.
In questo modo lo script girerà tutte le mattine alle 10:10.

Clamav: integrazione con Thunar per scansioni su richiesta

Clamav è un famosissimo antivirus per sistemi Gnu/Linux; in questo articolo vedremo come installarlo su un sistema Ubuntu, e come impostare un’azione di Thunar per richiedere una scansione a richiesta di uno o più files e directories.

Installazione di ClamAV

L’installazione di ClamAV è molto semplice; basta digitare, da terminale

sudo apt-get install clamav

Il pacchetto porta con sé alcune dipendenze, tra cui il pacchetto clamav-freshclam che installa un demone per il download automatico delle nuove firme virali dai mirror di ClamAV. Per chi volesse fare del fine-tuning, il file di configurazione di freshclam è in /etc/clamav/freshclam.conf; come configurazione automatica, comunque, il demone è configurato per cercare aggiornamenti sui mirror 24 volte al giorno (ovvero, una volta l’ora).

Scansione da linea di comando

Il comando clamscan permette di eseguire scansioni su files e directories da linea di comando. Passando varie opzioni è possibile configurarne il comportamento secondo le nostre necessità. L’azione per Thunar che andremo ad impostare si basa proprio su clamscan, con l’evidente comodità di utilizzare un rapido link grafico, al posto della linea di comando, con tutti i parametri già impostati e configurati per una scansione significativa.

Script Shell Viruscheck.sh

Lo script bash Viruscheck.sh è il motore dell’azione che andremo a configurare in Thunar. Aprite il vostro editor preferito e copiate/incollate lo script seguente:

#!/bin/bash
#Check di un path per rilevare virus

PROGNAME="$0"

#Controllo che esista clamscan
if [ ! -x "/usr/bin/clamscan" ]; then
    echo "Errore. Manca eseguibile clamscan"
    exit 1
fi

#Se lanciato senza argomenti, mostro utilizzo
if [ ! $1 ]; then
    echo "$PROGNAME scansiona una o più directories/files specificati come argomenti"
        echo "Uso: $PROGNAME /path1 /path2 /path3 /path/file1"
        exit 0
fi

#Eseguo il check delle directory/file
(
clamscan --recursive --max-filesize=1000M --infected $* |grep FOUND > /tmp/.foundviruses
)|zenity --progress --no-cancel --pulsate --auto-close --text "Scansione delle minacce in corso...."
virus=`cat /tmp/.foundviruses|wc -l`
if [ $virus -gt 0 ]; then
    zenity --error --text "Attenzione\!\nTrovati Virus\!\nNumero di minacce rilevate: $virus\n\nREPORT\n____________\n`cat /tmp/.foundviruses`"
else
    zenity --info --text "Files/Directory scansionati.\nNessuna minaccia rilevata."
fi
rm -f /tmp/.foundviruses
exit 0

Salvatelo in una directory appartenente al vostro PATH e rendetelo eseguibile con

chmod +x /path/viruscheck.sh

Azione VirusCheck in Thunar

Ora non resta che aggiungere un’azione personalizzata in Thunar per eseguire la scansione su richiesta. Dal menu Modifica, scegliere la voce Imposta azioni personalizzate.

Dalla nuova finestra scegliere il pulsante “+” per aggiungere una nuova azione, quindi compilare i campi del Tab Base nel modo seguente:
Nome: VirusCheck
Descrizione: Scansiona gli elementi per rilevare minacce
Comando: viruscheck.sh %F
Icona: [sceglierne una di proprio gradimento]

Il tab Condizioni di visibilità deve avere impostato * come Schema del file, e la spunta su tutti i tipi di files e cartelle:

Una volta confermato, la nuova azione è subito disponibile dal menu contestuale di Thunar per tutti i files e le directories. È possibile selezionare files e directories multipli per la stessa scansione.

Se vengono rilevati files compromessi, viene riportata una finestra d’errore con il path completo dei files virati; nell’esempio, VirusCheck ha trovato due file compromessi con l’eicar test virus.