Dateizugriff in Red Hat Enterprise Linux steuern

Red Hat Enterprise LinuxRed Hat Enterprise LinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labor erhalten Sie ein umfassendes Verständnis der Verwaltung von Linux-Dateisystemberechtigungen, eine entscheidende Fähigkeit für jeden RHEL-Administrator. Sie lernen, Dateiberechtigungen mit ls -l zu interpretieren, sie mit chmod sowohl im symbolischen als auch im Oktalmodus zu ändern und die Dateibesitzer mit chown zu ändern. Darüber hinaus werden Sie spezielle Berechtigungen wie SUID, SGID und das Sticky Bit erkunden und anwenden und Standardberechtigungen effektiv mit umask konfigurieren. Diese praktische Erfahrung vermittelt Ihnen das notwendige Wissen, um den Zugriff auf Dateien und Verzeichnisse in einer Linux-Umgebung zu sichern und zu kontrollieren.

Interpretation von Linux-Dateisystemberechtigungen mit ls -l

In diesem Schritt lernen Sie, wie Sie Linux-Dateisystemberechtigungen mithilfe des Befehls ls -l interpretieren. Das Verständnis von Dateiberechtigungen ist entscheidend für die Verwaltung des Zugriffs auf Dateien und Verzeichnisse in einer Linux-Umgebung.

Jede Datei und jedes Verzeichnis in Linux hat zugeordnete Berechtigungen, die bestimmen, wer sie lesen, schreiben oder ausführen kann. Diese Berechtigungen sind in drei Kategorien unterteilt:

  • Benutzer (Eigentümer): Die Berechtigungen für den Eigentümer der Datei.
  • Gruppe: Die Berechtigungen für Benutzer, die Mitglieder der Gruppe der Datei sind.
  • Andere: Die Berechtigungen für alle anderen Benutzer im System.

Jede Kategorie kann drei Arten von Berechtigungen haben:

  • Lesen (r): Ermöglicht das Anzeigen des Inhalts einer Datei oder die Auflistung des Inhalts eines Verzeichnisses.
  • Schreiben (w): Ermöglicht die Änderung des Inhalts einer Datei oder das Erstellen/Löschen von Dateien innerhalb eines Verzeichnisses.
  • Ausführen (x): Ermöglicht das Ausführen einer ausführbaren Datei oder das Betreten eines Verzeichnisses.

Beginnen wir mit dem Erstellen eines neuen Verzeichnisses und einer Datei in Ihrem Verzeichnis ~/project, um die Standardberechtigungen zu beobachten.

Erstellen Sie zunächst ein Verzeichnis namens my_files:

mkdir ~/project/my_files

Als Nächstes erstellen Sie eine leere Datei namens document.txt im Verzeichnis my_files:

touch ~/project/my_files/document.txt

Verwenden Sie nun den Befehl ls -l, um die detaillierten Berechtigungen der Datei document.txt anzuzeigen. Der Befehl ls -l liefert eine ausführliche Ausgabe, einschließlich Dateiberechtigungen, Besitzer, Gruppe, Größe und Änderungsdatum.

ls -l ~/project/my_files/document.txt

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

-rw-rw-r-- 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Lassen Sie uns den ersten Teil der Ausgabe, -rw-rw-r--., aufschlüsseln:

  • Das erste Zeichen (-) gibt den Dateityp an.
    • - bedeutet, dass es sich um eine reguläre Datei handelt.
    • d bedeutet, dass es sich um ein Verzeichnis handelt.
    • l bedeutet, dass es sich um einen symbolischen Link handelt.
  • Die nächsten neun Zeichen sind in drei Dreiergruppen unterteilt:
    • rw-: Berechtigungen für den Eigentümer (labex). r (Lesen), w (Schreiben), - (keine Ausführung).
    • rw-: Berechtigungen für die Gruppe (labex). r (Lesen), w (Schreiben), - (keine Ausführung).
    • r--: Berechtigungen für Andere. r (Lesen), - (kein Schreiben), - (keine Ausführung).

Dies bedeutet, dass der Benutzer labex (Eigentümer) und Benutzer in der Gruppe labex document.txt lesen und schreiben können, während alle anderen Benutzer sie nur lesen können.

