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.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Fortgeschrittener mit einer Abschlussquote von 80% ist. Es hat eine positive Bewertungsrate von 91% von den Lernenden erhalten.

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

Spezialberechtigungen verstehen und anwenden (SUID, SGID, Sticky Bit)

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

Spezialberechtigungen werden durch eine zusätzliche Ziffer im oktalen Berechtigungsmodus dargestellt, die vor den Standard-drei Ziffern (Eigentümer, Gruppe, Andere) platziert wird.

  • 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 Dateieigentümers ausgeführt, nicht mit denen des Benutzers, der sie ausgeführt hat. Dies wird häufig für Programme verwendet, die erhöhte Privilegien benötigen, um bestimmte Aufgaben auszuführen, wie z. B. der Befehl passwd (der in /etc/shadow schreiben muss, einer Datei, die root gehört).
    • In der ls -l Ausgabe: Ein s erscheint anstelle der x (Ausführen)-Berechtigung des Eigentümers. Wenn der Eigentümer keine Ausführungsberechtigung hat, erscheint ein Großbuchstabe S.
  • SGID (Set Group ID):
    • Oktalwert: 2
    • Auswirkung auf Dateien: Ähnlich wie SUID, aber die ausführbare Datei wird mit den Berechtigungen des Gruppeneigentümers der Datei ausgeführt.
    • Auswirkung auf Verzeichnisse: Dateien und Unterverzeichnisse, die in einem SGID-fähigen Verzeichnis erstellt werden, erben die Gruppenzugehörigkeit dieses Verzeichnisses, anstatt der primären 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.
    • In der ls -l Ausgabe: Ein s erscheint anstelle der x (Ausführen)-Berechtigung der Gruppe. Wenn die Gruppe keine Ausführungsberechtigung hat, erscheint ein Großbuchstabe S.
  • Sticky Bit:
    • Oktalwert: 1
    • Auswirkung auf Dateien: Keine Auswirkung.
    • Auswirkung auf Verzeichnisse: Benutzer können Dateien in dem 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.
    • In der ls -l Ausgabe: Ein t erscheint anstelle der x (Ausführen)-Berechtigung der Anderen. Wenn Andere keine Ausführungsberechtigung haben, erscheint ein Großbuchstabe T.

Lassen Sie uns diese Spezialberechtigungen demonstrieren.

SUID Beispiel

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

Erstellen Sie zuerst 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:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    FILE *fp;
    char buffer[256];

    printf("Attempting to read /home/labex/project/secret_data.txt...\n");

    fp = fopen("/home/labex/project/secret_data.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        printf("%s", buffer);
    }

    fclose(fp);
    printf("Successfully read file.\n");
    return 0;
}

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 die Meldung "Error opening file: Permission denied" sehen, da labex keinen Lesezugriff auf secret_data.txt hat.

Nun wollen wir read_secret root zuordnen und das SUID-Bit setzen.

sudo chown root:root ~/project/read_secret
sudo chmod u+s ~/project/read_secret

Überprüfen Sie die Berechtigungen:

ls -l ~/project/read_secret

Ausgabe:

-rwsr-xr-x 1 root root 17704 Jun  6 01:02 /home/labex/project/read_secret

Beachten Sie das s in der Berechtigung des Eigentümers. Führen Sie nun das Programm erneut als labex aus:

~/project/read_secret

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

SGID Beispiel (auf Verzeichnis)

Lassen Sie uns ein freigegebenes Verzeichnis und eine neue Gruppe erstellen.

sudo groupadd shared_group
sudo mkdir ~/project/shared_dir
sudo chown labex:shared_group ~/project/shared_dir
sudo chmod 770 ~/project/shared_dir

Setzen Sie nun das SGID-Bit auf shared_dir:

sudo chmod g+s ~/project/shared_dir

Überprüfen Sie die Berechtigungen:

ls -ld ~/project/shared_dir

Ausgabe:

drwxrws--- 2 labex shared_group 6 Jun  6 01:02 /home/labex/project/shared_dir

Beachten Sie das s in der Berechtigung der Gruppe.

Erstellen Sie nun eine Datei in shared_dir:

touch ~/project/shared_dir/new_file.txt

Überprüfen Sie die Eigentümerschaft von new_file.txt:

ls -l ~/project/shared_dir/new_file.txt

Ausgabe:

-rw-r--r-- 1 labex shared_group 0 Jun  6 01:02 /home/labex/project/shared_dir/new_file.txt

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

Sticky Bit Beispiel

Das Verzeichnis /tmp ist ein klassisches Beispiel für ein Verzeichnis, in dem das Sticky Bit gesetzt ist. Erstellen wir ein ähnliches Verzeichnis.

sudo mkdir ~/project/public_upload
sudo chmod 1777 ~/project/public_upload

Die 1 in 1777 ist der Oktalwert für das Sticky Bit. 777 gewährt dem Eigentümer, der Gruppe und Anderen volle Berechtigungen.

Überprüfen Sie die Berechtigungen:

ls -ld ~/project/public_upload

Ausgabe:

drwxrwxrwt 2 root root 6 Jun  6 01:02 /home/labex/project/public_upload

Beachten Sie das t in der Berechtigung der Anderen.

