Dateiberechtigungen

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab tauchen wir in die Welt der Dateiberechtigungen unter Linux ein. Wir werden drei grundlegende Befehle kennenlernen: chown, touch und chmod. Diese Werkzeuge sind entscheidend für die Verwaltung des Zugriffs auf Dateien und Verzeichnisse in einem Linux-System. Am Ende dieses Labs werden Sie sicher darin sein, Dateien zu erstellen, den Dateibesitz zu ändern und Dateiberechtigungen anzupassen. Das Verständnis dieser Befehle ermöglicht es Ihnen, präzise zu steuern, wer Dateien auf Ihrem System lesen, schreiben und ausführen darf.

Erstellen einer neuen Datei

Beginnen wir mit der Erstellung einer neuen Datei mithilfe des Befehls touch. Dieser vielseitige Befehl kann neue, leere Dateien erstellen und die Zeitstempel bestehender Dateien aktualisieren. Man kann es sich wie eine schnelle Methode vorstellen, eine Datei zu "berühren" – entweder um sie ins Leben zu rufen oder um ihren letzten Zugriffszeitpunkt zu aktualisieren.

Stellen Sie zunächst sicher, dass Sie sich im richtigen Verzeichnis befinden. Wir arbeiten in Ihrem project-Verzeichnis:

cd ~/project

Der Befehl cd steht für "change directory" (Verzeichnis wechseln). Das Symbol ~ repräsentiert Ihr Home-Verzeichnis, und /project gibt das Unterverzeichnis an, in das wir wechseln möchten. Falls das project-Verzeichnis nicht existiert, wird dieser Befehl fehlschlagen. Es ist generell eine gute Praxis, das Verzeichnis zuerst zu erstellen, falls Sie unsicher sind. In dieser Lab-Umgebung sollte das Verzeichnis jedoch bereits vorhanden sein.

Erstellen wir nun eine neue Datei namens example.txt:

touch example.txt

Dieser Befehl erstellt eine leere Datei namens example.txt in Ihrem aktuellen Verzeichnis. Um zu bestätigen, dass die Datei erstellt wurde, verwenden Sie den Befehl ls:

ls

ls steht für "list" (auflisten). Er zeigt Ihnen die Dateien und Verzeichnisse an Ihrem aktuellen Standort. Sie sollten example.txt in der Ausgabe sehen. Falls nicht, überprüfen Sie, ob Sie den touch-Befehl korrekt ausgeführt haben und ob Sie sich tatsächlich im Verzeichnis ~/project befinden.

Ändern des Dateibesitzes

Nachdem wir nun eine Datei erstellt haben, lernen wir, wie man deren Besitz ändert. Der Befehl chown ermöglicht es uns, sowohl den Benutzer- als auch den Gruppenbesitz einer Datei zu ändern. Der Besitz bestimmt, wer die Kontrolle über die Datei hat.

Überprüfen wir zunächst den aktuellen Besitz unserer Datei example.txt:

ls -l example.txt

Der Befehl ls -l (Auflistung im Langformat) liefert detaillierte Informationen über die Datei, einschließlich ihrer Berechtigungen, des Eigentümers und der Gruppe. Sie sollten eine Ausgabe ähnlich dieser sehen:

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

Schlüsseln wir diese Ausgabe auf:

  1. -rw-rw-r-- stellt die Dateiberechtigungen dar (wir werden dies in Schritt 4 genauer untersuchen). Das erste Zeichen gibt den Dateityp an (- für eine reguläre Datei, d für ein Verzeichnis usw.). Die restlichen Zeichen repräsentieren Lese-, Schreib- und Ausführungsberechtigungen für den Eigentümer, die Gruppe und andere.
  2. Das erste labex ist der aktuelle Eigentümer der Datei. Dies ist der Benutzername, dem die Datei gehört.
  3. Das zweite labex ist die aktuelle Gruppe der Datei. Eine Gruppe ist eine Ansammlung von Benutzern, die sich Berechtigungen teilen können.
  4. 0 ist die Dateigröße in Bytes. Da die Datei leer ist, ist ihre Größe null.
  5. Jul 29 15:11 ist das Datum und die Uhrzeit der letzten Änderung.
  6. example.txt ist der Dateiname.