Betrachten wir nun die Berechtigungen des Verzeichnisses my_files selbst. Wenn Sie ls -l auf einem Verzeichnis anwenden, werden die Inhalte des Verzeichnisses aufgelistet. Um die Berechtigungen des Verzeichnisses selbst anzuzeigen, benötigen Sie die Option -d mit ls -l.

ls -ld ~/project/my_files

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

drwxrwxr-x 2 labex labex 4096 Jun  6 17:36 /home/labex/project/my_files

Lassen Sie uns die Berechtigungen drwxrwxr-x interpretieren:

  • Das erste Zeichen (d) gibt an, dass es sich um ein Verzeichnis handelt.
  • rwx: Berechtigungen für den Eigentümer (labex). r (Lesen), w (Schreiben), x (Ausführen).
  • rwx: Berechtigungen für die Gruppe (labex). r (Lesen), w (Schreiben), x (Ausführen).
  • r-x: Berechtigungen für Andere. r (Lesen), - (kein Schreiben), x (Ausführen).

Für Verzeichnisse:

  • r (Lesen) erlaubt die Auflistung der Inhalte des Verzeichnisses.
  • w (Schreiben) erlaubt das Erstellen, Löschen oder Umbenennen von Dateien innerhalb des Verzeichnisses.
  • x (Ausführen) erlaubt das Betreten des Verzeichnisses (mit cd) und den Zugriff auf seine Dateien und Unterverzeichnisse.

Dies bedeutet, dass der Benutzer labex und Benutzer in der Gruppe labex die Dateien im Verzeichnis my_files auflisten, erstellen/löschen können und das Verzeichnis betreten können. Andere Benutzer können das Verzeichnis auflisten und betreten, aber keine Dateien darin erstellen oder löschen.

Ändern von Dateiberechtigungen mit chmod (Symbolischer Modus)

In diesem Schritt lernen Sie, wie Sie Dateiberechtigungen mit dem Befehl chmod im symbolischen Modus ändern. Der symbolische Modus verwendet Buchstaben und Symbole, um Änderungsanweisungen für Berechtigungen darzustellen, wodurch es intuitiv ist, bestimmte Berechtigungen hinzuzufügen, zu entfernen oder festzulegen.

Der Befehl chmod im symbolischen Modus folgt der Syntax: chmod WER OPERATION BERECHTIGUNGEN DATEI.

  • WER: Gibt an, auf wen sich die Berechtigungänderung bezieht.
    • u: Benutzer (Eigentümer)
    • g: Gruppe
    • o: Andere
    • a: Alle (Benutzer, Gruppe und Andere)
  • OPERATION: Gibt an, wie die Berechtigungen geändert werden sollen.
    • +: Berechtigungen hinzufügen.
    • -: Berechtigungen entfernen.
    • =: Berechtigungen genau wie angegeben festlegen und bestehende überschreiben.
  • BERECHTIGUNGEN: Gibt den Berechtigungstyp an.
    • r: Lesen
    • w: Schreiben
    • x: Ausführen

Wir arbeiten weiter mit der Datei ~/project/my_files/document.txt und dem Verzeichnis ~/project/my_files, die im vorherigen Schritt erstellt wurden.

Zuerst entfernen wir die Schreibberechtigung für die Gruppe und andere von document.txt. Die aktuellen Berechtigungen sind -rw-rw-r--.

chmod go-w ~/project/my_files/document.txt

Überprüfen Sie die Änderung mit ls -l:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes anzeigen:

-rw-r--r-- 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Beachten Sie, dass die Schreibberechtigung (w) für die Gruppe und andere entfernt wurde.

Als Nächstes fügen wir die Ausführungsberechtigung für den Besitzer (u) zu document.txt hinzu. Dies wird häufig für Skripte durchgeführt, um sie ausführbar zu machen.

chmod u+x ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes sein:

-rwxr--r-- 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Der Besitzer hat nun die Ausführungsberechtigung (x).

Nun arbeiten wir mit dem Verzeichnis ~/project/my_files. Die aktuellen Berechtigungen sind drwxrwxr-x. Entfernen wir die Schreibberechtigung für andere (o) vom Verzeichnis.

