Come utilizzare il comando chattr su Linux
Pubblicato: 2022-06-28
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.
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
.
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
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 ildump
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 conchattr
. È 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
Possiamo verificare che il bit append-only sia stato impostato usando lsattr
:
lsattr file di testo.txt
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
Reindirizzeremo l'output da ls
nel file:
ls -l > file di testo.txt
sudo ls -l > file-di testo.txt
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
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
L'output reindirizzato da ls
è stato aggiunto alla fine del file.
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
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
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
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
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
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
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
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