Ändern wir nun den Besitz der Datei auf den Benutzer root. root ist das Administratorkonto auf Linux-Systemen und verfügt über spezielle Privilegien.

sudo chown root:root example.txt

Hier ist die Funktionsweise dieses Befehls:

  • sudo führt den Befehl mit Root-Privilegien aus. Sie werden wahrscheinlich nach Ihrem Passwort gefragt. chown erfordert erhöhte Privilegien, da es ein mächtiger Befehl ist, der die Systemsicherheit beeinflussen kann. Ohne sudo erhalten Sie einen Fehler vom Typ "Permission denied" (Zugriff verweigert).
  • chown ist der Befehl zum Ändern des Besitzes.
  • root:root gibt den neuen Eigentümer und die neue Gruppe an (beide auf root gesetzt). Die Syntax lautet Eigentümer:Gruppe.
  • example.txt ist die Zieldatei.

Überprüfen wir die Änderung:

ls -l example.txt

Sie sollten nun sehen, dass sowohl der Eigentümer als auch die Gruppe auf root geändert wurden:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Falls Sie immer noch labex anstelle von root sehen, stellen Sie sicher, dass Sie sudo beim Ausführen des chown-Befehls verwendet und Ihr Passwort korrekt eingegeben haben.

Ändern des Besitzes eines Verzeichnisses

Der Befehl chown kann auch den Besitz ganzer Verzeichnisse und deren Inhalte ändern. Sehen wir uns das in der Praxis an. Dies ist besonders nützlich für die Verwaltung komplexer Verzeichnisstrukturen, bei denen Sie sicherstellen möchten, dass alle Dateien und Unterverzeichnisse denselben Eigentümer haben.

Erstellen wir zunächst ein neues Verzeichnis mit einigen Dateien:

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

Schlüsseln wir diese Befehle auf:

  • mkdir -p new-dir/subdir erstellt das Verzeichnis new-dir und dessen Unterverzeichnis subdir. Die Option -p weist mkdir an, bei Bedarf übergeordnete Verzeichnisse zu erstellen. Ohne -p würde das Erstellen von new-dir/subdir fehlschlagen, falls new-dir noch nicht existiert.
  • echo "Hello, world" > new-dir/file1.txt erstellt eine Datei namens file1.txt im Verzeichnis new-dir und schreibt den Text "Hello, world" hinein. Das Symbol > wird für die Umleitung verwendet; es nimmt die Ausgabe des echo-Befehls und leitet sie in die angegebene Datei um.
  • echo "Another file" > new-dir/subdir/file2.txt erstellt auf ähnliche Weise eine Datei namens file2.txt im Verzeichnis new-dir/subdir und schreibt den Text "Another file" hinein.

Überprüfen wir nun den aktuellen Besitz:

ls -lR new-dir

ls -lR listet den Inhalt von new-dir rekursiv auf. Die Option -R (rekursiv) bewirkt, dass ls alle Dateien und Unterverzeichnisse innerhalb von new-dir sowie deren Inhalte auflistet.

Sie sollten eine Ausgabe wie diese sehen:

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

Dies zeigt, dass das Verzeichnis new-dir, sein Unterverzeichnis subdir sowie die Dateien file1.txt und file2.txt alle labex gehören.

Ändern wir nun den Besitz von new-dir und allen Inhalten auf den Benutzer root:

sudo chown -R root:root new-dir

In diesem Befehl:

  • Die Option -R weist chown an, rekursiv zu arbeiten und den Besitz aller Dateien und Unterverzeichnisse innerhalb von new-dir zu ändern. Dies ist entscheidend; ohne -R würde nur der Besitz des Verzeichnisses new-dir geändert werden, während die Dateien und Unterverzeichnisse darin weiterhin labex gehören würden.

Überprüfen wir die Änderung:

ls -lR new-dir

Sie sollten nun Folgendes sehen:

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