chmod o-w ~/project/my_files

Überprüfen Sie die Änderung:

ls -ld ~/project/my_files

Die Ausgabe sollte nun Folgendes anzeigen:

drwxr-xr-x 2 labex labex 4096 Jun  6 17:36 /home/labex/project/my_files

Warum hat sich die Ausgabe durch o-w nicht geändert? Das liegt daran, dass die Gruppe "Andere" bereits keine Schreibberechtigung hatte. r-x für andere bedeutet Lesen und Ausführen, aber kein Schreiben. Dies zeigt, dass chmod nur Änderungen anwendet, wenn diese vom aktuellen Zustand abweichen.

Versuchen wir, die Berechtigungen genau festzulegen. Wir setzen die Berechtigungen für document.txt auf rw-r--r-- für alle (Besitzer, Gruppe, Andere). Das bedeutet, der Besitzer erhält Lesen/Schreiben, die Gruppe Lesen und andere Lesen.

chmod a=rw,g=r,o=r ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes sein:

-rw-r--r-- 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Dieser Befehl a=rw,g=r,o=r ist etwas redundant, da a=rw rw für alle anwenden würde, dann g=r die Gruppe auf r setzen würde (das w von a=rw überschreibt) und o=r andere auf r setzen würde (das w von a=rw überschreibt). Eine einfachere Möglichkeit, rw-r--r-- zu erreichen, wäre chmod u=rw,go=r. Versuchen wir das.

chmod u=rw,go=r ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte weiterhin Folgendes sein:

-rw-r--r-- 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Schließlich machen wir document.txt für alle ausführbar.

chmod a+x ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes sein:

-rwxr-xr-x 1 labex labex 0 Jun  6 17:36 /home/labex/project/my_files/document.txt

Ändern von Dateiberechtigungen mit chmod (Okta-Modus)

In diesem Schritt lernen Sie, wie Sie Dateiberechtigungen mit dem Befehl chmod im Oktal-(numerischen) Modus ändern. Der Oktalmodus ist eine prägnante Methode zur Darstellung von Berechtigungen, wobei jeder Berechtigungstyp (Lesen, Schreiben, Ausführen) ein numerischer Wert zugewiesen wird.

Die numerischen Werte für die Berechtigungen sind:

  • Lesen (r): 4
  • Schreiben (w): 2
  • Ausführen (x): 1
  • Keine Berechtigung (-): 0

Um den Oktalwert für eine Gruppe von Berechtigungen (Benutzer, Gruppe oder Andere) zu bestimmen, addieren Sie die Werte der gewährten Berechtigungen.

Beispiel:

  • rwx (Lesen, Schreiben, Ausführen) = 4 + 2 + 1 = 7
  • rw- (Lesen, Schreiben, kein Ausführen) = 4 + 2 + 0 = 6
  • r-x (Lesen, kein Schreiben, Ausführen) = 4 + 0 + 1 = 5
  • r-- (Lesen, kein Schreiben, kein Ausführen) = 4 + 0 + 0 = 4
  • --- (keine Berechtigungen) = 0 + 0 + 0 = 0

Der Befehl chmod im Oktalmodus verwendet eine dreistellige Zahl, wobei jede Ziffer die Berechtigungen für Besitzer, Gruppe und Andere repräsentiert. Die Syntax lautet: chmod OGO DATEI.

  • O: Oktalwert für die Berechtigungen des Besitzers.
  • G: Oktalwert für die Berechtigungen der Gruppe.
  • O: Oktalwert für die Berechtigungen der Anderen.

Wir arbeiten weiter mit ~/project/my_files/document.txt und ~/project/my_files.

Zuerst setzen wir die Berechtigungen von document.txt auf rw-r--r--.

  • Besitzer: rw- = 6
  • Gruppe: r-- = 4
  • Andere: r-- = 4

Der Oktalwert ist also 644.

chmod 644 ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes anzeigen:

-rw-r--r-- 1 labex labex 0 Jun  6 00:48 /home/labex/project/my_files/document.txt

