Come utilizzare il comando chattr su Linux

Pubblicato: 2022-06-28
Terminale Linux su sfondo rosso per laptop.
fatmawati achmad zaenuri/Shutterstock

Insieme alle solite autorizzazioni di lettura, scrittura ed esecuzione dei file, i file Linux hanno un altro insieme di attributi che controllano altre caratteristiche del file. Ecco come vederli e cambiarli.

Autorizzazioni e attributi

In Linux, chi può accedere a un file e cosa può fare con esso è controllato da un set di autorizzazioni incentrato sull'utente. Sia che tu possa leggere il contenuto di un file, scrivere nuovi dati nel file o eseguire un file se si tratta di uno script o di un programma, è tutto governato da quell'insieme di autorizzazioni. Le autorizzazioni vengono applicate al file, ma definiscono le restrizioni e le capacità per diverse categorie di utenti.

Esistono autorizzazioni per il proprietario del file, per il gruppo del file e per altri , ovvero utenti che non rientrano nelle prime due categorie. Puoi usare il comando ls con l'opzione -l (elenco lungo) per vedere i permessi su un file o una directory.

Come usare il comando chmod su Linux
CORRELATI Come utilizzare il comando chmod su Linux

Per modificare i permessi, usa il comando chmod . Almeno, puoi se hai i permessi di scrittura per il file o se sei l'utente root.

Possiamo vedere che le autorizzazioni dei file sono incentrate sull'utente perché assegnano o rimuovono le autorizzazioni a livello di utente. Al contrario, gli attributi di un file sono incentrati sul file system. Come le autorizzazioni, sono impostate sul file o sulla directory. Ma una volta impostati, sono gli stessi per tutti gli utenti.

Gli attributi sono una raccolta separata di impostazioni dalle autorizzazioni. Gli attributi controllano le caratteristiche come l'immutabilità e altri comportamenti a livello di file system. Per vedere gli attributi di un file o di una directory utilizziamo il comando lsattr . Per impostare gli attributi utilizziamo il comando chattr .

Tutto quello che avresti sempre voluto sapere sugli inode su Linux
CORRELATO Tutto ciò che avresti sempre voluto sapere sugli inode su Linux

Le autorizzazioni e gli attributi sono archiviati all'interno degli inode . Un inode è una struttura del file system che contiene informazioni sugli oggetti del file system come file e directory. La posizione di un file sul disco rigido, la sua data di creazione, i suoi permessi e i suoi attributi sono tutti memorizzati all'interno del suo inode.

Poiché diversi file system hanno strutture e capacità sottostanti diverse, gli attributi possono comportarsi in modo diverso, o essere completamente ignorati, da alcuni file system. In questo articolo utilizziamo ext4 che è il file system predefinito per molte distribuzioni Linux.

Osservare gli attributi di un file

I comandi chattr e lsattr saranno già presenti sul tuo computer, quindi non è necessario installare nulla.

Per controllare gli attributi sui file nella directory corrente, usa lsattr :

 lsattr 

Elenco degli attributi di file per tutti i file in una directory

Le linee tratteggiate sono segnaposto per gli attributi non impostati. L'unico attributo impostato è l'attributo e (extents). Ciò mostra che gli inode del file system stanno utilizzando, o utilizzeranno, se necessario, estensioni per puntare a tutte le parti del file sul disco rigido.

Se il file è contenuto in una sequenza contigua di blocchi del disco rigido, il suo inode deve solo registrare il primo e l'ultimo blocco utilizzati per archiviare il file. Se il file è frammentato, l'inode deve registrare il numero del primo e dell'ultimo blocco di ogni parte del file. Queste coppie di numeri di blocco del disco rigido sono chiamate estensioni.