Wie Sie sehen können, wurde der Besitz des Verzeichnisses und aller Inhalte auf root geändert. Dies demonstriert die Leistungsfähigkeit der Option -R für weitreichende Änderungen des Besitzes innerhalb einer Verzeichnisstruktur.

Ändern der Dateiberechtigungen

Unter Linux werden Dateiberechtigungen durch eine Reihe von Buchstaben oder Zahlen dargestellt. Lassen Sie uns untersuchen, wie man diese Berechtigungen liest und ändert. Das Verständnis von Berechtigungen ist unerlässlich, um Ihre Dateien zu sichern und unbefugten Zugriff zu verhindern.

Schauen wir uns zunächst die aktuellen Berechtigungen unserer Datei example.txt an:

ls -l example.txt

Sie sehen möglicherweise etwas wie dies:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Der Teil -rw-rw-r-- repräsentiert die Dateiberechtigungen. Hier kommen die numerische und die symbolische Notation ins Spiel. Schlüsseln wir es auf:

  • Das erste Zeichen (-) zeigt an, dass es sich um eine reguläre Datei handelt. Andere häufige Indikatoren sind d für ein Verzeichnis und l für einen symbolischen Link.
  • Die nächsten drei Zeichen (rw-) repräsentieren die Berechtigungen des Eigentümers (Lesen und Schreiben, aber nicht Ausführen).
    • r steht für Leseberechtigung: Der Eigentümer kann die Datei öffnen und lesen.
    • w steht für Schreibberechtigung: Der Eigentümer kann die Datei ändern.
    • x steht für Ausführungsberechtigung: Der Eigentümer kann die Datei ausführen (falls es sich um ein Programm oder Skript handelt). Ein - bedeutet, dass die Berechtigung verweigert wird.
  • Die nächsten drei (rw-) gelten für die Gruppe. Sie haben die gleiche Bedeutung wie oben, gelten aber für Mitglieder der Dateigruppe.
  • Die letzten drei (r--) gelten für andere (alle anderen). Sie haben ebenfalls die gleiche Bedeutung, gelten aber für Benutzer, die weder Eigentümer noch Mitglieder der Dateigruppe sind.

Ändern wir nun diese Berechtigungen mithilfe des Befehls chmod. chmod steht für "change mode" (Modus ändern) und ermöglicht es Ihnen, diese Berechtigungen anzupassen. Wir beginnen mit der numerischen Notation.

sudo chmod 700 example.txt

In diesem Befehl:

  • 700 ist eine numerische Darstellung der Berechtigungen:
    • Die erste Ziffer (7) repräsentiert die Berechtigungen des Eigentümers.
    • Die zweite Ziffer (0) repräsentiert die Berechtigungen der Gruppe.
    • Die dritte Ziffer (0) repräsentiert die Berechtigungen der anderen.

Jede Ziffer ist eine Zahl von 0 bis 7, die durch Addition der Werte für Lesen (4), Schreiben (2) und Ausführen (1) berechnet wird:

  • 4: Leseberechtigung
  • 2: Schreibberechtigung
  • 1: Ausführungsberechtigung
  • 0: Keine Berechtigung

Also gibt 7 (erste Ziffer) dem Eigentümer Lese- (4), Schreib- (2) und Ausführungsberechtigung (1): 4+2+1=7. 0 (zweite Ziffer) gibt der Gruppe keine Berechtigungen (0+0+0=0). 0 (dritte Ziffer) gibt anderen keine Berechtigungen (0+0+0=0).

Daher bedeutet 700: Eigentümer: Lesen, Schreiben, Ausführen. Gruppe: keine. Andere: keine.

Überprüfen wir die Änderung:

ls -l example.txt

Sie sollten nun Folgendes sehen:

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

Der Eigentümer hat nun rwx-Berechtigungen (Lesen, Schreiben und Ausführen), während die Gruppe und andere keine Berechtigungen haben.

Ändern der Berechtigungen eines Verzeichnisses