Als Nächstes machen wir document.txt nur für den Besitzer ausführbar, behalten aber Lesen/Schreiben für den Besitzer und Lesen für Gruppe und Andere. Das bedeutet, der Besitzer hat rwx (7), die Gruppe r-- (4) und Andere r-- (4). Der Oktalwert ist 744.

chmod 744 ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun Folgendes sein:

-rwxr--r-- 1 labex labex 0 Jun  6 00:48 /home/labex/project/my_files/document.txt

Ändern wir nun die Berechtigungen des Verzeichnisses ~/project/my_files. Die aktuellen Berechtigungen sind drwxr-xr-x. Setzen wir die Berechtigungen auf rwxr-x---.

  • Besitzer: rwx = 7
  • Gruppe: r-x = 5
  • Andere: --- = 0

Der Oktalwert ist also 750.

chmod 750 ~/project/my_files

Überprüfen Sie die Änderung:

ls -ld ~/project/my_files

Die Ausgabe sollte nun Folgendes anzeigen:

drwxr-x--- 2 labex labex 26 Jun  6 00:48 /home/labex/project/my_files

Das bedeutet, der Besitzer (labex) hat volle Berechtigungen (Lesen, Schreiben, Ausführen), die Gruppe (labex) kann das Verzeichnis lesen und ausführen (betreten) und Andere haben überhaupt keine Berechtigungen.

Erstellen wir abschließend eine neue ausführbare Skriptdatei, um das direkte Festlegen von Ausführungsberechtigungen zu demonstrieren.

echo '#!/bin/bash' > ~/project/my_script.sh
echo 'echo "Hello from my script!"' >> ~/project/my_script.sh

Standardmäßig sind neue Dateien nicht ausführbar. Überprüfen wir die Berechtigungen:

ls -l ~/project/my_script.sh

Sie werden wahrscheinlich Berechtigungen wie -rw-r--r-- sehen. Um sie für den Besitzer und die Gruppe ausführbar zu machen, aber nicht für Andere, benötigen wir rwxrwx---.

  • Besitzer: rwx = 7
  • Gruppe: rwx = 7
  • Andere: --- = 0

Der Oktalwert ist also 770.

chmod 770 ~/project/my_script.sh

Überprüfen Sie die Änderung:

ls -l ~/project/my_script.sh

Die Ausgabe sollte nun Folgendes sein:

-rwxrwx--- 1 labex labex 41 Jun  6 00:52 /home/labex/project/my_script.sh

Jetzt können Sie das Skript ausführen:

~/project/my_script.sh

Sie sollten die Ausgabe sehen:

Hello from my script!

Ändern der Dateibesitzer mit chown

In diesem Schritt lernen Sie, wie Sie den Besitzer und die Gruppe von Dateien und Verzeichnissen mithilfe des Befehls chown ändern. Dies ist eine wichtige administrative Aufgabe, da nur der Benutzer root den Besitzer einer Datei ändern kann. Der Benutzer labex verfügt über sudo-Berechtigungen, die es Ihnen ermöglichen, diese Aktionen auszuführen.

Die grundlegende Syntax für chown lautet: chown [OPTIONEN] NEUER_BESITZER[:NEUE_GRUPPE] DATEI(en).

Beginnen wir mit der Erstellung eines neuen Benutzers und einer neuen Gruppe, die wir verwenden können, um Besitzeränderungen zu demonstrieren. Da diese Umgebung containerbasiert ist, erstellen wir zu Demonstrationszwecken einen einfachen Benutzer und eine einfache Gruppe.

Erstellen Sie zunächst eine neue Gruppe namens devs:

sudo groupadd devs

Als Nächstes erstellen Sie einen neuen Benutzer namens developer und fügen Sie ihn der Gruppe devs hinzu. Für diese Demonstration erstellen wir einen Systembenutzer ohne Homeverzeichnis oder Login-Shell.

sudo useradd -r -g devs -s /sbin/nologin developer

Ändern wir nun den Besitzer von ~/project/my_files/document.txt von labex auf developer.

sudo chown developer ~/project/my_files/document.txt

Überprüfen Sie die Änderung mit ls -l:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun developer als Besitzer anzeigen:

-rwxr--r-- 1 developer labex 0 Jun  6 00:48 /home/labex/project/my_files/document.txt

