Archivio tag: Fedora

Analizzatore spettrografico di file

A seguito di uno scambio di idee con gli amici di CFItaly, mi è venuta l’idea di provare a giocare un po’ con l’analisi statistica del contenuto di un file generico. Non è una idea nuova (rif. Denis Frati), certamente no, ma al solito ogni tanto mi piace di curiosare in cose per me nuove.

Il risultato è un programmino semplicissimo, che ho chiamato Prisma.

L’idea è questa: in ogni tipologia di file la presenza di certi valori di byte non è casuale, ma è in qualche modo legata al contenuto del file stesso. Per cui un file di testo avrà una particolare distribuzione dei valori dei byte, mentre una immagine o un file eseguibile ne avranno una differente, anche in funzione della codifica. Analizzando le frequenze con cui ogni valore di byte compare nel file si potrebbero individuare anomalie nel contenuto del file stesso, come ad esempio un testo nascosto in un file audio, oppure più semplicemente file camuffati: immagini spacciate come file compressi e simili.

Funziona in questo modo: si forniscono in standard input i dati da analizzare, per esempio un file, e in uscita si hanno tre differenti tipi di output a scelta. Il primo, banale, è un file CSV con i dati di frequenza complessivi di tutti i dati forniti in ingresso. E’ utilizzabile per fare un grafico con OpenOffice Calc e simili.

L’altro output è grafico, sotto forma di immagine PNG, in due varianti: la più semplice mostra uno spettrogramma complessivo per tutti i dati in input, ed è semplicemente una differente rappresentazione dei dati forniti anche in CSV, tanto che si possono chiedere entrambi. La seconda opzione è più intrigante: produce una immagine larga 256 pixel in cui ogni riga è lo spettrogramma di un blocco di dati in input, e la dimensione del blocco è configurabile. In pratica si ha un colpo d’occhio sul contenuto del file, reso in forma grafica.

Spettro di un file di testo
Questo è lo spettro di un file di testo (la licenza GNU GPL per la precisione).

Spettro di un file Wave
Questo è quello che si ottiene usando un file Wave.

Spettrogramma di un file Wave
Questo invece è lo spettrogramma dello stesso file (clicca sull’immagine per la dimensione reale).

Il primo file è stato ottenuto col comando:


$ cat COPYING | prisma -p asciitext.png

Lo spettrogramma del file Wave invece è stato ottenuto col comando:


$ cat test.wav | prisma -p wave-big.png -b 100000

Per chi è interessato, il programma è rilasciato sotto licenza GNU GPLv2, ed il tarball dei sorgenti con il makefile per compilare ed installare il tutto, con tanto di pagine man in italiano ed inglese è scaricabile qui. Richiede le librerie e gli header di ImageMagick per la compilazione

Sono ovviamente graditi commenti e suggerimenti per il miglioramento.

Fedora Release Party Roma: un successo, naturalmente.

Non ho molto da dire, se non che sono estremamente soddisfatto per come è andato il pomeriggio, cosa di cui va reso pieno merito agli organizzatori, in particolare a Marco Palazzotti e Gianluca Varisco.

Presenti molte persone “comuni”, niente geek pinguinari, niente fanatismi. La curiosità intorno a Linux e Fedora c’è, e si capisce dalle domande che hanno rivolto le persone, soprattutto a Gianluca, di RedHat Italia.

La sala, messa gentilmente a disposizione dall’Associazione Sportiva Roma12, era organizzata molto bene: dieci postazioni (offerte in prestito da Ergo Italia) di libero uso con installata Fedora 9, sia in versione Gnome che in “veste” KDE4. Le postazioni erano in LAN, e per gli ospiti c’era un access point Wi-Fi aperto. Un lato della sala attrezzata con sedie ed un telo di proiezione, l’angolo dei rinfreschi ben fornito, con anche torte casalinghe fornite da alcune rappresentanti del gentil sesso intervenute alla festa, nel pieno spirito di collaborazione della comunità di Fedora.

In uno dei tavoli, quasi invisibile fra i gadget, faceva mostra di sé un XO, della organizzazione no-profit OLPC, su cui ho potuto mettere le mani. Una sola parola: sbalorditivo!
L’interfaccia utente è semplicissima, è veloce, è comodo, ovviamente per chi ha le mani piccole come un bambino, visto che i tasti sono piccoli. E non è una battuta, visto che i destinatari di questo incredibile oggetto sono proprio i bambini.