Das Ändern von Berechtigungen für Verzeichnisse funktioniert ähnlich wie bei Dateien. Üben wir dies, indem wir ein neues Verzeichnis erstellen und dessen Berechtigungen ändern. Verzeichnisberechtigungen steuern, wer den Inhalt des Verzeichnisses auflisten, neue Dateien darin erstellen und auf bereits vorhandene Dateien zugreifen darf.

Erstellen wir zunächst ein neues Verzeichnis und setzen einige nicht standardmäßige Berechtigungen:

mkdir ~/test-dir
chmod 700 ~/test-dir

Überprüfen wir nun die aktuellen Berechtigungen:

ls -ld ~/test-dir

Die Option -d in ls -l weist ls an, das Verzeichnis selbst aufzulisten, anstatt dessen Inhalt. Ohne -d würde ls die Dateien und Unterverzeichnisse innerhalb von test-dir auflisten, welches momentan leer ist. Sie sollten Folgendes sehen:

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Das d am Anfang zeigt an, dass es sich um ein Verzeichnis handelt. rwx------ zeigt an, dass der Eigentümer Lese-, Schreib- und Ausführungsberechtigungen hat, während Gruppe und andere keine Berechtigungen haben. Für Verzeichnisse gilt:

  • Leseberechtigung (r) erlaubt es Ihnen, den Inhalt des Verzeichnisses mit ls aufzulisten.
  • Schreibberechtigung (w) erlaubt es Ihnen, neue Dateien und Unterverzeichnisse innerhalb des Verzeichnisses zu erstellen.
  • Ausführungsberechtigung (x) erlaubt es Ihnen, auf Dateien und Unterverzeichnisse innerhalb des Verzeichnisses zuzugreifen (d. h. mit cd hineinzuwechseln).

Ändern wir nun die Berechtigungen:

chmod -R 755 ~/test-dir

In diesem Befehl:

  • -R wendet die Änderung rekursiv auf alle Dateien und Unterverzeichnisse an (obwohl unser Verzeichnis in diesem Fall leer ist). Es ist eine gute Praxis, dies bei Verzeichnissen einzubeziehen, selbst wenn sie derzeit leer sind, falls Sie später Dateien hinzufügen.
  • 755 gibt dem Eigentümer Lese-, Schreib- und Ausführungsberechtigungen sowie der Gruppe und anderen Lese- und Ausführungsberechtigungen.

Schlüsseln wir 755 auf:

  • Eigentümer (7): Lesen (4) + Schreiben (2) + Ausführen (1) = 7
  • Gruppe (5): Lesen (4) + Ausführen (1) = 5
  • Andere (5): Lesen (4) + Ausführen (1) = 5

Überprüfen wir die Änderung:

ls -ld ~/test-dir

Sie sollten nun Folgendes sehen:

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Dies zeigt deutlich die Änderung der Berechtigungen: von nur dem Eigentümer mit Zugriff (700) hin zu vollem Zugriff für den Eigentümer, während andere lesen und ausführen können (755). Jetzt kann jeder den Inhalt von test-dir auflisten und auf Dateien darin zugreifen, aber nur der Eigentümer kann neue Dateien erstellen oder bestehende ändern.

Verwendung der symbolischen Notation für Berechtigungen

Während die numerische Notation prägnant ist, kann die symbolische Notation intuitiver sein, insbesondere wenn Sie nur eine einzelne Berechtigung ändern möchten. Die symbolische Notation verwendet Buchstaben, um Benutzer, Gruppe und andere darzustellen, sowie Operatoren, um Berechtigungen hinzuzufügen oder zu entfernen.

In diesem Schritt erstellen Sie ein kleines Shell-Skript und fügen ihm dann die Ausführungsberechtigung hinzu.

Erstellen wir zunächst eine neue Skriptdatei mit etwas Inhalt:

cd ~/project
echo '#!/bin/bash' > script.sh
echo 'echo "Hello, World"' >> script.sh

Diese Befehle bewirken zwei Dinge:

  • Der erste echo-Befehl erstellt script.sh und schreibt die erste Zeile #!/bin/bash hinein. Diese Zeile wird als Shebang bezeichnet und weist Linux an, das Skript mit Bash auszuführen.
  • Der zweite echo-Befehl fügt mit >> eine neue Zeile am Ende der Datei hinzu. Er schreibt echo "Hello, World", was Hello, World ausgibt, wenn das Skript ausgeführt wird.