Beachten Sie, dass sich die Gruppenmitgliedschaft (labex) nicht geändert hat.

Sie können Besitzer und Gruppe gleichzeitig mithilfe der Syntax owner:group ändern. Ändern wir den Besitzer von document.txt zurück auf labex und die Gruppe auf devs.

sudo chown labex:devs ~/project/my_files/document.txt

Überprüfen Sie die Änderung:

ls -l ~/project/my_files/document.txt

Die Ausgabe sollte nun labex als Besitzer und devs als Gruppe anzeigen:

-rwxr--r-- 1 labex devs 0 Jun  6 00:48 /home/labex/project/my_files/document.txt

Der Befehl chown unterstützt auch die Option -R (rekursiv), mit der Sie die Besitzerverhältnisse eines gesamten Verzeichnisbaums ändern können. Ändern wir den Besitzer des Verzeichnisses ~/project/my_files und aller darin enthaltenen Inhalte auf developer und die Gruppe auf devs.

sudo chown -R developer:devs ~/project/my_files

Überprüfen Sie die Änderung für das Verzeichnis:

ls -ld ~/project/my_files

Die Ausgabe sollte die neuen Besitzerverhältnisse widerspiegeln:

drwxr-x--- 2 developer devs 26 Jun  6 00:48 /home/labex/project/my_files

Beachten Sie, dass der Benutzer labex nach Änderung der Verzeichnisbesitzerverhältnisse auf developer:devs keinen Zugriff mehr auf die Dateien im Verzeichnis hat, da die Verzeichnisberechtigungen drwxr-x--- sind (Besitzer und Gruppe haben Zugriff, andere nicht) und labex weder der Besitzer (developer) noch Mitglied der Gruppe (devs) ist. Wenn Sie nun versuchen, die Datei aufzulisten:

ls -l ~/project/my_files/document.txt

erhalten Sie eine Fehlermeldung "Zugriff verweigert". Dies zeigt, wie Besitzerverhältnisse und Berechtigungen zusammenarbeiten, um den Zugriff zu steuern.

Sie können auch nur die Gruppenmitgliedschaft ändern, indem Sie chown :NEUE_GRUPPE DATEI(en) verwenden. Dies entspricht dem Befehl chgrp. Ändern wir die Gruppe von ~/project/my_script.sh auf devs.

sudo chown :devs ~/project/my_script.sh

Überprüfen Sie die Änderung:

ls -l ~/project/my_script.sh

Die Ausgabe sollte devs als Gruppenbesitzer anzeigen, während labex der Dateibesitzer bleibt:

-rwxrwx--- 1 labex devs 41 Jun  6 00:52 /home/labex/project/my_script.sh

Zum Schluss bereinigen wir die Änderungen, indem wir die Besitzerverhältnisse wieder auf labex:labex setzen und dann den Benutzer developer und die Gruppe devs entfernen.

sudo chown -R labex:labex ~/project/my_files
sudo userdel developer
sudo groupdel devs

Verstehen und Anwenden spezieller Berechtigungen (SUID, SGID, Sticky Bit)

In diesem Schritt untersuchen Sie spezielle Berechtigungen in Linux: SUID (Set User ID), SGID (Set Group ID) und das Sticky Bit. Diese Berechtigungen bieten erweiterte Kontrolle über die Dateiausführung und das Verzeichnisverhalten.