C’era una postazione automatizzata per creare versioni “live” di Fedora 9 su pen drive, che ha riscosso parecchio successo.

Anche io ho cercato di fare la mia parte, anche se non sono per niente navigato in queste cose. C’era qualcuno che è venuto con il proprio notebook per vedere se si riusciva a far funzionare qualche periferica recalcitrante. A me è capitato un portatile al quale non funzionava il wireless. Nel log del kernel c’era bene in vista il messaggio di dove andare a prendere il pezzo che mancava, ossia il firmware dai driver di Windows, che, incredibilmente, non siamo riusciti a trovare in Rete. Il colmo!

Si è parlato di Open Source, del rapporto con scuola, istituzioni e imprese. Tutto questo in maniera assolutamente tranquilla e con il tono delle chiacchiere da bar. Ma i contenuti e le idee che sono circolate erano tutt’altro che banali.

Ho potuto conoscere finalmente Serendippo, al secolo Alessandro, che ogni tanto commenta in questo blog. C’era anche Antonio, c’era il simpaticissimo Lorenzo, c’era Luca Cipriani, insomma valeva la pena esserci.

Per chiudere, ancora un ringraziamento agli organizzatori ed a tutti i partecipanti per il bel pomeriggio passato insieme.

Le foto “presentabili” che ho fatto sono qui. Qui invece quelle fatte da Gianluca.

Virtualmente: Fedora su Qemu

Se, come me, avete voglia di sperimentare cose nuove senza autodistruggervi la tanto sudata installazione di Linux su cui lavorate, potrebbe tornarvi utile la creazione di installazioni virtuali di Fedora, per esempio, da poter maltrattare a piacere.

Nella nostra distribuzione preferita, quale che sia, avremo certamente a disposizione Qemu, un completo e versatile emulatore di PC (ed anche di altro). In Fedora è fra i pacchetti pronti per l’uso e, se abbiamo aggiunto il deposito Livna, abbiamo anche a disposizione il modulo kernel per l’accelerazione (kqemu).

Partiamo con il creare il disco virtuale su cui andiamo ad installare. Qui ci riferiremo a Fedora 8, ma qualsiasi altra distribuzione è utilizzabile senza problemi. Personalmente ho installato in questo modo Debian per x86 e per ARM, Damn Small Linux, Slackware, Knoppix, System Rescue CD, RedHat 9 e varie versioni di Fedora, oltre al FreeDos, Windows 2000 e XP.

Scegliamo la dimensione del disco. Se vogliamo una installazione minima di Fedora bastano 2Gbyte, altrimenti di più, secondo le richieste della nostra distribuzione. Qui supporremo una installazione ridotta all’osso, con solo la modalità testuale, niente desktop grafico. Scegliamo 2Gbyte:


$ dd if=/dev/zero of=virt-fedora.qemu bs=1M count=1 seek=2000
1+0 records in
1+0 records out
1048576 bytes (1,0 MB) copied, 0,0111865 s, 93,7 MB/s

L’esecuzione è pressoché istantanea. Questo perché sto usando un filesystem (ext3) che permette i cosiddetti sparse files, e l’opzione seek fa il resto. Il file è visualizzato come grande 2Gbyte, ma in realtà sul disco c’è solo un Mbyte scritto. Il file si chiama virt-fedora.qemu.
A questo punto serve l’immagine ISO della distribuzione da installare, oppure il supporto, CD o DVD. Possiamo inserire il modulo di accelerazione di Qemu, da utente root:


# modprobe kqemu

Di seguito avviare Qemu per installare:


$ qemu -m 256 -boot d -cdrom Fedora-8-i386-DVD.iso -hda virt-fedora.qemu

Esaminiamo i singoli parametri per capirne il funzionamento.

  • -m 256 sta per “assegna 256 Mbyte di memoria alla macchina virtuale. Da adattare secondo i requisiti della distribuzione da installare.
  • -boot d indica alla macchina virtuale di fare il boot da CDROM. Dopo lo cambieremo in -boot c per avviare da hard disk.
  • -cdrom Fedora-8-i386-DVD.iso indichiamo a Qemu di usare un file immagine ISO. Se invece abbiamo un supporto CD o DVD, basta cambiare in -cdrom /dev/scd0 o in -cdrom /dev/cdrom.
  • -hda virt-fedora.qemu indichiamo a Qemu il file che rappresenta il disco virtuale.

