So verwenden Sie den Chattr-Befehl unter Linux

Veröffentlicht: 2022-06-28
Linux-Terminal auf rotem Laptop-Hintergrund.
Fatmawati Achmad Zaenuri/Shutterstock

Neben den üblichen Lese-, Schreib- und Ausführungsberechtigungen für Dateien haben Linux-Dateien einen weiteren Satz von Attributen, die andere Eigenschaften der Datei steuern. So können Sie sie sehen und ändern.

Berechtigungen und Attribute

Wer unter Linux auf eine Datei zugreifen kann und was damit zu tun ist, wird durch einen benutzerzentrierten Satz von Berechtigungen gesteuert. Ob Sie den Inhalt einer Datei lesen, neue Daten in die Datei schreiben oder eine Datei ausführen können, wenn es sich um ein Skript oder ein Programm handelt, hängt alles von diesem Satz von Berechtigungen ab. Die Berechtigungen werden auf die Datei angewendet, sie definieren jedoch die Einschränkungen und Fähigkeiten für verschiedene Benutzerkategorien.

Es gibt Berechtigungen für den Besitzer der Datei, für die Gruppe der Datei und für andere – also Benutzer, die nicht zu den ersten beiden Kategorien gehören. Sie können den Befehl ls mit der Option -l (lange Auflistung) verwenden, um die Berechtigungen für eine Datei oder ein Verzeichnis anzuzeigen.

So verwenden Sie den chmod-Befehl unter Linux
RELATED How to Use the chmod Command on Linux

Um die Berechtigungen zu ändern, verwenden Sie den Befehl chmod . Zumindest können Sie das, wenn Sie Schreibrechte für die Datei haben oder wenn Sie der Root-Benutzer sind.

Wir können sehen, dass Dateiberechtigungen benutzerzentriert sind, da sie Berechtigungen auf Benutzerebene vergeben oder entziehen. Im Gegensatz dazu sind die Attribute einer Datei dateisystemzentriert. Wie Berechtigungen werden sie für die Datei oder das Verzeichnis festgelegt. Aber sobald sie eingestellt sind, sind sie für alle Benutzer gleich.

Attribute sind eine von Berechtigungen getrennte Sammlung von Einstellungen. Attribute steuern Merkmale wie Unveränderlichkeit und andere Verhaltensweisen auf Dateisystemebene. Um die Attribute einer Datei oder eines Verzeichnisses anzuzeigen, verwenden wir den Befehl lsattr . Um die Attribute festzulegen, verwenden wir den chattr Befehl.

Alles, was Sie schon immer über Inodes unter Linux wissen wollten
RELATED Alles, was Sie schon immer über Inodes unter Linux wissen wollten

Berechtigungen und Attribute werden in Inodes gespeichert. Ein Inode ist eine Dateisystemstruktur, die Informationen über Dateisystemobjekte wie Dateien und Verzeichnisse enthält. Der Speicherort einer Datei auf der Festplatte, ihr Erstellungsdatum, ihre Berechtigungen und ihre Attribute werden alle in ihrem Inode gespeichert.

Da verschiedene Dateisysteme unterschiedliche zugrunde liegende Strukturen und Fähigkeiten haben, können sich Attribute von einigen Dateisystemen unterschiedlich verhalten – oder vollständig ignoriert werden. In diesem Artikel verwenden wir ext4 , das Standarddateisystem für viele Linux-Distributionen.

Ansehen der Attribute einer Datei

Die Befehle chattr und lsattr sind bereits auf Ihrem Computer vorhanden, sodass Sie nichts installieren müssen.

Verwenden lsattr , um die Attribute der Dateien im aktuellen Verzeichnis zu überprüfen:

 lsattr 

Dateiattribute für alle Dateien in einem Verzeichnis auflisten

Die gestrichelten Linien sind Platzhalter für nicht gesetzte Attribute. Das einzige gesetzte Attribut ist das Attribut e (extents). Dies zeigt, dass die Dateisystem-Inodes Extents verwenden – oder verwenden werden, falls erforderlich –, um auf alle Teile der Datei auf der Festplatte zu verweisen.

Wenn die Datei in einer zusammenhängenden Folge von Festplattenblöcken gehalten wird, muss ihr Inode nur den ersten und letzten Block aufzeichnen, der zum Speichern der Datei verwendet wird. Wenn die Datei fragmentiert ist, muss der Inode die Nummer des ersten und letzten Blocks jedes Teils der Datei aufzeichnen. Diese Paare von Festplattenblocknummern werden Extents genannt.