Spezielle Berechtigungen werden durch eine zusätzliche Ziffer im Oktal-Berechtigungsmodus dargestellt, die vor den Standard-drei Ziffern (Besitzer, Gruppe, Andere) steht.

  • SUID (Set User ID):
    • Oktalwert: 4
    • Auswirkung auf Dateien: Wenn eine ausführbare Datei mit SUID ausgeführt wird, wird sie mit den Berechtigungen des Dateibesitzers ausgeführt, nicht mit den Berechtigungen des Benutzers, der sie ausgeführt hat. Dies wird häufig für Programme verwendet, die erhöhte Berechtigungen benötigen, um bestimmte Aufgaben auszuführen, wie z. B. den Befehl passwd (der auf /etc/shadow schreiben muss, eine Datei, die von root besitzt).
    • Ausgabe von ls -l: Ein s erscheint anstelle des x (Ausführen)-Berechtigungszeichens des Besitzers. Wenn der Besitzer keine Ausführungsberechtigung hat, erscheint ein großes S.
  • SGID (Set Group ID):
    • Oktalwert: 2
    • Auswirkung auf Dateien: Ähnlich wie SUID, aber die ausführbare Datei wird mit den Berechtigungen des Gruppenbesitzers der Datei ausgeführt.
    • Auswirkung auf Verzeichnisse: Dateien und Unterverzeichnisse, die innerhalb eines SGID-aktivierten Verzeichnisses erstellt werden, erben die Gruppenmitgliedschaft dieses Verzeichnisses und nicht die primäre Gruppe des Benutzers, der sie erstellt hat. Dies ist sehr nützlich für freigegebene Verzeichnisse, in denen alle Dateien zu einer bestimmten Gruppe gehören sollen.
    • Ausgabe von ls -l: Ein s erscheint anstelle des x (Ausführen)-Berechtigungszeichens der Gruppe. Wenn die Gruppe keine Ausführungsberechtigung hat, erscheint ein großes S.
  • Sticky Bit:
    • Oktalwert: 1
    • Auswirkung auf Dateien: Keine Auswirkung.
    • Auswirkung auf Verzeichnisse: Benutzer können Dateien im Verzeichnis erstellen, aber sie können nur Dateien löschen oder umbenennen, die ihnen gehören. Dies verhindert, dass Benutzer Dateien anderer Benutzer in einem freigegebenen Verzeichnis (z. B. /tmp) löschen oder verschieben.
    • Ausgabe von ls -l: Ein t erscheint anstelle des x (Ausführen)-Berechtigungszeichens anderer Benutzer. Wenn andere Benutzer keine Ausführungsberechtigung haben, erscheint ein großes T.

Demonstrieren wir diese speziellen Berechtigungen.

SUID-Beispiel

Wir erstellen ein einfaches C-Programm, das versucht, eine eingeschränkte Datei zu lesen.

Erstellen Sie zunächst eine Datei, die nur root lesen kann:

sudo touch ~/project/secret_data.txt
sudo chmod 600 ~/project/secret_data.txt
sudo chown root:root ~/project/secret_data.txt

Überprüfen Sie die Berechtigungen:

ls -l ~/project/secret_data.txt

Ausgabe:

-rw------- 1 root root 0 Jun  6 17:36 /home/labex/project/secret_data.txt

Erstellen Sie nun ein C-Programm read_secret.c, das versucht, diese Datei zu lesen:

nano ~/project/read_secret.c

Fügen Sie den folgenden Code in read_secret.c ein:

// ... (C-Code)

Speichern und beenden Sie nano (Strg+S, Strg+X).

Kompilieren Sie das Programm:

gcc ~/project/read_secret.c -o ~/project/read_secret

Versuchen Sie nun, es als labex auszuführen:

~/project/read_secret

Sie sollten eine Fehlermeldung "Error opening file: Permission denied" erhalten, da labex keinen Lesezugriff auf secret_data.txt hat.

Machen wir nun read_secret von root besitzen und setzen das SUID-Bit.

// ... (Befehle zum Ändern des Besitzers und Setzen des SUID-Bits)

Überprüfen Sie die Berechtigungen:

// ... (Ausgabe von ls -l)

Beachten Sie das s im Berechtigungsset des Besitzers. Führen Sie das Programm jetzt erneut als labex aus:

// ... (Ausführung des Programms)

Diesmal sollte es die Datei erfolgreich lesen (obwohl sie leer ist, sodass kein Inhalt gedruckt wird, aber die Meldung "Successfully read file." zeigt den Erfolg). Dies liegt daran, dass das SUID-Bit das Programm mit den Berechtigungen von root ausführen ließ.

SGID-Beispiel (auf Verzeichnis)

Erstellen wir ein freigegebenes Verzeichnis und eine neue Gruppe.

// ... (Befehle zum Erstellen der Gruppe und des Verzeichnisses)

Setzen Sie nun das SGID-Bit auf shared_dir:

// ... (Befehl zum Setzen des SGID-Bits)

Überprüfen Sie die Berechtigungen:

// ... (Ausgabe von ls -ld)

Beachten Sie das s im Berechtigungsset der Gruppe.

Erstellen Sie nun eine Datei innerhalb von shared_dir:

// ... (Befehl zum Erstellen der Datei)

Überprüfen Sie die Besitzerverhältnisse von new_file.txt:

// ... (Ausgabe von ls -l)

Obwohl die primäre Gruppe von labex labex ist, hat new_file.txt die Gruppenmitgliedschaft shared_group von shared_dir aufgrund des SGID-Bits geerbt.

Sticky Bit-Beispiel

Das Verzeichnis /tmp ist ein klassisches Beispiel für ein Verzeichnis mit gesetztem Sticky Bit. Erstellen wir ein ähnliches Verzeichnis.

// ... (Befehl zum Erstellen des Verzeichnisses)

Das 1 in 1777 ist der Oktalwert für das Sticky Bit. 777 gewährt volle Berechtigungen an Besitzer, Gruppe und andere.

Überprüfen Sie die Berechtigungen:

// ... (Ausgabe von ls -ld)

Beachten Sie das t im Berechtigungsset anderer Benutzer.

Löschen wir nun die Datei als labex, nachdem wir sie als root erstellt haben (simulieren eines anderen Benutzers).

// ... (Befehle zum Erstellen, Ändern des Besitzers und Löschen der Datei)

Sie erhalten eine Fehlermeldung "Operation not permitted". Dies liegt daran, dass das Sticky Bit verhindert, dass Benutzer Dateien löschen, die ihnen nicht gehören, selbst wenn labex Schreibrechte für das Verzeichnis hat. Nur root oder der Besitzer von labex_file.txt kann sie löschen.

Zum Bereinigen benötigen Sie sudo, um labex_file.txt zu entfernen:

// ... (Befehl zum Löschen der Datei mit sudo)

Bereinigung

Entfernen Sie die erstellten Dateien und Verzeichnisse sowie den Benutzer/die Gruppe:

// ... (Befehle zum Löschen der Dateien und Verzeichnisse)

Konfigurieren der Standardberechtigungen mit umask

In diesem letzten Schritt lernen Sie umask kennen, das die Standardberechtigungen steuert, die neu erstellten Dateien und Verzeichnissen zugewiesen werden. umask (User File-Creation Mode Mask) ist eine Bitmaske, die Berechtigungen von den maximal möglichen Berechtigungen entfernt.

Die maximalen Berechtigungen für eine neue Datei sind 666 (rw-rw-rw-), d. h. Lesen und Schreiben für alle. Neue Dateien erhalten in der Regel aus Sicherheitsgründen standardmäßig keine Ausführungsberechtigungen.
Die maximalen Berechtigungen für ein neues Verzeichnis sind 777 (rwxrwxrwx), d. h. Lesen, Schreiben und Ausführen für alle.

Der Wert von umask wird von diesen maximalen Berechtigungen subtrahiert, um die tatsächlichen Standardberechtigungen zu ermitteln.

Um Ihren aktuellen umask-Wert anzuzeigen, geben Sie einfach umask ein:

umask

Sie werden wahrscheinlich 0002 oder 0022 sehen. In dieser Umgebung ist es 0022 für den Benutzer labex.

Ein umask von 0022 bedeutet:

  • Die erste 0 steht für spezielle Berechtigungen (SUID, SGID, Sticky Bit), die standardmäßig nicht von umask beeinflusst werden.
  • Die zweite 0 bedeutet, dass keine Berechtigungen vom Besitzer entfernt werden.
  • Die dritte 2 bedeutet, dass das Schreibrecht (Wert 2) von der Gruppe entfernt wird.
  • Die vierte 2 bedeutet, dass das Schreibrecht (Wert 2) von anderen entfernt wird.