Se il comando è corretto dovremmo immediatamente vedere la prima schermata di boot del disco di installazione. In Fedora 8 è questa sotto.

Nel nostro caso installeremo usando la seconda voce, in modo solo testo. Possiamo riferirci al manuale della distribuzione scelta per avere dettagli sull’installazione.

Qualche avvertenza: al momento di partizionare, il file da 2Gbyte da noi scelto viene visto ed usato come un normale disco della dimensione complessiva pari al file, quindi nello spazio disponibile ci andranno almeno due partizioni, quella di root e quella di swap, teniamone conto. La macchina virtuale avrà una scheda di rete NE2000 compatibile e scheda video SuperVGA. Qemu agirà da server DHCP, da DNS e da default router, assegnando alla macchina virtuale un indirizzo IP 10.0.2.15. Per maggiori dettagli ci riferiremo alla documentazione di Qemu.

Al termine dell’installazione possiamo configurare tutto come di nostro gradimento, poi salviamo il file del disco virtuale da qualche parte. Non lo useremo mai direttamente, ma ne faremo delle copie “a perdere” che devasteremo a piacere. Quando non serviranno più le potremo buttare e riprendere l’originale, intatto, per farne una copia di lavoro, che conserverà intatte tutte le caratteristiche dell’originale.

Gli usi possibili sono infiniti. Supponiamo di avere una immagine disco raw presa con dd al cui interno vi sono due partizioni in NTFS. Possiamo installare “virtualmente” una versione di Windows capace di leggere NTFS, e far partire Qemu con il disco acquisito raw come disco secondario. Potremo accedere alle partizioni come se avessimo installato il disco dentro un computer con Windows. Oppure possiamo far partire una macchina virtuale con una distribuzione Linux di tipo Forensics, vedi Helix, ed usare l’immagine acquisita con dd direttamente, connessa come un disco.

Insomma, ora sta a noi. Buon lavoro!

Fedora 9 a Roma: io ci sarò!

Ci siamo! Fra pochi giorni verrà rilasciata la versione 9 di Fedora. Si sta tentando di organizzare una festa per il rilascio a Roma. Per ora i dettagli sono disponibili qui e sulla mailing list dedicata agli utenti italiani di Fedora.

La data scelta è il 24 maggio, un sabato, alle ore 16.00.
La partecipazione è aperta a tutti, e saranno disponibili DVD di installazione e Live CD.

Per quanto mi riguarda ci sarò, se avete tempo passate e potremo conoscerci di persona.

Aggiornamento

Come Serendippo mi fa notare, mi sono dimenticato di citare la postazione di creazione di versioni Live su pen-drive: portate la vostra penna USB (vuota ovviamente) e potrete crearvi la vostra Fedora Live da portachiavi!

Se intendete partecipare vi prego di farmelo sapere, o di segnalarlo nella Mailing list. Ci serve per l’organizzazione.

Aggiornamenti

Ne parla anche Punto Informatico.

Durante l’evento parlerò brevemente di come Fedora mi aiuta nel lavoro di tutti i giorni.

Effetti collaterali spaziotemporali

Per chi non l’avesse capito, quanto scritto nell’articolo immediatamente precedente questo, è da interpretare come un effetto collaterale della data. Insomma, è un pesce d’aprile. Poco credibile, visto che SuperPunk lo ha smascherato dopo appena pochi minuti, mentre Serendippo c’era quasi cascato, ma poi si è ripreso. Spero di non aver seriamente traumatizzato nessuno.

La mia posizione su Vista è ancora molto prudente. Le mie idee le conoscete già (vedi qui, qui, qui, qui e qui).

Certamente le critiche che vanno per la maggiore a Vista sono, secondo me, ovvio, insostenibili. Nel senso che si contestano difetti che in realtà difetti non sono. Ci si lamenta che le cose non sono al solito posto, ma lo stesso è successo per Windows XP, e per Windows 2003 server. Ci si lamenta che è lento e richiede molte risorse, ma si dimentica di fare il normale “tuning” che si fa in ogni sistema operativo appena installato. Ci si lamenta delle nuove misure di sicurezza, troppo “intrusive”.