Questo è l'elenco degli attributi più comunemente usati.

  • a : Aggiungi solo. Un file con questo attributo può essere aggiunto solo a. Può ancora essere scritto, ma solo alla fine del file. Non è possibile sovrascrivere nessuno dei dati esistenti all'interno del file.
  • c : compresso. Il file viene compresso automaticamente sul disco rigido e decompresso quando viene letto. I dati scritti sui file vengono compressi prima di essere scritti sul disco rigido.
  • R : Nessun aggiornamento atime . L' atime è un valore in un inode che registra l'ultimo accesso a un file.
  • C : Nessuna copia su scrittura. Se due processi richiedono l'accesso a un file, è possibile assegnare loro dei puntatori allo stesso file. Viene data loro una copia univoca del file solo se tentano di scrivere sul file, rendendolo unico per quel processo.
  • d : Nessuna discarica. Il comando Linux dump viene utilizzato per scrivere copie di interi file system su supporti di backup. Questo attributo fa sì che il dump ignori il file. È escluso dal backup.
  • D : Aggiornamenti sincroni delle directory. Quando questo attributo viene attivato per una directory, tutte le modifiche a tale directory vengono scritte in modo sincrono, ovvero immediatamente, sul disco rigido. Le operazioni sui dati possono essere memorizzate nel buffer.
  • e : Formato estensione. L'attributo e indica che il file system sta utilizzando estensioni per mappare la posizione del file sul disco rigido. Non puoi cambiarlo con chattr . È una funzione del funzionamento del file system.
  • io : immutabile. Un file immutabile non può essere modificato, inclusa la ridenominazione e l'eliminazione. L'utente root è l'unica persona che può impostare o deselezionare questo attributo.
  • s : cancellazione sicura. Quando un file con questo set di attributi viene eliminato, i blocchi del disco rigido che contenevano i dati del file vengono sovrascritti con byte contenenti zero. Nota che questo non è rispettato dal file system ext4 .
  • S : Aggiornamenti sincroni. Le modifiche a un file con il relativo set di attributi S vengono scritte nel file in modo sincrono.
  • u : l'eliminazione di un file che ha il suo attributo u impostato provoca una copia del file. Questo può essere utile per il recupero dei file se il file è stato rimosso per errore.

Modifica degli attributi di un file

Il comando chattr ci consente di modificare gli attributi di un file o di una directory. Possiamo usare gli operatori + (set) e - (unset) per applicare o rimuovere un attributo, in modo simile al comando chmod e ai permessi.

Il comando chattr ha anche un operatore = (solo set). Questo imposta gli attributi di un file o di una directory solo sugli attributi specificati nel comando. Cioè, tutti gli attributi non elencati nella riga di comando non sono impostati .

Impostazione dell'attributo Aggiungi solo

Impostiamo l'attributo append-only su un file di testo e vediamo come influisce su ciò che possiamo fare con il file.

 sudo chattr +un file di testo.txt 

Impostazione dell'attributo append only su un file di testo

Possiamo verificare che il bit append-only sia stato impostato usando lsattr :

 lsattr file di testo.txt 

Elenco degli attributi per un file di testo

La lettera “ a ” indica che l'attributo è stato impostato. Proviamo a sovrascrivere il file. Il reindirizzamento dell'output a un file con una singola parentesi angolata " > " sostituisce tutto il contenuto del file con l'output reindirizzato.

Abbiamo precaricato il file di testo con del testo segnaposto lorem ipsum .

 gatto file di testo.txt 

Testo segnaposto in un file di testo

Reindirizzeremo l'output da ls nel file:

 ls -l > file di testo.txt
 sudo ls -l > file-di testo.txt 

Tentativo di sovrascrivere un file di testo di sola aggiunta

L'operazione non è consentita, anche se utilizziamo il comando sudo .

Se utilizziamo due parentesi angolari " >> " per reindirizzare l'output, viene aggiunto ai dati esistenti nel file. Questo dovrebbe essere accettabile per il nostro file di testo di sola aggiunta.

 sudo ls -l >> file-di testo.txt 

Reindirizzamento dell'output alla fine di un file di testo

Torniamo al prompt dei comandi senza alcun messaggio di errore. Diamo un'occhiata all'interno del file per vedere cosa è successo.

 gatto file di testo.txt 

Esame del contenuto di un file di testo

L'output reindirizzato da ls è stato aggiunto alla fine del file.

Nuovi dati aggiunti a un file di testo di solo accodamento