Berechnen wir die Standardberechtigungen mit einem umask von 0022:

  • Für Dateien (max 666):

    • Besitzer: 6 - 0 = 6 (rw-)
    • Gruppe: 6 - 2 = 4 (r--)
    • Andere: 6 - 2 = 4 (r--)
    • Resultierende Dateiberechtigungen: 644 (rw-r--r--)
  • Für Verzeichnisse (max 777):

    • Besitzer: 7 - 0 = 7 (rwx)
    • Gruppe: 7 - 2 = 5 (r-x)
    • Andere: 7 - 2 = 5 (r-x)
    • Resultierende Verzeichnisberechtigungen: 755 (rwxr-xr-x)

Testen wir dies. Erstellen Sie eine neue Datei und ein neues Verzeichnis:

touch ~/project/new_file_umask.txt
mkdir ~/project/new_dir_umask

Überprüfen Sie deren Berechtigungen:

ls -l ~/project/new_file_umask.txt
ls -ld ~/project/new_dir_umask

Sie sollten Berechtigungen wie -rw-r--r-- für die Datei und drwxr-xr-x für das Verzeichnis sehen, was die Wirkung von 0022 umask bestätigt.

Ändern wir nun den umask auf 0077. Dieser umask entfernt alle Gruppen- und anderen Berechtigungen.

umask 0077

Überprüfen Sie, ob sich der umask geändert hat:

umask

Ausgabe:

0077

Berechnen wir nun die Standardberechtigungen mit einem umask von 0077:

  • Für Dateien (max 666):

    • Besitzer: 6 - 0 = 6 (rw-)
    • Gruppe: 6 - 7 = -1 (effektiv 0, ---)
    • Andere: 6 - 7 = -1 (effektiv 0, ---)
    • Resultierende Dateiberechtigungen: 600 (rw-------)
  • Für Verzeichnisse (max 777):

    • Besitzer: 7 - 0 = 7 (rwx)
    • Gruppe: 7 - 7 = 0 (---)
    • Andere: 7 - 7 = 0 (---)
    • Resultierende Verzeichnisberechtigungen: 700 (rwx------)

Testen wir diesen neuen umask. Erstellen Sie eine weitere neue Datei und ein neues Verzeichnis:

// ... (Befehle zum Erstellen der Dateien und Verzeichnisse)

Überprüfen Sie deren Berechtigungen:

// ... (Befehle zum Anzeigen der Berechtigungen)

Die Einstellung von umask wird typischerweise in Shell-Initialisierungsdateien (wie ~/.bashrc oder /etc/profile) konfiguriert, um sich automatisch beim Einloggen eines Benutzers anzuwenden. In diesem Labor ist die Änderung von umask vorübergehend und gilt nur für die aktuelle Terminalsitzung.

Um den umask auf den Standardwert für den Benutzer labex zurückzusetzen, können Sie ihn einfach auf 0022 setzen:

umask 0022

Zum Schluss bereinigen Sie die in diesem Schritt erstellten Dateien und Verzeichnisse:

// ... (Befehle zum Löschen der Dateien und Verzeichnisse)

Zusammenfassung

In diesem Labor haben wir die grundlegenden Aspekte der Verwaltung von Linux-Dateisystemberechtigungen untersucht. Wir begannen mit der Beherrschung des Befehls ls -l, um Datei- und Verzeichnisberechtigungen zu interpretieren, wobei wir die Bedeutung der Kategorien Benutzer, Gruppe und Andere sowie die Berechtigungen zum Lesen, Schreiben und Ausführen verstanden. Dieses grundlegende Wissen wurde dann angewendet, um Berechtigungen mithilfe von chmod sowohl im symbolischen als auch im Oktalmodus zu ändern, wodurch Flexibilität bei der Festlegung von Zugriffsrechten geboten wurde.

Darüber hinaus haben wir gelernt, wie man die Dateibesitzerverhältnisse mit dem Befehl chown ändert, was entscheidend für die Zuweisung von Verwaltungsrechten ist. Das Labor behandelte auch das Verständnis und die Anwendung spezieller Berechtigungen (SUID, SGID und Sticky Bit), die eine erweiterte Kontrolle über Ausführungs- und Dateierstellungsverhalten bieten. Schließlich haben wir untersucht, wie man Standardberechtigungen für neu erstellte Dateien und Verzeichnisse mithilfe von umask konfiguriert, um konsistente Berechtigungssettings im gesamten System sicherzustellen.