Ora, a parte la classica inclinazione, a quanto pare non solo italiana, a lamentarsi di tutto, ci sono delle critiche da fare a Vista, ma da tutto un altro punto di vista (scegliere un altro nome no, eh Bill?).

Le mie personali critiche riguardano tre punti principali: le strategie di sicurezza, l’uso smodato della crittografia e il “tutto installato, tutto acceso”.

Le strategie di sicurezza potevano essere finalmente indirizzate verso la corretta gestione da parte dell’utilizzatore finale degli account amministrativi, ossia educare gli utenti a non essere sempre e comunque amministratori, che è la prima causa di tutti i problemi di sicurezza di tutte le versioni di Windows. Invece no. La strada scelta è di aggiungere controllori “automagici” che rilevano una operazione potenzialmente pericolosa e chiedono conferma all’utente prima di proseguire. Strada seguita ad esempio dai personal firewall, che quando arriva una cosa nuova che vuole uscire chiedono all’utente, che spesso ne sa meno di loro, che di solito clicca su “abilita” e “ricorda impostazione”. Alla fine è inutile. Ce ne sono altri di esempi, ma il succo è questo: si poteva andare in una direzione nuova, ma si è scelto di blindare la vecchia. Le conseguenze saranno evidenti fra qualche tempo, quando i creatori di malware avranno preso confidenza con Vista, e Windows XP perderà una consistente fetta delle installazioni per obsolescenza. Il che vuol dire: quando Vista diventerà l’unico bersaglio dei creatori di malware. Non dovremo aspettare molto.

La crittografia è uno dei pilastri portanti in Vista: viene usata dappertutto. Firme crittografiche, certificati, cifratura, ma la parte più consistente, quella che ha richiesto più lavoro e che si mangia più risorse, è la gestione della protezione del diritto d’autore, ossia la verifica di autenticità dei contenuti multimediali. Il DRM (con il cugino TPM) sono in Vista due pachidermi obesi di crittografia. Per i meno preparati, la crittografia è un mostro mangiatore di risorse di elaborazione: processore e memoria. La pesantezza di Vista e la grande richiesta di risorse necessaria per il funzionamento è in gran parte da imputare alla presenza di queste tecnologie per la protezione dei diritti di altri. Ecco uno dei motivi della pesantezza di Vista.

Al momento dell’installazione ben poca scelta viene lasciata, secondo la filosofia (in parte giustificata…) che l’utente non solo non ne sa abbastanza, ma non è in grado di decidere. Quindi viene installato e attivato tutto. Ma proprio tutto. Succede fin dai tempi di Windows XP e con Vista peggiora. Ora, a parte l’effettiva utilità di molti componenti, il fatto che non sia messo a disposizione dell’utente un modo per togliere i componenti inutilizzati lo trovo estremamente limitante, oltre a portare lo spazio occupato sui dischi a livelli mai visti prima. Ed il dover ricorrere a programmi di terze parti come vLite per alleggerire la situazione non è certo la strada migliore, oltre ad essere molto probabilmente fuori da qualsiasi best practice di Microsoft.

In conclusione, se vogliamo criticare Vista, di motivi ce ne sono, ma certamente non quelli più spesso letti e sentiti in giro.

Per approfondire

Le strategie di sicurezza in Vista: Joanna Rutkowska, badvista, Coding Horror.

Vista e DRM/content protection: Bruce Schneier, no1984.org e il costo del DRM.

VPN tra SonicWall e Linux con OpenSWAN

Per accedere al server Linux di un cliente mi sono stati forniti un client VPN ed i dati di accesso. Ovviamente il client è solo per Windows, e dovendo scambiare file con il server Linux ero costretto a fare il reboot del computer e passare a Windows, dopo aver lavorato i file con Linux. Insomma, un bagno di sangue.

Smanettando per qualche ora sono riuscito a far funzionare OpenSWAN con l’appliance SonicWall, di cui, per non precisati motivi di sicurezza, non mi è stato fornito alcun dettaglio: modello, configurazione, tipo di VPN, algoritmi. Praticamente ho dovuto fare tutto da solo.

Ecco il risultato della battaglia.