Dies ist die Liste der am häufigsten verwendeten Attribute.

  • a : Nur anhängen. Eine Datei mit diesem Attribut kann nur angehängt werden. Es kann immer noch darauf geschrieben werden, aber nur am Ende der Datei. Es ist nicht möglich, vorhandene Daten innerhalb der Datei zu überschreiben.
  • c : Komprimiert. Die Datei wird automatisch auf der Festplatte komprimiert und beim Lesen dekomprimiert. In die Dateien geschriebene Daten werden komprimiert, bevor sie auf die Festplatte geschrieben werden.
  • A : Keine atime . Die atime ist ein Wert in einem Inode, der den letzten Zugriff auf eine Datei aufzeichnet.
  • C : Kein Copy-on-Write. Wenn zwei Prozesse den Zugriff auf eine Datei anfordern, können ihnen Zeiger auf dieselbe Datei gegeben werden. Sie erhalten nur dann ihre eigene eindeutige Kopie der Datei, wenn sie versuchen, in die Datei zu schreiben, wodurch sie für diesen Prozess eindeutig wird.
  • d : Kein Dump. Der Linux- dump -Befehl wird verwendet, um Kopien ganzer Dateisysteme auf Sicherungsmedien zu schreiben. Dieses Attribut bewirkt, dass dump die Datei ignoriert. Es wird von der Sicherung ausgeschlossen.
  • D : Synchrone Verzeichnisaktualisierungen. Wenn dieses Attribut für ein Verzeichnis aktiviert ist, werden alle Änderungen an diesem Verzeichnis synchron – dh sofort – auf die Festplatte geschrieben. Datenoperationen können gepuffert werden.
  • e : Ausdehnungsformat. Das e -Attribut gibt an, dass das Dateisystem Extents verwendet, um den Speicherort der Datei auf der Festplatte abzubilden. Sie können dies nicht mit chattr . Es ist eine Funktion des Betriebs des Dateisystems.
  • Ich : Unveränderlich. Eine unveränderliche Datei kann nicht geändert werden, einschließlich Umbenennen und Löschen. Der Root-Benutzer ist die einzige Person, die dieses Attribut festlegen oder zurücksetzen kann.
  • s : Sicheres Löschen. Wenn eine Datei mit diesem Attributsatz gelöscht wird, werden die Festplattenblöcke, die die Dateidaten enthielten, mit Bytes überschrieben, die Nullen enthalten. Beachten Sie, dass dies vom ext4 -Dateisystem nicht berücksichtigt wird.
  • S : Synchrone Updates. Änderungen an einer Datei mit gesetztem S -Attribut werden synchron in die Datei geschrieben.
  • u : Das Löschen einer Datei, deren Attribut u gesetzt ist, bewirkt, dass eine Kopie der Datei erstellt wird. Dies kann für die Dateiwiederherstellung von Vorteil sein, wenn die Datei versehentlich entfernt wurde.

Ändern der Attribute einer Datei

Mit dem Befehl chattr können wir die Attribute einer Datei oder eines Verzeichnisses ändern. Wir können die Operatoren + (set) und - (unset) verwenden, um ein Attribut anzuwenden oder zu entfernen, ähnlich dem chmod -Befehl und den Berechtigungen.

Der chattr Befehl hat auch einen = (nur setzen)-Operator. Dadurch werden die Attribute einer Datei oder eines Verzeichnisses nur auf die im Befehl angegebenen Attribute festgelegt. Das heißt, alle Attribute, die nicht in der Befehlszeile aufgeführt sind, werden zurückgesetzt .

Festlegen des Nur-Anhängen-Attributs

Lassen Sie uns das Append-Only-Attribut für eine Textdatei festlegen und sehen, wie es sich auf die Möglichkeiten der Datei auswirkt.

 sudo chattr + eine Textdatei.txt 

Festlegen des Nur-Anhängen-Attributs für eine Textdatei

Wir können überprüfen, ob das Append-Only-Bit gesetzt wurde, indem lsattr verwenden:

 lsattr Textdatei.txt 

Auflisten der Attribute für eine Textdatei

Der Buchstabe „ a “ zeigt an, dass das Attribut gesetzt wurde. Versuchen wir, die Datei zu überschreiben. Die Umleitung der Ausgabe in eine Datei mit einer einzelnen spitzen Klammer „ > “ ersetzt den gesamten Inhalt in der Datei durch die umgeleitete Ausgabe.

Wir haben die Textdatei mit einem Lorem- Ipsum- Platzhaltertext vorgeladen.

 cat Textdatei.txt 

Platzhaltertext in einer Textdatei

Wir leiten die Ausgabe von ls in die Datei um:

 ls -l > textdatei.txt
 sudo ls -l > Textdatei.txt 

Versuch, eine nur angehängte Textdatei zu überschreiben

Die Operation ist nicht erlaubt, auch wenn wir den Befehl sudo verwenden.

Wenn wir zwei spitze Klammern „ >> “ verwenden, um die Ausgabe umzuleiten, wird sie an die vorhandenen Daten in der Datei angehängt. Das sollte für unsere nur anhängende Textdatei akzeptabel sein.

 sudo ls -l >> textdatei.txt 

Ausgabe an das Ende einer Textdatei umleiten

Wir kehren ohne Fehlermeldungen zur Eingabeaufforderung zurück. Lassen Sie uns einen Blick in die Datei werfen, um zu sehen, was passiert ist.

 cat Textdatei.txt 