Sebbene possiamo aggiungere dati al file, questa è l'unica modifica che possiamo apportare ad esso. Non possiamo eliminarlo e nemmeno eseguire il root.

 rm file di testo.txt
 sudo rm file di testo.txt 

Impossibile eliminare un file di testo di solo accodamento

Impostazione dell'attributo immutabile

Se vuoi proteggere un file a cui non verranno mai aggiunti nuovi dati, puoi impostare l'attributo immutabile. Ciò impedisce tutte le modifiche al file, inclusa l'aggiunta di dati.

 sudo chattr +i secondo-file.txt
 lsattr secondo-file.txt 

Impostazione dell'attributo immutabile su un file di testo

Possiamo vedere la " i " che indica che l'attributo immutabile è stato impostato. Avendo reso il nostro file immutabile, anche l'utente root non può rinominarlo ( mv ), eliminarlo ( rm ) o aggiungervi dati.

 sudo mv secondo-file.txt nuovo-nome.txt
 sudo rm secondo-file.txt
 sudo ls -l >> secondo-file.txt 

Un file immutabile che resiste al cambiamento

Non fare affidamento sull'eliminazione sicura su ext4

Come abbiamo sottolineato, alcuni sistemi operativi non supportano tutti gli attributi. L'attributo secure delete non è rispettato dalla famiglia di file system ext , incluso ext4 . Non fare affidamento su questo per l'eliminazione sicura dei file.

È facile vedere che questo non funziona in ext4 . Imposteremo l'attributo s (eliminazione sicura) su un file di testo.

 sudo chattr +s terzo-file.txt 

Impostazione dell'attributo di eliminazione sicura su un file di testo

Quello che faremo è scoprire l'inode che contiene i metadati su questo file. L'inode contiene il primo blocco del disco rigido occupato dal file. Il file contiene del testo segnaposto lorem ipsum .

Leggeremo quel blocco direttamente dal disco rigido per verificare che stiamo leggendo la posizione corretta del disco rigido. Elimineremo il file e quindi leggeremo di nuovo lo stesso blocco di immersione difficile. Se l'attributo di eliminazione sicura viene rispettato, dovremmo leggere i byte azzerati.

Possiamo trovare l'inode del file usando il comando hdparm con l' --fibmap (file block map).

 sudo hdparm --fibmap terzo-file.txt 

Trovare l'inode di un file

Il primo blocco del disco rigido è 18100656. Useremo il comando dd per leggerlo.

Le opzioni sono:

  • if=/dev/sda : legge dal primo disco rigido su questo computer.
  • bs=512 : usa una dimensione del blocco del disco rigido di 512 byte.
  • skip=18100656 : Salta tutti i blocchi prima del blocco 18100656. In altre parole, inizia a leggere dal blocco 18100656.
  • count=1 : legge un blocco di dati.
 sudo dd if=/dev/sda bs=512 skip=18100656 count=1 

Lettura del primo blocco del disco rigido di un file

Come previsto, vediamo il testo segnaposto lorem ipsum . Stiamo leggendo il blocco corretto sul disco rigido.

Ora cancelleremo il file.

 rm terzo-file.txt 

Se leggiamo lo stesso blocco del disco rigido, possiamo ancora vedere i dati.

 sudo dd if=/dev/sda bs=512 skip=18100656 count=1 

Lettura dei dati da un blocco del disco rigido utilizzato da un file eliminato

Ancora una volta, non dipendere da questo per l'eliminazione sicura su ext4 . Sono disponibili metodi migliori per eliminare i file in modo che non possano essere recuperati.

CORRELATI: Come eliminare in modo sicuro i file su Linux

Utile, ma da usare con cautela

L'impostazione degli attributi dei file può renderli immuni a disastri accidentali. Se non puoi eliminare o sovrascrivere un file, è abbastanza sicuro.

Potresti pensare di volerli applicare ai file di sistema e rendere più sicura la tua installazione di Linux. Ma i file di sistema devono essere sostituiti periodicamente man mano che vengono emessi aggiornamenti o vengono applicati aggiornamenti. Per questo motivo, è più sicuro utilizzare questi attributi solo su file di tua creazione.

CORRELATI: Come proteggere il tuo server Linux con fail2ban