Archivi tag: Linux

Case History: Analisi Forense e Recupero Dati Cancellati

Recupero Dati Cancellati

Per importante cliente di Brescia operante nel settore dell’investigazione privata, abbiamo effettuato un’attività di informatica forense atta a recuperare dei documenti cancellati da un hard disk.

Per svolgere questo compito abbiamo utilizzato un convertitore SATA-USB che ci ha consentito di connettere l’hard disk ai nostri PC.

Inoltre per poter operare sui dati in sicurezza abbiamo utilizzato una distro Linux specifica per le attività forensi chiamata Kali, avviata da una memoria USB in modalità forense (forensics mode).

Continua la lettura di Case History: Analisi Forense e Recupero Dati Cancellati

Linux Embedded 5/5 – Configurare l’ambiente di sviluppo per il debug remoto e l’uso delle Qt Embedded

Questo articolo fa parte della serie:

In questo articolo analizziamo come effettuare il debug remoto di una semplice applicazione, prima utilizzando la riga di comando e poi utilizzando l’ambiente di sviluppo delle Qt, ovvero il Qt Creator.

Continua la lettura di Linux Embedded 5/5 – Configurare l’ambiente di sviluppo per il debug remoto e l’uso delle Qt Embedded

Linux Embedded 4/5 – Creare l’immagine del filesystem con Buildroot

Questo articolo fa parte della serie:

Una volta pronto il bootloader e preparata l’immagine del kernel, l’ultimo passo che rimane per avere un sistema Linux embedded funzionante è quello di creare il filesystem del sistema target con tutti i file, le directory e gli applicativi necessari.

Nei sistemi Linux embedded questa operazione viene realizzata con Buildroot.

Buildroot è un software open source che permette di creare il filesystem di un sistema embedded partendo dai sorgenti dei vari applicativi che vengono poi cross-compilati per l’ambiente target e insieme ai file di configurazione compongono il filesystem.

I vantaggi di Buildroot sono:

  • Buildroot conosce tutti i siti da cui scaricare i sorgenti dei vari software che si scelgono per il sistema target;
  • Buildroot conosce come modificare i pacchetti scaricati in modo da consentirne la cross-compilazione;
  • Buildroot è in grado di combinare tutti i pacchetti fino a comporre il root filesystem, in altri termini Buildroot conosce le dipendenze che sussistono tra i vari pacchetti software;
  • Buildroot ha un ambiente di configurazione a menù molto intuitivo e facile da usare che permette di scegliere quali pacchetti includere nel file system che si va a creare;

Continua la lettura di Linux Embedded 4/5 – Creare l’immagine del filesystem con Buildroot

Linux Embedded 3/5 – Toolchain di cross-compilazione e compilazione di U-Boot e del Kernel Linux

Questo articolo fa parte della serie:

Per poter ricompilare U-Boot, il Kernel e Buildroot bisogna prima preparare l’ambiente host in modo che possa compilare i sorgenti di interesse per il sistema target. Ad esempio se il sistema host è un x86, mentre il target monta un processore ARM, servirà un compilatore in grado di essere eseguito sul sistema host, ma che generi codice pensato per il processore ARM.

In altre parole quello che serve è una toolchain per la cross-compilazione.

La toolchain per la cross-compilazione viene fornita dal produttore della scheda embedded e va installata nell’ambiente host. Per farlo si può seguire il procedimento seguente.

Continua la lettura di Linux Embedded 3/5 – Toolchain di cross-compilazione e compilazione di U-Boot e del Kernel Linux

Linux Embedded 2/5 – Il bootloader U-Boot

Questo articolo fa parte della serie:

U-Boot è un bootloader, il suo compito all’avvio è quello di attivare l’hardware, caricare il kernel Linux dalla memoria Flash alla RAM (o dalla rete alla RAM) ed eseguirlo.

