Chattr (Attribut ändern) ist ein Befehlszeilen-Linux-Dienstprogramm, das zum Ändern der Dateiattribute verwendet wird. Es kann bestimmte Attribute für eine Datei im Linux-System festlegen und zurücksetzen, um ein versehentliches Löschen oder Ändern wichtiger Dateien und Ordner zu verhindern, selbst wenn Sie als Root-Benutzer angemeldet sind.
Mit dem Befehl chattr machen Sie die Datei also unveränderlich. Mit anderen Worten bedeutet dies, dass es verwendet wird, um das versehentliche Löschen von Dateien und Verzeichnissen zu stoppen. Sie können die über das Chattr-Attribut gesicherten Dateien nicht löschen, obwohl Sie die volle Berechtigung für Dateien haben.
Dies ist sehr nützlich in Systemdateien wie shadow- und passwd-Dateien, die alle Benutzerinformationen und Passwörter enthalten. Diese Attribute können nur für Dateien und Verzeichnisse gesetzt werden, die sich in einem ext2-, ext3- oder ext4-Dateisystem befinden.
Syntax des Chattr-Befehls und Verwendung
Unten ist die Syntax für den Chattr-Befehl:
chattr [ -RVf ] [ -v version ] [ mode ] files...
Dateiattribute, die wir mit dem Chattr-Befehl verwenden können:
a
- Die Datei kann nur im Append-Modus zum Schreiben geöffnet werden.A
- Der Zeiteintrag der Datei wird nicht geändert. Dies vermeidet eine gewisse Menge an Festplatten-I/O für Laptop-Systeme.c
- Die Datei wird vom Kernel automatisch auf der Festplatte komprimiert. Ein Lesevorgang aus dieser Datei gibt unkomprimierte Daten zurück. Ein Schreibvorgang in diese Datei komprimiert Daten, bevor sie auf der Festplatte gespeichert werden.C
- Die Datei unterliegt keinen Copy-on-Write-Updates. Dieses Flag wird nur auf Dateisystemen unterstützt, die Copy-on-Write ausführen. Wenn das 'C'-Flag auf ein Verzeichnis gesetzt ist, hat es keine Auswirkung auf das Verzeichnisd
- Die Datei ist kein Backup-Kandidat, wenn das Dump-Programm ausgeführt wird.D
- Wenn ein Verzeichnis geändert wird, werden die Änderungen synchron auf die Platte geschrieben; dies entspricht der Einhängeoption 'dirsync', die auf eine Teilmenge der Dateien angewendet wird.i
- Datei kann nicht geändert, gelöscht oder umbenannt werden, es kann keine Verknüpfung zu dieser Datei hergestellt werden und es können keine Daten in die Datei geschrieben werden. Nur der Superuser kann dieses Attribut setzen oder löschen.j
- Alle Daten der Datei werden in das ext3- oder ext4-Journal geschrieben, bevor sie in die Datei selbst geschrieben werden,s
- Wenn die Datei gelöscht wird, werden ihre Blöcke genullt und auf die Festplatte zurückgeschrieben.S
- wenn die Datei geändert wird, werden die Änderungen synchron auf die Platte geschrieben; dies entspricht der Einhängeoption 'sync', die auf eine Teilmenge der Dateien angewendet wird.t
- Die Datei hat kein partielles Blockfragment am Ende der Datei, die mit anderen Dateien zusammengeführt wirdT
- Das Verzeichnis wird für die Zwecke des Orlov-Blockzuordners als die Spitze der Verzeichnishierarchien betrachtet.u
- sorgt dafür, dass beim Löschen einer Datei deren Inhalt gespeichert wird. Dadurch kann der Benutzer die Wiederherstellung verlangen
1) So setzen Sie das Dateiattribut (Setze unveränderliches Bit)
Um ein Dateiattribut festzulegen, verwenden wir den Chattr-Befehl mit +
Operator gefolgt vom Attributnamen.
Lassen Sie uns anhand von Beispielen überprüfen, wie Sie ein unveränderliches Attribut für eine Datei festlegen. Nur root oder Benutzer mit sudo-Berechtigung können das unveränderliche Flag für eine Datei setzen und entfernen.
Eine Datei mit einem unveränderlichen Attribut:
- Kann nicht geändert, gelöscht oder umbenannt werden
- Kein weicher oder fester Link kann von irgendjemandem erstellt werden, einschließlich des Root-Benutzers.
- Es können keine Daten in die Datei geschrieben werden
Lassen Sie uns eine leere Datei mit dem Touch-Befehl wie folgt erstellen:
$ touch file1
Sehen wir uns nun an, wie Attribute der Datei mit lsattr
aufgelistet werden Befehl:
$ lsattr
-------------e-- ./nagios-cookbook-tutorial
-------------e-- ./chefdk_1.3.40-1_amd64.deb
-------------e-- ./file1
Fügen Sie der Datei mit dem Echo-Befehl etwas Inhalt hinzu:
$ echo "Test of i attribute" > file1
$ cat file1
Test of i attribute
Jetzt können wir das unveränderliche Attribut mit +i
setzen auf die Datei (Datei1).
$ sudo chattr +i file1
$ lsattr
-------------e-- ./nagios-cookbook-tutorial
-------------e-- ./chefdk_1.3.40-1_amd64.deb
----i--------e-- ./file1
In den folgenden Befehlen werden wir versuchen, sowohl den normalen Benutzer als auch den Sudo-Benutzer (root) anzuhängen und zu löschen:
$ echo "Try to edit after set i attribute" >> file1
-bash: file1: Permission denied
$ sudo echo "Try to edit after set i attribute" >> file1
-bash: file1: Permission denied
$ rm -f file1
rm: cannot remove 'file1': Operation not permitted
$ sudo rm -f file1
rm: cannot remove 'file1': Operation not permitted
Wir können beobachten, dass vor allem Operationen nicht erlaubt sind.
Hinweis: Sie können wichtige Dateien als /etc/passwd
schützen oder /etc/shadow
, schützt sie vor versehentlichem Entfernen oder Manipulieren und deaktiviert die Erstellung von Benutzerkonten. Aber wenn Sie versuchen, einen neuen Systembenutzer zu erstellen, erhalten Sie eine Fehlermeldung, die besagt, dass /etc/passwd nicht geöffnet werden kann. Wenn Sie versuchen, das Passwort zu ändern, werden Sie aufgefordert, ein neues Passwort einzugeben, aber wenn Sie sich das nächste Mal anmelden, scheint das neue Passwort nicht gültig zu sein, Sie müssen das alte Passwort verwenden, um sich anzumelden.
2) So entfernen Sie Attribute (nicht gesetzt) von Dateien
Um ein Attribut aus der Datei zu entfernen, müssen wir -
verwenden Operator gefolgt vom Attributnamen.
Lassen Sie uns im folgenden Beispiel das unveränderliche Attribut der Datei (Datei1) zurücksetzen.
$ sudo chattr -i file1
$ lsattr file1
-------------e-- ./file1
Sie sollten jetzt in der Lage sein, alle normalen Operationen mit der Datei durchzuführen.
3) Wie man Verzeichnisse mit dem 'i'-Attribut sichert
Um das Verzeichnis zu sichern, müssen wir das Attribut rekursiv (-R) mit +
setzen Betreiber.
Der folgende Befehl setzt das unveränderliche Bit im Verzeichnis ('linoxide') rekursiv:
$ sudo chattr -R +i linoxide/
$ lsattr -d linoxide
----i--------e-- linoxide/
Zum Deaktivieren müssen Sie -
verwenden Operator gefolgt von i
Attribut.
$ sudo chattr -R -i linoxide/
4) Daten in der Datei anhängen, ohne bestehende Daten zu ändern
Mit dem a
ist es möglich, jedem zu erlauben, einfach Daten an eine Datei anzuhängen, ohne bereits eingegebene Daten zu ändern oder zu modifizieren Attribut.
Das bedeutet, dass Sie Inhalte nur zur aktuellen Datei hinzufügen können, ohne bereits vorhandene Daten zu ändern.
Die folgenden Beispiele setzen das Attribut append an die Datei (file2).
$ sudo chattr +a file2
6) Wie man Dateiattribute auflistet
Um die aktuellen Attribute von Dateien oder Verzeichnissen aufzulisten, müssen wir den Befehl lsattr verwenden. Der folgende Befehl listet Dateiattribute für alle Dateien und Ordner im aktuellen Verzeichnis auf:
$ lsattr
-------------e-- ./coreutils-8.22-18.el7.x86_64.rpm
-------------e-- ./pac
-------------e-- ./utils
-------------e-- ./linox
Sie können das Dateiattribut einer Single mit dem folgenden Befehl überprüfen:
$ lsattr coreutils-8.22-18.el7.x86_64.rpm
-------------e-- coreutils-8.22-18.el7.x86_64.rpm
Um die Attribute eines Verzeichnisses zu prüfen, verwenden Sie -d
Möglichkeit
$ lsattr -d test
-------------e-- test/
Schlussfolgerung
Jetzt wissen wir, wie wir unsere Dateien und Ordner mit dem Chattr-Befehl in Linux schützen können. Ich hoffe, dass Ihnen das Lesen dieses Tutorials gefallen hat, und hinterlassen Sie bitte Ihre Vorschläge im Kommentarbereich unten. Weitere Informationen finden Sie unter man chattr.