Lassen Sie uns nun simulieren, dass ein anderer Benutzer eine Datei in diesem Verzeichnis erstellt. Da wir nur den Benutzer labex haben, erstellen wir eine Datei als labex und versuchen dann, sie zu löschen, nachdem wir ihre Eigentümerschaft auf root geändert haben (was einen anderen Benutzer simuliert).

Erstellen Sie eine Datei als labex:

touch ~/project/public_upload/labex_file.txt

Ändern Sie die Eigentümerschaft auf root:

sudo chown root:root ~/project/public_upload/labex_file.txt

Versuchen Sie nun, labex_file.txt als labex zu löschen:

rm ~/project/public_upload/labex_file.txt

Sie sehen eine Aufforderung, ob Sie die schreibgeschützte Datei entfernen möchten, und nach der Bestätigung mit y erhalten Sie den Fehler "Operation not permitted". Dies liegt daran, dass das Sticky Bit Benutzer daran hindert, Dateien zu löschen, die ihnen nicht gehören, innerhalb dieses Verzeichnisses, obwohl labex Schreibberechtigung für das Verzeichnis public_upload hat. Nur root oder der Eigentümer von labex_file.txt (root in diesem Fall) können es löschen.

Um aufzuräumen, benötigen Sie sudo, um labex_file.txt zu entfernen:

sudo rm ~/project/public_upload/labex_file.txt

Aufräumen

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

sudo rm -f ~/project/secret_data.txt ~/project/read_secret.c ~/project/read_secret
sudo rm -rf ~/project/shared_dir ~/project/public_upload
sudo groupdel shared_group

Konfigurieren von Standardberechtigungen mit umask

In diesem letzten Schritt lernen Sie umask kennen, das die Standardberechtigungen steuert, die neu erstellten Dateien und Verzeichnissen zugewiesen werden. Die 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-), was Lesen und Schreiben für alle bedeutet. Neue Dateien erhalten standardmäßig aus Sicherheitsgründen in der Regel keine Ausführungsberechtigungen.
Die maximalen Berechtigungen für ein neues Verzeichnis sind 777 (rwxrwxrwx), was Lesen, Schreiben und Ausführen für alle bedeutet.

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

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.

Eine umask von 0022 bedeutet:

  • Die erste 0 ist für spezielle Berechtigungen (SUID, SGID, Sticky Bit), die standardmäßig nicht von umask betroffen sind.
  • Die zweite 0 bedeutet, dass keine Berechtigungen vom Eigentümer entfernt werden.
  • Die dritte 2 bedeutet, dass die Schreibberechtigung (Wert 2) von der Gruppe entfernt wird.
  • Die vierte 2 bedeutet, dass die Schreibberechtigung (Wert 2) von anderen entfernt wird.

Lassen Sie uns die Standardberechtigungen mit einer umask von 0022 berechnen:

  • Für Dateien (max. 666):

    • Eigentümer: 6 - 0 = 6 (rw-)
    • Gruppe: 6 - 2 = 4 (r--)
    • Andere: 6 - 2 = 4 (r--)
    • Ergebnis der Dateiberechtigungen: 644 (rw-r--r--)
  • Für Verzeichnisse (max. 777):

    • Eigentümer: 7 - 0 = 7 (rwx)
    • Gruppe: 7 - 2 = 5 (r-x)
    • Andere: 7 - 2 = 5 (r-x)
    • Ergebnis der 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 ihre 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 der 0022 umask bestätigt.

Ändern wir nun die umask auf 0077. Diese umask entfernt alle Gruppen- und anderen Berechtigungen.

umask 0077

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

umask

Ausgabe:

0077

Lassen Sie uns nun die Standardberechtigungen mit einer umask von 0077 berechnen:

  • Für Dateien (max. 666):

    • Eigentümer: 6 - 0 = 6 (rw-)
    • Gruppe: 6 - 7 = -1 (effektiv 0, ---)
    • Andere: 6 - 7 = -1 (effektiv 0, ---)
    • Ergebnis der Dateiberechtigungen: 600 (rw-------)
  • Für Verzeichnisse (max. 777):

    • Eigentümer: 7 - 0 = 7 (rwx)
    • Gruppe: 7 - 7 = 0 (---)
    • Andere: 7 - 7 = 0 (---)
    • Ergebnis der Verzeichnisberechtigungen: 700 (rwx------)

Testen wir diese neue umask. Erstellen Sie eine weitere neue Datei und ein weiteres neues Verzeichnis:

touch ~/project/restricted_file.txt
mkdir ~/project/restricted_dir

Überprüfen Sie ihre Berechtigungen:

ls -l ~/project/restricted_file.txt
ls -ld ~/project/restricted_dir

Sie sollten jetzt Berechtigungen wie -rw------- für die Datei und drwx------ für das Verzeichnis sehen.

Die umask-Einstellung wird typischerweise in Shell-Initialisierungsdateien (wie ~/.bashrc oder /etc/profile) konfiguriert, um automatisch angewendet zu werden, wenn sich ein Benutzer anmeldet. Für dieses Lab ist die umask-Änderung temporär und gilt nur für die aktuelle Terminal-Sitzung.

Um die umask auf die Standardeinstellung für den Benutzer labex zurückzusetzen, können Sie sie einfach wieder auf 0022 setzen:

umask 0022

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

rm ~/project/new_file_umask.txt ~/project/restricted_file.txt
rmdir ~/project/new_dir_umask ~/project/restricted_dir

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.