Comando shred in Linux: sovrascrivere file e capire i limiti
shred sovrascrive i dati di un file e, con -u, ne rimuove anche il nome. Può ostacolare il recupero soltanto quando le scritture raggiungono effettivamente i dati precedenti: non garantisce la cancellazione di ogni copia su SSD, snapshot o backup.
Gli esempi usano GNU Coreutils. Controlla shred --help e man shred sul sistema di destinazione. Per le prove seguenti crea una cartella nuova con mkdir shred-demo && cd shred-demo: continua solo se entrambi i comandi riescono e usa esclusivamente file dimostrativi che puoi perdere. Le sovrascritture non hanno un comando di annullamento.
Cos'è il comando shred?
Il comando scrive più volte sul contenuto accessibile attraverso il percorso indicato. Il risultato dipende dal filesystem e dal dispositivo sottostante: una scrittura logica può essere memorizzata altrove, lasciando una versione precedente. Un SSD, cioè un’unità a stato solido, può rimappare le celle; un filesystem copy-on-write (CoW) scrive nuove copie invece di modificare direttamente quelle vecchie. Anche snapshot, copie di riserva e alcuni livelli RAID, che distribuiscono o replicano dati fra dischi, richiedono una valutazione separata.
Sintassi di base
shred [OPTION]... FILE...
OPTION e FILE sono segnaposto, non testo da eseguire letteralmente. Puoi indicare più file; racchiudi tra virgolette i percorsi con spazi e usa -- prima degli operandi se un nome inizia con un trattino. Per esempio, shred -- "-prova.txt" seleziona un file con quel nome nella directory corrente: resta un’operazione distruttiva.
Uso base di shred
Sovrascrivere un file
Nella cartella dimostrativa prepara un file nuovo con printf 'demo\n' > secret.txt. Esegui poi il comando seguente. GNU usa normalmente tre passaggi di sovrascrittura: senza -u il nome rimane, ma il contenuto precedente viene sostituito. La dimensione può essere arrotondata a un blocco completo; -x evita questo arrotondamento. Il comando riuscito può non produrre messaggi.
shred secret.txt
Sovrascrivere e rimuovere il file
Sul file dimostrativo precedente, -u richiede la rimozione del nome dopo la sovrascrittura. Il nome secret.txt non dovrebbe più esistere al termine riuscito. Con un collegamento fisico creato con ln, altri nomi possono restare, ma condividono gli stessi dati e quindi subiscono anch’essi la sovrascrittura e l’eventuale troncamento: non sono copie di sicurezza. Backup e snapshot indipendenti non vengono eliminati da questa opzione.
shred -u secret.txt
Mostrare il progresso
Prepara un altro file sacrificabile con printf 'demo\n' > disk-image.raw, poi esegui la riga seguente. Qui disk-image.raw è un normale piccolo file, non un dispositivo né un’immagine da conservare. -v invia i messaggi di avanzamento all’uscita di errore standard; -n 3 richiede tre passaggi. I messaggi indicano il lavoro svolto, non una verifica forense del supporto.
shred -v -n 3 disk-image.raw
Verificare il risultato senza confonderlo con una garanzia
Il blocco crea una sottocartella nuova e un file di prova, fermandosi se preparazione o sovrascrittura falliscono. Le parentesi mantengono invariata la directory della shell principale. Non sostituire il nome dimostrativo con un file importante.
(
mkdir shred-check || exit 1
cd shred-check || exit 1
printf 'demo\n' > disposable-demo.txt || exit 1
shred -u disposable-demo.txt || exit 1
test ! -e disposable-demo.txt
echo $?
)
Se il blocco stampa 0, il controllo finale ha confermato l’assenza di quel percorso dopo un comando riuscito. Non dimostra che ogni copia fisica sia irrecuperabile. In caso di errore, leggi il messaggio e controlla il file rimasto: una sovrascrittura parziale può aver già alterato i dati, senza possibilità di ripristino tramite shred.
Opzioni principali
| Opzione | Scopo |
|---|---|
-n N |
Imposta il numero di passaggi di sovrascrittura, normalmente 3. I passaggi possono usare dati casuali o schemi specifici. |
-u |
Richiede la rimozione del nome dopo la sovrascrittura; altri collegamenti fisici possono rimanere. |
-z |
Aggiunge un ulteriore passaggio finale di zeri, oltre al numero richiesto con -n. |
-v |
Mostra l’avanzamento sull’uscita di errore standard. |
-s SIZE |
Elabora il numero di byte indicato dall’inizio del file. Un valore inferiore non copre il resto; uno maggiore può estendere il file. |
-x |
Evita di arrotondare la dimensione al blocco completo successivo; non elimina i limiti del supporto. |
-f |
Se necessario tenta di modificare i permessi per consentire la scrittura. Non supera ogni restrizione o un supporto in sola lettura. |
--random-source=FILE |
Legge i byte casuali dalla sorgente specificata. La scelta richiede una sorgente adeguata, non un file arbitrario. |
-n 1 -z comporta un passaggio di sovrascrittura più uno finale di zeri, quindi due passaggi complessivi. -s limita la regione richiesta e va valutato insieme a -x per evitare l’arrotondamento: sovrascrivere soltanto i primi byte non cancella l’intero file. Aumentare i passaggi non risolve il problema di copie conservate fuori dalla regione raggiunta. Le opzioni sono quelle GNU e vanno controllate su altre implementazioni.
Esempi pratici
Scegliere i passaggi conoscendone i limiti
Nella cartella dimostrativa crea confidential.bin con printf 'demo\n' > confidential.bin. La riga seguente esegue un passaggio, aggiunge quello di zeri e richiede la rimozione del nome. Non è una raccomandazione universale di sanificazione: prima di trattare dati reali devi conoscere supporto, copie esistenti e livello di recupero dal quale vuoi proteggerti.
shred -v -n 1 -z -u confidential.bin
Identificare prima un dispositivo a blocchi
Su Linux, i comandi seguenti mostrano dispositivi e montaggi senza avviare cancellazioni. Confronta percorso, capacità, modello, numero di serie e gerarchia con l’inventario reale: un solo nome o una dimensione non identifica con certezza il disco. Le colonne di lsblk dipendono dalla versione di util-linux. Prima di qualsiasi procedura sull’intero dispositivo vanno gestiti filesystem montati, swap e livelli dipendenti; per il disco di sistema può servire un ambiente separato. Queste righe non costituiscono una procedura completa di sanificazione.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
findmnt
Considerare la cancellazione crittografica
La NIST SP 800-88 Rev. 2 distingue metodi e condizioni di sanificazione. La cancellazione crittografica può rendere inaccessibili dati già cifrati intervenendo sulle chiavi appropriate, ma richiede crittografia robusta e gestione verificabile delle chiavi. I dati sensibili non devono essere stati conservati in chiaro sul supporto dopo l’ultima sanificazione adeguata. Devono essere considerate tutte le copie delle chiavi necessarie al recupero, incluse quelle esterne, di ripristino o in deposito; cancellare una password non equivale automaticamente a eliminarle. Backup indipendenti richiedono una gestione separata. La procedura deve essere appropriata al dispositivo e ai requisiti applicabili, con verifica del risultato.
La riga seguente è soltanto diagnostica: sostituisci encrypted-volume con il nome di una mappatura già configurata. cryptsetup status segnala se è attiva e, quando disponibile, ne mostra i parametri. Non cancella dati o chiavi e non dimostra che l’intero supporto sia stato cifrato fin dall’inizio.
cryptsetup status encrypted-volume
shred e comandi correlati
| Comando o metodo | Ruolo principale | Quando valutarlo |
|---|---|---|
rm |
Rimuovere nomi; lo spazio viene liberato quando non restano collegamenti e utilizzi che lo trattengono | Eliminazione ordinaria, senza promessa di sovrascrittura |
shred |
Sovrascrivere i dati accessibili dal percorso e, facoltativamente, rimuovere il nome | Casi in cui le ipotesi sulle scritture siano state verificate |
| Sanificazione del dispositivo | Usare una procedura supportata per il modello, con verifica del risultato | Riutilizzo o dismissione del supporto secondo i requisiti pertinenti |
| Distruzione fisica | Rendere inutilizzabile il supporto con una procedura adeguata | Casi in cui altri metodi siano insufficienti o non applicabili |
Avvertenze importanti
Le scritture su SSD possono raggiungere celle fisiche diverse
Il wear leveling, cioè la distribuzione dell’usura fra le celle, e i blocchi di riserva possono lasciare i dati vecchi fuori dalle scritture accessibili al sistema operativo. Per un SSD, compresi quelli con interfaccia NVMe, ripetere shred su un file non certifica la cancellazione del dispositivo. Valuta una procedura di sanificazione supportata e verificabile per quel modello; il nome commerciale “secure erase” da solo non prova il risultato.
Altre copie del filesystem possono rimanere
Snapshot, copie CoW, sincronizzazioni e backup possono conservare versioni precedenti. Anche il journaling va distinto per modalità: il manuale GNU segnala come problematico un journal che registra i dati del file, mentre per ext3/ext4 le modalità data=ordered e data=writeback non presentano lo stesso limite specifico del journal dei dati. Questo non annulla gli altri limiti del dispositivo o delle copie esterne. Non dedurre l’idoneità di un filesystem dal solo nome “ext4” o “journaling”.
Un errore nel percorso del dispositivo è distruttivo
Una sovrascrittura su un dispositivo a blocchi può distruggere l’intero filesystem. La prova con disk-image.raw non autorizza a sostituire quel nome con un percorso /dev/.... In particolare -u non va trasferito automaticamente a un esempio su dispositivi: rimuovere il nodo del dispositivo non è una fase necessaria della sua sanificazione. Verifica separatamente identità, autorizzazione, dipendenze, copie da preservare e procedura del produttore.
FAQ
shred -u impedisce sempre il recupero?
No. Richiede sovrascrittura e rimozione del nome, ma rimappamento, snapshot e altre copie possono conservare dati precedenti. Anche un risultato senza errori non dimostra una sanificazione completa.
Conviene usare shred sui singoli file di un SSD?
Non usarlo come garanzia di eliminazione delle vecchie celle. Il wear leveling può impedire di raggiungerle: per dismissione o riutilizzo valuta una procedura del dispositivo verificabile e, se ne ricorrono le condizioni, la cancellazione crittografica.
L’opzione -z rende la cancellazione sicura?
Aggiunge un passaggio finale di zeri oltre ai passaggi scelti con -n. Non rimuove copie esterne e non risolve il rimappamento del supporto; quindi non fornisce da sola una garanzia di sanificazione.
Per eliminare normalmente un file devo usare rm o shred?
Per l’eliminazione ordinaria usa rm, controllando il percorso. Valuta shred soltanto quando serve una sovrascrittura e puoi verificarne le ipotesi sul sistema di memorizzazione. Nessuno dei due sostituisce la gestione delle copie di riserva.




