Skip to main content
  1. Concetti/

Link Hard Vs Symbolic

·5 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

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:

  1. 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.
  2. 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/null

Symbolic 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 l

Spiegazione 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), find lo classifica come un link orfano.

Perché il link simbolico non si "ripunta"?#

  1. 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.
  2. Ignoranza dell'Inode: Quando crei un link simbolico link -> pippo.txt, il link non sa minimamente quale sia l'Inode di pippo.txt. Gli interessa solo che esista un file chiamato pippo.txt.
  3. L'effetto "Indirizzo Errato": Se hai pippo.txt e pluto.txt (hard link dello stesso Inode) e il tuo simbolico punta a pippo.txt
    • Se cancelli pippo.txt, il simbolico cercherà ancora un file chiamato pippo.txt.
    • Anche se pluto.txt ha gli stessi identici dati (stesso Inode), il simbolico non "sa" che sono la stessa cosa. Per lui, l'indirizzo sulla busta è diventato inesistente.

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.

Collegato a
#

  • file — categoria
  • ln — comando per crearli
  • find -comando per trovarli

Related