Continua a leggere

Aggiungere interfacce grafiche agli script shell #3

In questa terza puntata vediamo come Zenity ci può aiutare con i file.

L’opzione è --file-selection, ed accetta l’opzione generale --title per dare il titolo alla finestra che appare:


$ zenity  --file-selection --title="Prendi un file"

Questo il risultato:

Zenity File Selection 1

Al solito il valore di ritorno è true, ossia zero, se si preme il pulsante OK, false, diverso da zero, se si preme il pulsante Annulla o si chiude la finestra. Il file scelto viene stampato sullo standard output con il path completo. Se dalla finestra mostrata in figura scelgo il file avatar.png all’uscita di Zenity con la pressione del tasto OK viene stampato:


$ zenity  --file-selection --title="Prendi un file"
/home/mario/Desktop/avatar.png

Ecco un breve script shell che mostra come usare la selezione file di Zenity:


#!/bin/bash

# mostra la finestra di selezione file e assegna il file scelto 
# che zenity manda allo standard output alla variabile "filescelto"
# notare i "backtick" -> ` `
filescelto=`zenity --file-selection --title="Zenity: seleziona un file"`

# prende il valore di ritorno del comando precedente
ritorno=$?

# controlla se si è premuto OK o Annulla
if [ "$ritorno" -ne 0 ]; then
  # è stato premuto annulla o chiusa la finestra
  zenity --warning --title="Test di Zenity" --text="Hai annullato"
  exit 1
else
  # è stato premuto OK
  zenity --info --title="Test di Zenity" --text="Hai scelto il file: '$filescelto'"
fi

Lo script è disponibile qui.

La directory di partenza è quella attuale, ma è possibile cambiarla a piacimento usando l’opzione --filename=FILE, mettendo al posto di FILE il percorso voluto, completo di barra finale se è una directory:


$ zenity  --file-selection --title="Prendi un file" --filename=/usr/share/doc/

Mostra questa finestra:

Zenity File Selection 2

Usato in questo modo permette di scegliere un solo file. Se vogliamo selezionare più file possiamo usare le due opzioni --multiple e --separator=C dove C è il carattere che vogliamo venga utilizzato per separare i file fra loro nell’output, quello predefinito è la barra verticale (il pipe, ‘|‘). Per selezionare più file basta tenere premuto il tasto Control (Ctrl) mentre si puntano i file con un clic del mouse.

Se invece vogliamo restringere la selezione solo alle directory, si usa l’opzione --directory. In questo caso i file saranno visualizzati in grigio e non saranno selezionabili. Vale anche per le directory l’opzione --multiple.

Se intendiamo salvare un file, le finestre di dialogo mostrare non aiutano, perché non permettono di digitare il nome di un file. Basta però utilizzare l’opzione --save, ed appare la consueta finestra di dialogo del salvataggio file. Il file non viene creato, e si può controllare l’esistenza di un file con lo stesso nome includendo l’opzione --confirm-overwrite. In questo caso se viene scelto un file già esistente viene proposto un messaggio di avvertimento:

Zenity File Selection 3

Se si risponde Annulla si rimane nella finestra di selezione e si può scegliere un altro nome, mentre se si preme Sostituisci, Zenity ritorna con il nome del file scelto. Il file non viene comunque toccato, sta a noi decidere il suo destino nel resto dello script shell.

Combinando invece le due opzioni --save e --directory, il comportamento cambia: il nome che viene scritto è inteso come nome di directory, che viene creata immediatamente alla pressione del tasto OK.

Invece l’opzione --multiple è incompatibile con la modalità salvataggio, ed è ignorata con l’emissione di un messaggio di avvertimento.

Aggiungere interfacce grafiche agli script shell #2

Nella prima parte abbiamo visto come porre una semplice domanda e come notificare all’utente lo stato dell’esecuzione in uno script shell.

In questa seconda parte ci occuperemo della possibilità offerta da Zenity di manipolare l’input e l’output di testo.

Per avere un input dall’utente in forma di testo scritto, l’opzione da usare è --entry, in questo modo:


$ zenity --entry --title="Un input di testo" --text="Inserisci qualcosa"

Il cui risultato è:

Zenity Entry Dialog 1

