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 è uno script o un programma, è tutto governato da quel set 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. È possibile utilizzare il ls
comando con l’ -l
opzione (elenco lungo) per visualizzare le autorizzazioni su un file o una directory.
Per modificare i permessi, usa il chmod
comando . 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 lsattr
comando. Per impostare gli attributi utilizziamo il chattr
comando.
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, stiamo usando ext4
quale è 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, utilizzare lsattr
:
lsattr
Le linee tratteggiate sono segnaposto per gli attributi non impostati. L’unico attributo impostato è l’ e
attributo (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
atime
aggiornamento . Ilatime
è 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 fadump
ignorare il file. È escluso dal backup. - D : Aggiornamenti sincroni delle directory. Quando questo attributo è 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’
e
attributo indica che il file system sta utilizzando le 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. Si noti che questo non è rispettato dal
ext4
file system. - S : Aggiornamenti sincroni. Le modifiche a un file con il relativo
S
set di attributi vengono scritte nel file in modo sincrono. - u : L’eliminazione di un file con il relativo
u
attributo impostato provoca l’esecuzione di 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 chattr
comando ci consente di modificare gli attributi di un file o di una directory. Possiamo utilizzare gli operatori +
(imposta) e -
(non impostato) per applicare o rimuovere un attributo, in modo simile al chmod
comando e alle autorizzazioni.
Il chattr
comando 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 di sola aggiunta 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 sudo
comando .
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 ” 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 ext
famiglia di file system , incluso ext4
. Non fare affidamento su questo per l’eliminazione sicura dei file.
È facile vedere che questo non funziona in ext4
. Imposteremo l’ s
attributo (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 hdparm
comando con l’ --fibmap
opzione (file block map).
sudo hdparm --fibmap terzo-file.txt
Il primo blocco del disco rigido è 18100656. Useremo il dd
comando 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.
Utile, ma da usare con cautela
L’impostazione degli attributi dei file può renderli immuni a disastri accidentali. Se non riesci a 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 quando vengono emessi aggiornamenti o vengono applicati aggiornamenti. Per questo motivo, è più sicuro utilizzare questi attributi solo su file di tua creazione.