Sie können bestätigen, dass die Datei nun zwei separate Zeilen enthält, mit:

cat script.sh

Sie sollten Folgendes sehen:

#!/bin/bash
echo "Hello, World"

Überprüfen wir nun die anfänglichen Berechtigungen:

ls -l script.sh

Sie sollten etwa Folgendes sehen:

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Wie Sie sehen, hat das Skript anfangs nur Lese- und Schreibberechtigungen für den Eigentümer und die Gruppe sowie Leseberechtigung für andere. Es hat keine Ausführungsberechtigung, die erforderlich ist, um es als Programm auszuführen.

Versuchen wir, das Skript auszuführen:

./script.sh

Sie sollten einen Fehler vom Typ "Permission denied" erhalten, da das Skript noch keine Ausführungsberechtigungen hat. Der Teil ./ weist die Shell an, das Skript im aktuellen Verzeichnis auszuführen.

Fügen wir nun die Ausführungsberechtigung für den Eigentümer mithilfe der symbolischen Notation hinzu:

chmod u+x script.sh

In diesem Befehl:

  • u bezieht sich auf den Benutzer (Eigentümer). Andere Optionen sind g für Gruppe, o für andere und a für alle (Benutzer, Gruppe und andere).
  • +x fügt die Ausführungsberechtigung hinzu. Das Symbol + fügt eine Berechtigung hinzu, während das Symbol - eine Berechtigung entfernt.

Also bedeutet u+x: "Füge Ausführungsberechtigung für den Eigentümer hinzu."

Überprüfen wir die Änderung:

ls -l script.sh

Sie sollten nun Folgendes sehen:

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Der Eigentümer hat nun rwx-Berechtigungen (Lesen, Schreiben und Ausführen).

Versuchen wir nun erneut, das Skript auszuführen:

./script.sh

Diesmal sollten Sie die Ausgabe sehen:

Hello, World

Dieses Beispiel demonstriert deutlich, warum wir Skripten Ausführungsberechtigungen hinzufügen müssen und was der Unterschied vor und nach dem Hinzufügen dieser Berechtigungen ist. Die symbolische Notation macht es einfach, spezifische Berechtigungen zu ändern, ohne die gesamte numerische Darstellung neu berechnen zu müssen.

Zusammenfassung

In diesem Lab haben wir grundlegende Linux-Befehle zur Verwaltung von Dateiberechtigungen kennengelernt:

  1. Wir haben touch verwendet, um neue Dateien zu erstellen und bestehende zu aktualisieren.
  2. Wir haben gelernt, wie man chown verwendet, um den Besitz von Dateien und Verzeichnissen zu ändern, einschließlich rekursiver Änderungen für ganze Verzeichnisstrukturen.
  3. Wir haben die Verwendung von chmod mit sowohl numerischer als auch symbolischer Notation geübt, um Dateiberechtigungen zu ändern, und dabei die verschiedenen Berechtigungsebenen für Eigentümer, Gruppe und andere verstanden.
  4. Wir haben praktische Beispiele dafür gesehen, warum Berechtigungen wichtig sind, etwa die Notwendigkeit von Ausführungsberechtigungen zum Starten von Skripten.
  5. Wir haben die Unterschiede zwischen numerischer und symbolischer Notation für chmod geklärt und wann welche Notation angemessener ist.

Diese Befehle sind entscheidend für die Aufrechterhaltung der Sicherheit und die Steuerung des Zugriffs in Linux-Systemen. Denken Sie daran, beim Ändern von Berechtigungen immer vorsichtig zu sein, insbesondere bei der Verwendung von sudo, da falsche Änderungen erhebliche Auswirkungen auf die Systemsicherheit und Funktionalität haben können. Überprüfen Sie Ihre Befehle immer doppelt, bevor Sie sie ausführen, und verstehen Sie die Auswirkungen der Änderungen, die Sie vornehmen.