Tipicamente nei sistemi embedded viene utilizzato il bootloader U-Boot rispetto ad altri come LILO o GRUB tipici delle distribuzioni dekstop, perché supporta più piattaforme (ARM, AVR32, Blackfin, x86, Motorola 68K, Xilix Microblaze, MIPS, Alterra NIOS, NIOS2, PowerPC, Super-H, ecc.) ed è capace di effettuare il boot del kernel da rete con il protocollo TFTP, da un disco IDE o SCSI, dall’USB e dalle memorie Flash tipicamente presenti sui sistemi embedded.

Continua la lettura di Linux Embedded 2/5 – Il bootloader U-Boot

Linux Embedded 1/5 – Come configurare l’ambiente di sviluppo

Questo articolo è il primo di una serie che ha l’obiettivo di spiegare come si crea e si configura una distribuzione Linux minimale pensata per un sistema embedded. Inoltre, verrà spiegato come configurare l’ambiente di sviluppo per utilizzare le Qt Embedded e il debug remoto.

Più nel dettaglio i temi trattai saranno:

Continua la lettura di Linux Embedded 1/5 – Come configurare l’ambiente di sviluppo

Con Linux è possibile esternalizzare la gestione della propria infrastruttura informatica?

Server room

Linux è un sistema operativo che ha trovato la sua maggiore applicazione nei server aziendali come dimostrano i numeri e le recenti politiche di colossi storici di questo settore come IBM che, pur avendo già sistemi operativi proprietari e affermati come AIX e OS/400 (i5/OS, IBM i, ecc.), ha deciso di offrire pieno supporto a Linux per l’intera gamma dei suoi Power Systems. Continua la lettura di Con Linux è possibile esternalizzare la gestione della propria infrastruttura informatica?

Quali sono le migliori tecnologie con cui sviluppare software?

Space Shuttle

PHP

Presente da oltre 15 anni e utilizzato da decine di milioni di siti web, PHP è il linguaggio server-side più famoso e utilizzato al mondo.

Più del 77% dei siti web è stato ralizzato utilizzando questo linguaggio.

fonti: W3Techs, BuiltWith. Continua la lettura di Quali sono le migliori tecnologie con cui sviluppare software?

Come installare un ambiente WAMP (Windows, Apache, MySQL, PHP) sul proprio PC

Questa guida è datata. La versione aggiornata è presente al seguente link: Come installare un ambiente WAMP (Windows, Apache, MySQL, PHP) sul proprio PC (aggiornamento 2014).

La maggior parte dei siti web oggi in circolazione si basa su una soluzione a stack di software open source nota come LAMP: Linux, Apache, MySQL e PHP (Se al posto di Linux c’è Windows si parlerà di WAMP). Continua la lettura di Come installare un ambiente WAMP (Windows, Apache, MySQL, PHP) sul proprio PC

Linux: come ricevere una mail quando il disco è quasi pieno

a server rack

Il disco del server aziendale ogni tanto si riempie bloccando tutto: gestionale, database ecc.

Se per voi questo scenario è comune forse avete trovato il modo per risolverlo, ma andiamo con ordine.

Mi è capitato nella mia carriera di aver a che fare con software enterprise che hanno la brutta abitudine di non ripulire mai i file di log che periodicamente producono (es. IBM DB2) con conseguente riempimento periodico dello spazio su disco e blocco di loro stessi in primis e a catena di tutto il resto, magari l’ERP della vostra azienda.

Sicuramente esistono dei software molto belli e molto costosi che potrebbero tener controllato lo stato del server e prevenire questi casi, fortunatamente per voi se il SO del vostro server è Linux non ne avete bisogno.

In questo caso infatti è sufficiente predisporre un piccolo script che periodicamente controlla lo stato di occupazione dei dischi e vi notifica via mail di un eventuale superamento di una soglia di occupazione predefinita.

Per realizzare uno script del genere dobbiamo essere in grado di fare sostanzialmente due cose:

  1. controllare lo stato di occupazione dei dischi
  2. inviare una mail

Il comando Linux per soddisfare il primo requisito è df che, se lanciato con l’opzione -h, ci darà una visione d’insieme umanamente leggibile sullo stato di occupazione delle partizioni.

es.

