Archivi tag: linux

Rimuovere gli attributi “hidden” e “system” dei file FAT su GNU/Linux

Recentemente mi è capitato di avere un chiavetta USB in cui non vedevo più le cartelle e i documenti. Apparentemente sembrava tutto ok: lo scandisk non rilevava danni alla FAT, lo spazio continuava a essere occupato, eppure non si vedeva niente, sembrava vuoto. Anche la ricerca dei file pareva non trovare più i miei documenti.

Prima di rassegnarmi e buttare via la chiavetta, ho provato ad inserirla nel PC con Ubuntu: L’intenzione era quella di provare a recuperare almeno parte dei miei documenti. Ho aperto così una finestra della shell e ho listato il contenuto della chiavetta. Con stupore mi sono accorto che tutti i miei documenti erano ancora lì!

Facendo una ricerca su Google ho scoperto che una cosa simile era capitata anche ad altri. Probabilmente si trattava di un qualche virus che attiva i bit degli attributi nascosto e sistema dei file, rendendoli invisibili all’utente sotto Windows. La cosa più importante era che i miei file erano ancora intatti e che esisteva una soluzione basata su Linux per riportare il tutto alla normalità.

Per prima cosa assicurarsi di avere installato il pacchetto mtools:

$ sudo apt-get install mtools

Quindi creare il file .mtoolsrc nella propria home directory e inserire quanto segue:

drive s: file=/dev/<usb-device>
mtools_skip_check=1

Verificare quindi gli attributi dei file:

$ mattrib -/ s:

Correggere quindi gli attributi con questo comando:

$ mattrib -/ -h -s s:

Adesso i file e le cartelle saranno di nuovo visibili anche su Windows!

Ricordati di me, GRUB!

Per fare in modo che Grub 2.0 si ricordi dell’ultima opzione selezionata occorre modificare/aggiungere le seguenti righe nel file /etc/default/grub con il vostro editor preferito:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Salvare le modifiche e applicare le nuove impostazioni digitando il comando:

$ sudo update-grub

Da adesso in poi Grub si ricorderà quale sistema operativo è stato avviato e lo riproporrà già selezionato tra le varie opzioni disponibili.

Proteggere i files con lo sticky bit

Nei sistemi Linux e unix-like se un utente ha i permessi per scrivere in una directory allora può rinominare o eliminare i files contenuti in essa, anche se non ne è il proprietrio. Per prevenire ciò il proprietario della directory, o l’amministratore del sistema, può impostare il cosiddetto sticky bit. In questo modo i soli utenti che possono rinominare o rimuovere i files di quella directory sono il proprietario del file, il proprietario della directory e l’utente root.
Facciamo subito un esempio. Creiamo un nuova directory e impostiamo lo sticky bit:

MacBookPro:~ mark$ mkdir share
MacBookPro:~ mark$ chmod 1777 share
MacBookPro:~ mark$ ls -ld share
drwxrwxrwt 2 mark staff 68 9 Mag 16:26 share

Con questi permessi qualunque utente può creare dei file ma può eliminare solo quelli che gli appartengono. Così l’utente pippo non può eliminare i file dell’utente topolino, anche se ha i permessi per scrivere sulla directory:

MacBookPro:~ pippo$ ls -l
total 3
-rw-r--r-- 1 pippo staff 120 Nov 19 11:32 data.pippo
-rw-r--r-- 1 topolino staff 3421 Nov 19 15:34 data.topolino
-rw-r--r-- 1 pluto staff 728 Nov 20 12:29 data.pluto
MacBookPro:~ pippo$ rm data.topolino
data.topolino: 644 mode ? y
rm: data.topolino not removed.
Permission denied

Clonazione di un disco

