Cos'è#
Meccanismi del filesystem per far sì che un file appaia in più posizioni contemporaneamente.
Come funziona#
Hard Links 🧱#
Originariamente, ogni file ha un hard link che gli dà il nome.
- Sono indistinguibili dal file originale.
- Limite 1: Non possono riferirsi a file fuori dal proprio filesystem (partizione).
- Limite 2: Non possono riferirsi a directory.
- I dati esistono finché esiste almeno un link.
In un sistema Linux, dobbiamo distinguere tra il nome di un file e i dati effettivi salvati sul disco. Immagina che i dati siano una stanza 🏠 e che il nome del file sia semplicemente una porta 🚪 che conduce a quella stanza.
Ecco i punti chiave per capire quella frase:
- L'Inode: I dati reali e le informazioni tecniche sono salvati in una struttura chiamata Inode 🧱.
- Hard Link: Ogni nome di file che vedi in una cartella è un "Hard Link", ovvero un'etichetta che punta a un Inode.
- Il conteggio dei link: Linux tiene traccia di quante "etichette" (nomi) puntano a uno specifico Inode. Questo valore è chiamato Link Count.
La frase "I dati esistono finché esiste almeno un link" significa che Linux non cancella i dati dal disco finché il Link Count non arriva a zero. Se hai tre nomi (Hard Link) che puntano agli stessi dati e ne cancelli due, i dati rimangono lì, accessibili tramite il terzo nome. Solo quando rimuovi l'ultimo nome, lo spazio sul disco viene liberato.
🧱 ASCII Diagram: Hard Link & Inode#
Ecco la visualizzazione di come nomi.txt e cognomi.txt non siano cloni, ma due "porte" 🚪 per la stessa "stanza" 🏠 sul disco:
Nomi dei File Meta-dati (Registro) Dati Reali
(Directory Entry) (Inode Table) (Data Blocks)
+-------------------+ +-------------------+ +-----------------+
| nomi.txt | -------> | Inode: 1573299 | | "Ciao, mi |
+-------------------+ | | | chiamo Barno" |
| - Permessi: rw- | --> | |
+-------------------+ | - Links Count: 2 | | (Contenuto del |
| cognomi.txt | -------> | - Size: 20 bytes | | file fisico) |
+-------------------+ +-------------------+ +-----------------+ls -l
-rw-r--r-- 2 barno users 4096 Mar 8 17:15 pippo.txt
^
|
Conteggio Link (Hard Links)Limiti degli Hard Link (Dettaglio Tecnico)#
Basandoci sulla struttura degli Inode, gli Hard Link hanno due limiti invalicabili:
- Stesso Filesystem: Poiché i numeri di Inode sono unici solo all'interno della stessa partizione, non puoi creare un Hard Link che punti a un file su un altro disco.
- Niente Directory: Per evitare loop infiniti nel filesystem che manderebbero in crash i tool di sistema, Linux impedisce agli utenti di creare Hard Link alle cartelle.
Trovare i "Fratelli" (Hard Links)#
Se hai un file e vuoi trovare tutti gli altri nomi che puntano allo stesso Inode:
# Metodo 1: Tramite nome del file
find / -samefile nomi.txt 2>/dev/null
# Metodo 2: Tramite numero di Inode (preso da stat)
find / -inum 1573299 2>/dev/nullSymbolic Links (Soft Links) 🔗#
Creati per superare i limiti degli hard links, funzionano come puntatori testuali (simili ai collegamenti Windows).
- Possono puntare a directory e attraversare diversi filesystem.
- Se il file originale viene eliminato, il link diventa rotto (broken).
HARD LINK SYMBOLIC LINK
[Nome A] --\ [Link S] --(testo)--> [Percorso/File]
> [Inode/Dati] |
[Nome B] --/ [Dati]I Soft Link (o Symbolic Link) sono file speciali che contengono semplicemente un puntatore testuale (un percorso) al file originale.#
- Non hanno lo stesso Inode del file di destinazione: Un Soft Link ha il suo Inode personale, che contiene la stringa del percorso (es.
/home/barno/file.txt). - Non puntano all'Inode: Puntano a un nome. Se quel nome scompare (perché il file viene rimosso con
rm), il Soft Link continua a esistere ma punta al vuoto. È come avere un indirizzo su un biglietto da visita per una casa che è stata demolita 🏚️.
🔍 Come trovare i Link Orfani (Broken Links)#
In Linux, esiste un modo "magico" per usare find per scovare questi puntatori interrotti.
# Trova tutti i link simbolici nel percorso corrente che sono "rotti"
find . -xtype lSpiegazione tecnica:
-type l: Cercherebbe tutti i link simbolici (funzionanti e non).-xtype l: È un test speciale. Controlla il tipo del file a cui il link punta. Se il puntatore è "rotto" (ovvero il file di destinazione non esiste),findlo classifica come un link orfano.
Perché il link simbolico non si "ripunta"?#
- Puntatore a Testo vs Puntatore a Inode: Un Hard Link è un puntatore diretto all'Inode (i dati reali). Un Soft Link (simbolico) è solo un file di testo che contiene una stringa: il percorso del file.
- Ignoranza dell'Inode: Quando crei un link simbolico
link -> pippo.txt, il link non sa minimamente quale sia l'Inode dipippo.txt. Gli interessa solo che esista un file chiamatopippo.txt. - L'effetto "Indirizzo Errato": Se hai
pippo.txtepluto.txt(hard link dello stesso Inode) e il tuo simbolico punta apippo.txt- Se cancelli
pippo.txt, il simbolico cercherà ancora un file chiamatopippo.txt. - Anche se
pluto.txtha gli stessi identici dati (stesso Inode), il simbolico non "sa" che sono la stessa cosa. Per lui, l'indirizzo sulla busta è diventato inesistente.
- Se cancelli
Perché è importante per Blue Team#
Gli attaccanti possono usare i symbolic link per nascondere file o ingannare i processi di scansione. Capire se un file è un link è cruciale durante l'analisi forense per non perdere la traccia dei dati reali.


