Dateien können auch Attribute haben, die anders ausgedrückt werden als die Berechtigungen, die wir bisher gesehen haben. Ein Beispiel dafür ist, eine Datei unveränderlich zu machen (ein schickes Wort, was bedeutet, dass sie nicht geändert werden kann). Eine unveränderliche Datei hat immer noch normale Eigentums- und Gruppen- und RWX-Berechtigungen, erlaubt dem Benutzer jedoch nicht, sie zu ändern, selbst wenn sie die Schreibberechtigung enthält. Eine weitere Eigenschaft davon ist, dass die Datei nicht umbenannt werden kann.
In diesem Beitrag werden wir diskutieren, wie man den Befehl chattr verwendet, um Dateiattribute in Linux zu ändern und die wichtigen Dateien unveränderlich zu machen. chattr steht für Change Attribute. Der Chattr-Befehl ist ein sehr nützliches Tool in Linux und wird verwendet, um Dateiattribute zu ändern. Unveränderlich bedeutet, sobald ich das Attribut für eine Datei mit dem Chattr-Befehl festgelegt habe, können Sie die Datei nicht verschieben, löschen, einen Link zu der Datei erstellen oder die Datei bearbeiten, selbst wenn Sie vollen Zugriff auf diese Datei haben. Root-Benutzer können auch keine Änderungen an dieser Datei vornehmen, bis das Attribut angewendet wird. Sie können den Chattr-Befehl verwenden, um die Attribute der Datei zu setzen und zu löschen. Root-Benutzer haben nur Zugriff auf das Setzen oder Aufheben von Attributen von Dateien und Verzeichnissen mit dem Chattr-Befehl.
Schauen wir uns also einige Beispiele für den Chattr-Befehl zum Ändern von Dateiattributen an:
Setzen Sie das „i“-Attribut auf eine Datei
Angenommen, ich habe eine Datei namens geek.txt, auf die jeder zugreifen kann. Das bedeutet, dass jeder Benutzer kommen und diese Datei löschen, verschieben oder bearbeiten kann. Sehen Sie sich die Ausgabe unten an.
# ls -l geek.txt -rwxrwxrwx. 1 root root 0 Apr 24 03:59 geek.txt # Everyone has full access to "geek.txt"
# rm geek.txt # I am able to delete the file rm: remove regular empty file `geek.txt'? y
Lassen Sie uns nun das Attribut mit dem Befehl chattr auf die Datei geek.txt setzen. Um das Attribut zu setzen, müssen wir das „+“-Zeichen verwenden und um das Attribut zu deaktivieren, müssen wir das „–“-Zeichen verwenden.
# chattr +i geek.txt # Setting Attribute to a file
Wo,
ich – Steht für Unveränderlich.
Sie können auch -V verwenden Option, um die ausführliche Ausgabe zu überprüfen, während das Attribut auf eine Datei gesetzt wird.
# chattr -V +i geek.txt # Setting attribute to a file with -V chattr 1.41.12 (17-May-2010) Flags of geek.txt set as ----i--------e-
Also setzen wir das Attribut auf die Datei geek.txt. Um dasselbe zu bestätigen, können Sie den Befehl lsattr verwenden. Siehe die Beispielausgabe unten. Sie werden ein i (hervorgehoben in roter Farbe) im Berechtigungsabschnitt der Datei bemerken.
# lsattr geek.txt # confirm if attribute set or not ----i--------e- geek.txt
Versuchen wir nun, die Berechtigung der Datei zu entfernen, zu löschen, zu verschieben und zu ändern, und ich bin sicher, dass Sie nichts davon tun können.
1. Entfernen Sie die Datei:
# rm geek.txt # Removing the File rm: remove regular empty file `geek.txt'? y rm: cannot remove `geek.txt': Operation not permitted
# You can also try to remove the file forcefully. # rm -rf geek.txt # Removing the file forcefully rm: cannot remove `geek.txt': Operation not permitted
2. Verschieben Sie die Datei:
# mv geek.txt test.txt # Move the file mv: cannot move `geek.txt' to `test.txt': Operation not permitted
3. Bearbeiten Sie die Datei:
# cat >> geek.txt bash: geek.txt: Permission denied
4. Berechtigung der Datei ändern:
# chmod 755 geek.txt chmod: changing permissions of `geek.txt': Operation not permitted
Wie Sie an allen obigen Beispielen sehen können, können wir an dieser Datei keine Änderungen vornehmen.
Entfernen des Attributs -i (unveränderlich) aus den Dateien
Verwenden Sie den folgenden Befehl, um das „i“-Attribut zu entfernen.
# chattr -i geek.txt # Unset "i" attribute
Nach dem Entfernen des Attributs sehen Sie, dass der Berechtigungsabschnitt leer wird.
# lsattr geek.txt --------------- geek.txt
Ein Verzeichnis mit chattr unveränderlich machen
Versuchen wir nun, ein Verzeichnis zu sichern, indem wir sein Attribut rekursiv mit dem Befehl chattr ändern. Hier habe ich ein Verzeichnis namens data und jeder hat rekursiv vollen Zugriff auf dieses Verzeichnis. Sehen Sie sich die Beispielausgabe unten an.
# mkdir data # chmod -R 777 data/ # ls -l total 4 drwxrwxrwx. 2 root root 4096 Apr 24 04:25 data
Setzen Sie nun das Attribut auf dieses Verzeichnis.
# chattr +i data/ # lsattr ----i--------e- ./data
Sie können das Attribut auch rekursiv setzen, indem Sie die Option -R mit chattr.
verwenden# chattr -R +i data/
Nachdem Sie das Attribut auf das Verzeichnis gesetzt haben, versuchen Sie nun, eine Datei zu löschen, zu verschieben oder zu erstellen. Ich bin sicher, dass Sie dies nicht tun dürfen. Sehen Sie sich die Beispielausgabe unten an.
# rmdir data/ # Deleting the Directory rmdir: failed to remove `data/': Operation not permitted
# rm -rf data/ # Deletiing the Directory Forcefully rm: cannot remove `data': Operation not permitted
# mv data/ mydata # Moving the Directory mv: cannot move `data/' to `mydata': Operation not permitted
# cd data/ # cat > test.txt # Creating a File in the directory bash: test.txt: Permission denied
Wo können wir den Chattr-Befehl tatsächlich verwenden?
Nehmen wir ein Beispiel:Als Linux-Administrator möchten Sie natürlich nicht, dass jemand auf Ihre Konfigurationsdateien zugreift, Änderungen an Dateien vornimmt oder Konfigurationsdateien entfernt oder sie missbraucht. Es liegt in Ihrer Verantwortung, es sicher zu machen und vor falschen Händen zu schützen, die nicht berechtigt sind, darauf zuzugreifen. Wir können unser gesamtes Konfigurationsmaterial mit dem Chattr-Befehl sichern.
Unter Linux werden alle Konfigurationsdateien im Verzeichnis /etc gespeichert. Wenn wir das Attribut auf das /etc-Verzeichnis setzen, kann niemand auf Ihre Konfigurationen zugreifen. Also lass uns das tun.
# chattr +i /etc/ # Setting attribute to /etc directory
Versuchen wir nun, einige Aufgaben zu erledigen:
Beispiele:1 Erstellen Sie eine Gruppe
# groupadd g5 groupadd: cannot lock /etc/group; try again later.
Beispiel:2 Legen Sie ein Passwort für einen beliebigen Benutzer fest
# passwd michelle Changing password for user michelle. New password: Retype new password: passwd: Authentication token manipulation error
Beispiel:3 Erstellen Sie einen neuen Benutzer
# useradd thegeekdiary useradd: cannot lock /etc/passwd; try again later.
Wie Sie oben sehen können, können wir einige Aufgaben nicht ausführen, z. B. einen neuen Benutzer erstellen, ein Passwort für einen Benutzer festlegen oder eine neue Gruppe erstellen. Wir können nicht alle diese Aufgaben erledigen, denn wenn wir einen neuen Benutzer erstellen oder ein Passwort für einen Benutzer festlegen, werden die Dateien /etc/passwd und /etc/shadow aktualisiert, was hier nicht möglich ist, da wir das Attribut für das vollständige /etc-Verzeichnis festlegen.
Hinweis :Hier setze ich Attribute auf das komplette /etc-Verzeichnis, um es Ihnen nur als Beispiel zu erklären. Sie können Dateiattribute jedoch nach Bedarf festlegen, wenn Sie beispielsweise nur die Benutzer- und Gruppenverwaltung steuern möchten, müssen Sie das Attribut nicht für das vollständige /etc-Verzeichnis festlegen, sondern nur für /etc/passwd und /etc/shadow und für Gruppen Attribut für /etc/group setzen. Wenn Sie die Dateisystemtabelle steuern möchten, setzen Sie das Attribut für /etc/fstab und so weiter.Nehmen wir nun ein weiteres Beispiel und hängen ein Dateisystem aus. Sehen Sie sich die Beispielausgabe unten an.
Beispiel:4 Unmounten eines Dateisystems
# umount /media/ # Unmounting a File System can't create lock file /etc/mtab~2762: Permission denied (use -n flag to override)
Wir können auch kein Dateisystem aushängen. Um alle oben genannten Aufgaben zu erledigen, müssen wir Attribute zurücksetzen, die wir für das /etc-Verzeichnis angewendet haben.
Attribut mit chattr-Befehl zurücksetzen
Wir können das Attribut zurücksetzen, indem wir den Chattr-Befehl mit der Option -i verwenden.
# chattr -Vi /etc/ # Removing Attributes from directory chattr 1.41.12 (17-May-2010) Flags of /etc/ set as ----------I--e-
Ermöglichen Sie das Anhängen einer Datei mit dem Chattr-Befehl
Sie können einer Datei erlauben, Daten mit dem Befehl chattr mit der Option +a anzuhängen. Durch Anwenden dieses Attributs dürfen Sie nur Daten in diese Datei schreiben und nicht löschen und verschieben.
Hier erlaube ich Benutzern, Daten an die Datei thegeekdiary.txt anzuhängen.
# chattr +a thegeekdiary.txt # Setting +a Attribute
Verwenden Sie den folgenden Befehl, um das angewendete Attribut zu überprüfen. Sie werden einen Berechtigungsabschnitt bemerken.
# lsattr thegeekdiary.txt -----a-------e- thegeekdiary.txt
Wie Sie unten sehen können, können wir den Inhalt der Datei sehen.
# cat thegeekdiary.txt Welcome to thegeekdiary.com
Versuchen wir nun, einige Daten in die Datei einzufügen.
# cat >> thegeekdiary.txt # Writing some data Here you will get Linux Tutorials
# Bestätigen Sie nun dasselbe mit dem cat-Befehl
# cat thegeekdiary.txt Welcome to thegeekdiary.com Here you will get Linux Tutorials
So können wir erfolgreich Daten in thegeekdiary.txt anhängen. Versuchen wir nun, die Datei zu löschen.
# rm thegeekdiary.txt # Deleting the File rm: remove regular file `thegeekdiary.txt'? y rm: cannot remove `thegeekdiary.txt': Operation not permitted
# rm -rf thegeekdiary.txt # Deleting the File Forcefully rm: cannot remove `thegeekdiary.txt': Operation not permitted
Für weitere Informationen zum Chattr-Befehl können Sie die folgenden Befehle auf Ihrem Linux-System verwenden.
# man chattr # man lsattr
Sehen Sie sich einige nützliche Chattr-Befehlsoptionen an:
- +i – Eine Datei mit dem Attribut +i kann nicht gelöscht, verschoben oder umbenannt werden. kurz gesagt kann nicht geändert werden.
- -ich – Diese Option ermöglicht das Entfernen des i-Attributs aus der Datei.
- -V – Um die Verbose-Ausgabe zu sehen
- -a – Durch die Verwendung dieses Attributs können nur Daten an eine Datei angehängt und nicht gelöscht oder verschoben werden.