In questo periodo sto leggendo un libro davvero interessante: Computer Forensics di Ghirardini – Faggioli, Apogeo Editore. Il testo tratta delle tecniche di analisi forense in ambito informatico. Grazie a questo libro ho appreso una nuova tecnica per effettuare il clone di un disco. Avevo già trattato questo argomento in precedenza. Tuttavia questo sistema è molto più accurato ed elegante e merita certamente di essere menzionato tra i miei appunti di informatica, in quanto tale metodologia può rivelarsi davvero utile.
Per prima cosa la copia: viene usato il comando dd che esegue una copia byte per byte a prescindere dal tipo di filesystem utilizzato. Ad esempio il comando:

# dd if=/dev/sda of=/percorso/nome_file.img bs=2048

esegue una copia del disco (device) sda (compresa l’MBR, la struttura delle partizioni e lo spazio non utilizzato) nel file nome_file.img. Ovviamente, invertendo gli argomenti, è possibile ripristinare un’immagine creata precedentemente nel disco.
La destinazione deve risiedere necessariamente in un disco diverso da quello sorgente. Quindi dobbiamo disporre di un altro supporto, interno o esterno, purché abbastanza capiente da contenere il file immagine, che avrà come dimensione finale la dimensione nominale del disco sorgente. Come possiamo fare se non si dispone di un supporto secondario? Gli autori descrivono come trasferire il file immagine in un’altra macchina via rete attraverso il tool netcat. Questo programma è in grado di restare in ascolto su una determinata porta e riportare tutto quello vi passa in un file. Dunque, possiamo procedere in questa maniera: nel computer di destinazione, che farà da server, avviare netcat:

$ netcat -l -p 5959 > nome_file.img

Sul pc client, dove risiede il disco da clonare:

# dd if=/dev/sda bs=2048 | netcat 192.168.0.1 5959

I parametri sono ovviamente a titolo di esempio. Quindi, nel caso reale, dovremo indicare l’indirizzo reale del server e una porta che non sia già usata da un altro programma in quel momento.
Una volta ottenuta l’immagine del disco, è possibile ripristinarla allo stesso modo, oppure montarla attraverso i loop device. Tuttavia dobbiamo ricordarci che quello che abbiamo in mano è la copia raw del disco e non una partizione. Quindi dobbiamo prima analizzare lo schema di partizionamento del disco, poi procedere con il montaggio della partizione di nostro interesse. Quindi:

$ fdisk -u -l nome_file.img

e otterremmo un risultato simile a questo:

Device Boot      Start         End      Blocks   Id  System
nome_file.img1   *          63   113627744    56813841    7  HPFS/NTFS
nome_file.img2       113627745   156296384    21334320    7  HPFS/NTFS

Per montare la partizione dobbiamo calcolare il valore di offset che è dato dal numero di blocco iniziale * 512. Nell’esempio, la partizione nome_file.img1, che è di tipo ntfs inizia dal blocco 63, perciò: 63 * 512 = 32256. Quindi:

# mount -t ntfs -o ro,loop,offset=32256 nome_file.img /percorso/mountpoint

Un server FTP

Accedere ai file sul nostro server da remoto è più semplice se su di esso installiamo un servizio FTP. Questo protocollo è nato appositamente per lo scambio dei file da remoto e, sebbene esponga la nostra linux-box a qualche rischio di sicurezza in più, rende il suo utilizzo da remoto ancora più flessibile.
Un’installazione standard (ovvero senza particolari configurazioni) richiede pochissimo tempo. Innanzitutto installiamo il servizio vsftpd:

$ sudo apt-get install vsftpd

Quindi editiamo il file di configurazione /etc/vsftpd.conf e impostiamo i parametri che seguono:

#Disabilita il login anonimo
anonymous_enable=NO
#Abilita l'autenticazione basandosi sugli utenti locali
local_enable=YES
#Abilita la scrittura dei file per gli utenti accreditati
write_enable=YES

Per rendere effettive le modifiche non resta che riavviare il servizio e poi siamo subito pronti per accedere al nostro server via FTP!