Untersuchen des Inhalts einer Textdatei

Die umgeleitete Ausgabe von ls wurde am Ende der Datei hinzugefügt.

Neue Daten, die an eine Nur-Anhänge-Textdatei angehängt werden

Obwohl wir Daten an die Datei anhängen können, ist dies die einzige Änderung, die wir daran vornehmen können. Wir können es nicht löschen und auch nicht rooten.

 rm textdatei.txt
 sudo rm textdatei.txt 

Fehler beim Löschen einer nur angehängten Textdatei

Festlegen des unveränderlichen Attributs

Wenn Sie eine Datei schützen möchten, der niemals neue Daten hinzugefügt werden, können Sie das unveränderliche Attribut festlegen. Dadurch werden alle Änderungen an der Datei verhindert, einschließlich des Anhängens von Daten.

 sudo chattr +i zweite-datei.txt
 lsattr zweite-datei.txt 

Festlegen des unveränderlichen Attributs für eine Textdatei

Wir können das „ i “ sehen, das anzeigt, dass das unveränderliche Attribut gesetzt wurde. Nachdem unsere Datei unveränderlich gemacht wurde, kann selbst der Root-Benutzer sie nicht umbenennen ( mv ), löschen ( rm ) oder ihr Daten hinzufügen.

 sudo mv zweite-datei.txt neuer-name.txt
 sudo rm zweite-datei.txt
 sudo ls -l >> zweite-datei.txt 

Eine unveränderliche Datei, die Änderungen widersteht

Verlassen Sie sich nicht auf das sichere Löschen auf ext4

Wie bereits erwähnt, unterstützen einige Betriebssysteme nicht alle Attribute. Das sichere Löschattribut wird von der ext -Familie von Dateisystemen, einschließlich ext4 , nicht berücksichtigt. Verlassen Sie sich beim sicheren Löschen von Dateien nicht darauf.

Es ist leicht zu erkennen, dass dies in ext4 nicht funktioniert. Wir setzen das Attribut s (sicheres Löschen) für eine Textdatei.

 sudo chattr +s dritte-datei.txt 

Festlegen des Attributs „Sicheres Löschen“ für eine Textdatei

Wir werden den Inode herausfinden, der die Metadaten zu dieser Datei enthält. Der Inode enthält den ersten von der Datei belegten Festplattenblock. Die Datei enthält Platzhaltertext für Lorem Ipsum .

Wir lesen diesen Block direkt von der Festplatte, um sicherzustellen, dass wir den richtigen Festplattenspeicherort lesen. Wir löschen die Datei und lesen dann denselben Hard-Dive-Block noch einmal. Wenn das sichere Löschattribut berücksichtigt wird, sollten wir genullte Bytes lesen.

Wir können den Inode der Datei finden, indem wir den Befehl hdparm mit der Option --fibmap (Dateiblockzuordnung) verwenden.

 sudo hdparm --fibmap dritte-datei.txt 

Den Inode einer Datei finden

Der erste Festplattenblock ist 18100656. Wir verwenden den dd -Befehl, um ihn zu lesen.

Die Optionen sind:

  • if=/dev/sda : Von der ersten Festplatte dieses Computers lesen.
  • bs=512 : Verwenden Sie eine Festplattenblockgröße von 512 Bytes.
  • skip=18100656 : Überspringen Sie alle Blöcke vor Block 18100656. Mit anderen Worten, beginnen Sie mit dem Lesen bei Block 18100656.
  • count=1 : Einen Datenblock lesen.
 sudo dd if=/dev/sda bs=512 skip=18100656 count=1 

Lesen des ersten Festplattenblocks einer Datei

Wie erwartet sehen wir den Platzhaltertext lorem ipsum . Wir lesen den richtigen Block auf der Festplatte.

Jetzt löschen wir die Datei.

 rm dritte-datei.txt 

Wenn wir denselben Festplattenblock lesen, können wir die Daten immer noch sehen.

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

Lesen der Daten aus einem Festplattenblock, der von einer gelöschten Datei verwendet wird

Verlassen Sie sich auch hier nicht darauf, um sicher auf ext4 zu löschen. Es gibt bessere Methoden, um Dateien zu löschen, damit sie nicht wiederhergestellt werden können.

VERWANDT: So löschen Sie Dateien unter Linux sicher

Nützlich, aber mit Vorsicht zu verwenden

Das Festlegen der Attribute von Dateien kann sie unangreifbar für versehentliche Katastrophen machen. Wenn Sie eine Datei nicht löschen oder überschreiben können, ist sie ziemlich sicher.

Vielleicht möchten Sie sie auf Systemdateien anwenden und Ihre Linux-Installation sicherer machen. Systemdateien müssen jedoch regelmäßig ersetzt werden, wenn Updates herausgegeben oder Upgrades angewendet werden. Aus diesem Grund ist es am sichersten, diese Attribute nur für Dateien zu verwenden, die Sie selbst erstellt haben.

VERWANDT: So sichern Sie Ihren Linux-Server mit fail2ban