Possiamo decidere la dimensione della finestra di dialogo con l’opzione --width=N dove N è la larghezza totale in pixel, e possiamo fornire un testo predefinito già inserito nella casella con l’opzione --entry-text=stringa, come in questo esempio:


$ zenity --entry --width=300 --title="Un input di testo" --text="Inserisci qualcosa" --entry-text="Questo è già dentro"

Il cui risultato è:

Zenity Entry Dialog 2

Il testo digitato viene stampato nello standard output alla pressione del pulsante OK, mentre niente viene restituito se si preme il pulsante Annulla. Contestualmente, il valore di ritorno è zero (true) se si preme OK e diverso da zero se si preme annulla o si chiude la finestra dal pulsante nella barra del titolo.

Ecco un pezzetto di codice in Bash che distingue fra le varie situazioni:


#!/bin/bash

# mostra la finestra di dialogo e assegna quello che zenity manda allo
# standard output alla variabile "varstringa"
# notare i "backtick" -> ` `
varstringa=`zenity --entry --width=300 --title="Zenity: input di testo" --text="Inserisci qualcosa"`

# prende il valore di ritorno del comando precedente
ritorno=$?

# controlla se si è premuto OK o Annulla
if [ "$ritorno" -ne 0 ]; then
  # è stato premuto annulla o chiusa la finestra
  zenity --warning --title="Test di Zenity" --text="Hai annullato"
  exit 1
else
  # è stato premuto OK
  zenity --info --title="Test di Zenity" --text="Hai scritto: '$varstringa'"
fi

Il codice è anche qui.

Una ulteriore opzione, --hide-text, permette di nascondere il testo durante la digitazione come durante l’inserimento di una password:


$ zenity --entry --title="Input nascosto" --text="Inserisci una password" --hide-text

Il cui risultato, digitando qualcosa, è:

Zenity Entry Dialog 3

Se invece di una singola riga vogliamo mostrare un testo lungo, come ad esempio un file di log, l’opzione da usare è --text-info, nella sua forma più semplice:


$ zenity --text-info --title="Vedere un intero file" --filename zenity-entry-02

che mostra il file zenity-entry-02 all’interno di una finestra:

Zenity Text 1

L’opzione --filename permette di specificare un file da mostrare. Se si vuole poter cambiare il contenuto mostrato si può usare l’opzione --editable che consente modifiche al testo mostrato, con queste limitazioni:

  • Non si ha praticamente nessuna funzione avanzata di editing.
  • Le righe troppo lunghe vengono spezzate solo a video, mandandole a capo. Nell’output rimangono invece integre.
  • Il file non viene modificato. Il testo completo viene stampato sullo standard output, e tocca a noi catturarlo e dirigerlo su un altro file.

Se poi avete esperienza di shell script saprete anche che usando questo comando:


$ zenity --text-info --filename zenity-entry-02 --editable > zenity-entry-02

si giunge ad un risultato ben diverso da quello atteso: il file zenity-entry-02 viene svuotato del contenuto e la finestra di Zenity viene mostrata vuota, perché nella ridirezione dell’output il file zenity-entry-02 viene aperto in scrittura e troncato a zero byte prima di eseguire il comando Zenity.

Il testo mostrato può anche essere fornito dinamicamente:


$ find / -name "*.pdf" | zenity --text-info --title="I file pdf sul tuo disco" 

che produce questo:

Zenity Text 2

con la lista dei file PDF che viene allungata man mano che il comando find ne trova altri.

Per ora chiudiamo qui, ma Zenity ci riserva molte altre sorprese.

Disco USB cifrato con Fedora

Dopo il furto subito poco prima di Natale 2006, dove ho perso anche un disco USB con parecchi dati dentro (i dati non li ho persi, santo backup del backup…), ho cominciato a riflettere su come evitare che in simili frangenti uno sconociuto possa venire in possesso di dati per lo meno strettamente personali, se non riservati.

Dalla mailing lista di Fedora mi è giunto un articolo sulla cifratura trasparente di dischi interi usando un sistema introdotto dalla Core 5, che ora è praticamente giunto alla maturità.

Il risultato è che il mio nuovo disco USB è cifrato, ed ho scritto anche questo articolo.

Buona lettura.

Aggiornamento del 3 ottobre 2007
Il tutto funziona sulle ultime versioni di Fedora.