srv02:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 98G 7.4G 91G 8% /
udev 1015M 120K 1014M 1% /dev

Per poter trattare però il suo output in maniera automatica ci conviene utilizzarne la versione seguente:

srv02:~ # df -a -P
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda2 102748540 7692172 95056368 8% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
debugfs 0 0 0 - /sys/kernel/debug
udev 1038388 120 1038268 1% /dev
devpts 0 0 0 - /dev/pts
securityfs 0 0 0 - /sys/kernel/security

Il comando Linux per soddisfare il secondo requisito è mail che appunto serve per mandare mail da riga di comando.

Mettendo tutto insieme otteniamo qualcosa di simile

#!/bin/bash

set -x

SIZE_PERC_LIMIT=75
TO="admin@domain.it"
CC="cto@domain.it"
NOREPLY="$(hostname)-noreply@domain.it"
FROM="$(hostname)@domain.it"

df -a -P | grep '^/dev/' | tr -s ' ' | cut -d' ' -f5 | grep '%' | cut -d% -f1 | while read value; do
if [ $value -ge $SIZE_PERC_LIMIT ]; then

echo "*** $(hostname) ha raggiunto la soglia di occupazione del ${value}% di una partizione" > /tmp/check_disco.log
echo "*** di seguito viene riportato l'output del comando: df -h" >> /tmp/check_disco.log
df -h >> /tmp/check_disco.log

SUBJECT="ATTENZIONE $(hostname): stato occupazione partizioni"

mail -c "$CC" -r "$FROM" -R "$NOREPLY" -s "$SUBJECT" "$TO" < /tmp/check_disco.log

break
fi
done

L’unica riga che credo richieda una spiegazione è la 11 la quale ha come scopo quello di ottenere per ogni partizione la percentuale di occupazione e per farlo compie in sequenza le seguenti operazioni:

  1. df -a -P: stampa lo stato di tutte le partizioni utilizzando il formato POSIX. Questo dovrebbe favorire la portabilità di questo script.
  2. grep '^/dev/': seleziona solo le partizioni che ci interessano (ovviamente l’espressione regolare potrebbe essere modificata a seconda della nomenclatura delle vostre partizioni) scartando cioè filesystem virtuali, dispositivi di rete, ecc.
  3. tr -s ' ': rimpiazza le sequenze di spazi con spazi singoli per facilitarne la suddivisione con il comando successivo
  4. cut -d' ' -f5: taglia le righe in campi separati da spazi e ne prende il quinto: quello della percentuale di occupazione
  5. grep '%': tiene solo i valori percentuali scartando eventuali trattini
  6. cut -d% -f1: separa la percentuale dal valore e tiene quest’ultimo
  7. while read value; do: il valore letto lo memorizza nella variabile $value

Il resto dello script non fa altro che confrontare ogni valore letto con la soglia d’allarme che in questo esempio è impostata sul 75% e nel caso in cui sia maggiore spedisce una mail a chi di dovere.

A questo punto non ci resta che schedulare questo script, che chiameremo check_disco.sh e a cui daremo i permessi di esecuzione, con il mitico crontab a seconda delle nostre esigenze.

Se per esempio abbiamo paura che il disco si possa riempire repentinamente, magari a causa di qualche software che in caso di errore produce grossi dump a rate elevati (Java VM anyone?), possiamo pensare di schedularlo in modo che giri ogni ora con la seguente riga di crontab:

0 * * * * /usr/bin/check_disco.sh &> /var/log/check_disco.log

Da notare come la riga 3 dello script (set -x) in combo con la redirezione degli stream di output su check_disco.log ci darà la possibilità di valutare l’ultima esecuzione dello script, nel caso in cui le cose non siano andate come ci aspettavamo.

Come nota finale aggiungo che se non riuscite a mandare le mail attraverso il comando mail, potreste provare a creare un file .mailrc nella directory home dell’utente su cui è stata schedulata l’esecuzione dello script, in cui specificare l’indirizzo del vostro server SMTP nel modo seguente:

set smtp=X.X.X.X