Linux-Benutzergruppen und Dateiberechtigungen

LinuxBeginner
Jetzt üben

Einführung

Linux ist ein Mehrbenutzer-Betriebssystem. Jeder Prozess und jede Datei gehört einem Benutzer. Jeder Benutzer hat außerdem eine primäre Gruppe und kann zusätzliche Gruppenmitgliedschaften besitzen. Identität, Eigentümer und Berechtigungsbits bestimmen gemeinsam, wer eine Ressource lesen, ändern, ausführen oder betreten darf.

In diesem Laborkurs richten Sie mit eigenen Übungskonten eine kleine Teamumgebung ein. Sie erstellen einen Benutzer, verwalten Gruppenmitgliedschaften, sichern eine Datei, prüfen eine Kontosperre, steuern Standardberechtigungen mit umask und konfigurieren Verzeichnisse mit Sticky Bit und setgid. Alle Arbeiten bleiben in der Laborumgebung und verändern den standardmäßigen labex-Anmeldepfad nicht.

Identitäten prüfen und einen Übungsbenutzer erstellen

In diesem Schritt prüfen Sie Ihre aktuelle Identität und erstellen ein separates Konto für Übungen zu Dateiberechtigungen. Linux identifiziert einen Benutzer mit einem Benutzernamen und einer numerischen Benutzer-ID (UID). Außerdem werden eine primäre Gruppen-ID (GID) und zusätzliche Gruppenmitgliedschaften gespeichert.

Prüfen Sie zuerst die Identität der aktuellen Shell:

whoami

Die Ausgabe sollte labex lauten. Zeigen Sie nun die UID, die primäre Gruppe und die zusätzlichen Gruppen dieses Kontos an:

id

Die genauen numerischen IDs können abweichen. Die Ausgabe kennzeichnet sie jedoch mit uid, gid und groups.

Das Erstellen eines Kontos ändert Systemdateien und erfordert daher administrative Berechtigungen. sudo bedeutet „superuser do“: Nach einer Prüfung, ob das aktuelle Konto dazu berechtigt ist, führt sudo den folgenden Befehl mit erweiterten Rechten aus. Verwenden Sie sudo nur für den Befehl, der administrative Rechte benötigt, und lesen Sie den vollständigen Befehl, bevor Sie die Eingabetaste drücken.

Der folgende Befehl useradd verwendet drei Optionen:

  • -m erstellt das Home-Verzeichnis.
  • -U erstellt eine primäre Gruppe mit demselben Namen.
  • -s /bin/bash legt Bash als Login-Shell des Kontos fest.

Erstellen Sie einen Übungsbenutzer namens jack:

sudo useradd -m -U -s /bin/bash jack

Prüfen Sie das neue Konto und sein Home-Verzeichnis:

id jack
ls -ld /home/jack

Die Ausgabe von id sollte jack sowohl als Benutzer als auch als primäre Gruppe anzeigen. Die Verzeichnisauflistung sollte zeigen, dass /home/jack existiert und jack:jack gehört.

Zusätzliche Gruppen verwalten

In diesem Schritt erstellen Sie eine Teamgruppe und nehmen Benutzer in zusätzliche Gruppen auf. Die primäre Gruppe eines Benutzers wird normalerweise zum Gruppeneigentümer neu erstellter Dateien. Zusätzliche Gruppen gewähren Zugriff auf weitere gemeinsam genutzte Ressourcen.

Erstellen Sie eine Gruppe namens developers:

sudo groupadd developers

Die Optionen usermod -aG bedeuten „zusätzliche Gruppenmitgliedschaften ergänzen“. Die Option -a ist wichtig: Ohne sie kann -G bereits vorhandene zusätzliche Gruppenmitgliedschaften ersetzen. Nehmen Sie jack in die Gruppen developers und sudo auf:

sudo usermod -aG developers,sudo jack

Nehmen Sie außerdem labex als Mitglied in developers auf. Die aktuelle Shell erhält die neue Gruppenidentität nicht sofort. Sie aktualisieren sie sicher im letzten Schritt.

sudo usermod -aG developers labex

Prüfen Sie beide Konten:

groups jack
groups labex

Die erste Ausgabe sollte jack, developers und sudo enthalten. Die zweite Ausgabe sollte developers enthalten. Die Mitgliedschaft in sudo ermöglicht es einem authentifizierten Konto, erweiterte Berechtigungen anzufordern. Vergeben Sie diese Mitgliedschaft daher nur an vertrauenswürdige Administratoren.

Dateieigentümer und Berechtigungen steuern

In diesem Schritt sichern Sie einen Teambericht mit einem bestimmten Eigentümer, einer bestimmten Gruppe und einem bestimmten Berechtigungsmodus. Eine lange Dateiauflistung zeigt zuerst den Dateityp und danach drei Berechtigungsgruppen für Eigentümer, Gruppe und andere Benutzer.

Erstellen Sie im Projektverzeichnis einen leeren Bericht:

touch /home/labex/project/secure-report.txt

Ändern Sie Eigentümer und Gruppe mit der Schreibweise user:group von chown:

sudo chown jack:developers /home/labex/project/secure-report.txt

Setzen Sie den Modus 640:

sudo chmod 640 /home/labex/project/secure-report.txt

In der numerischen Schreibweise steht 4 für Lesen, 2 für Schreiben und 1 für Ausführen. Daher gilt:

  • Eigentümer 6 bedeutet Lesen und Schreiben (4 + 2).
  • Gruppe 4 bedeutet nur Lesen.
  • Andere Benutzer 0 bedeutet kein Zugriff.

Prüfen Sie das Ergebnis:

ls -l /home/labex/project/secure-report.txt
stat -c 'owner=%U group=%G mode=%a' /home/labex/project/secure-report.txt

Die stabilen Felder der Ausgabe von stat sollten owner=jack group=developers mode=640 melden.

Eine Kontosperre prüfen und ändern

In diesem Schritt üben Sie, ein eigenes Konto vorübergehend zu sperren und wieder zu entsperren. Linux speichert Passwort-Hashes und den Kontostatus in /etc/shadow. Ein führendes ! im Passwortfeld kennzeichnet die Passwortauthentifizierung als gesperrt.

Bei der Einrichtung wurde ein Übungskonto namens contractor erstellt. Geben Sie nur das erste Zeichen seines Passwortfelds aus, damit der Hash selbst niemals angezeigt wird. Lesen Sie die Pipeline von links nach rechts: getent shadow contractor ruft den Shadow-Eintrag des Kontos ab; das erste cut verwendet : als Trennzeichen und wählt Feld 2 aus; das zweite cut behält Zeichen 1 dieses Felds:

sudo getent shadow contractor | cut -d: -f2 | cut -c1

Das erste Zeichen sollte normalerweise $ sein. Es steht am Anfang eines modernen Passwort-Hashformats. Sperren Sie das Konto mit usermod -L:

sudo usermod -L contractor

Prüfen Sie das erste Zeichen erneut:

sudo getent shadow contractor | cut -d: -f2 | cut -c1

Nun sollte ! ausgegeben werden. Entsperren Sie das Konto mit usermod -U und bestätigen Sie, dass ! verschwunden ist:

sudo usermod -U contractor
sudo getent shadow contractor | cut -d: -f2 | cut -c1

In diesem Szenario hat der Auftragnehmer das Team nun verlassen. Sperren Sie das Konto ein letztes Mal, während Sie seine Dateien erhalten:

sudo usermod -L contractor

Das Sperren der Passwortauthentifizierung löscht weder das Konto noch dessen Home-Verzeichnis und beendet nicht unbedingt bereits bestehende Sitzungen. Es unterscheidet sich vom Löschen eines Benutzers und ist nützlich, wenn Dateien zur späteren Prüfung erhalten bleiben müssen.

Standardberechtigungen mit Umask steuern

In diesem Schritt verwenden Sie umask, um die Berechtigungsbits zu steuern, die beim Erstellen neuer Dateien und Verzeichnisse durch die Shell entfernt werden. Programme beginnen normalerweise mit dem maximalen Modus 666 für reguläre Dateien und 777 für Verzeichnisse. Eine Maske von 027 entfernt die Schreibberechtigung für die Gruppe sowie alle Berechtigungen für andere Benutzer.

Erstellen Sie einen Arbeitsbereich für das Experiment:

mkdir -p /home/labex/project/umask-demo

Speichern Sie die aktuelle Maske, damit Sie sie später wiederherstellen können. Die Syntax $(command) wird Command Substitution genannt: Die Shell führt den Befehl in den Klammern aus und ersetzt den gesamten Ausdruck durch dessen Ausgabe. Die Zuweisung speichert dieses Ergebnis in original_umask. Wie bei anderen Shell-Zuweisungen dürfen sich um = keine Leerzeichen befinden.

original_umask=$(umask)

Setzen Sie die Maske 027 und erstellen Sie anschließend eine Datei und ein Verzeichnis:

umask 027
touch /home/labex/project/umask-demo/private-note.txt
mkdir /home/labex/project/umask-demo/private-dir

Prüfen Sie die resultierenden numerischen Modi:

stat -c '%a %n' /home/labex/project/umask-demo/private-note.txt /home/labex/project/umask-demo/private-dir

Die Datei sollte den Modus 640 und das Verzeichnis den Modus 750 haben. Dateien erhalten nicht automatisch Ausführungsbits. Stellen Sie die ursprüngliche Maske der Shell wieder her:

umask "$original_umask"

Eine Änderung von umask wirkt sich auf danach erstellte Objekte aus. Die Berechtigungen bereits vorhandener Objekte werden dadurch nicht geändert.

Ein gemeinsam genutztes Verzeichnis mit dem Sticky Bit schützen

In diesem Schritt konfigurieren Sie eine öffentliche Ablage, in der alle Benutzer Dateien erstellen, aber keine Dateien anderer Benutzer löschen dürfen. Der normale Modus 777 gewährt allen Benutzern vollständigen Zugriff auf das Verzeichnis. Das Sticky Bit ändert die Regeln für das Löschen innerhalb des Verzeichnisses.

Erstellen Sie das gemeinsam genutzte Verzeichnis und setzen Sie den Modus 1777. Die führende 1 aktiviert das Sticky Bit.

mkdir /tmp/shared-dropbox
chmod 1777 /tmp/shared-dropbox

Verwenden Sie sudo -u, um jeweils eine Datei als jedes Übungskonto zu erstellen:

sudo -u jack touch /tmp/shared-dropbox/jack-note.txt
sudo -u contractor touch /tmp/shared-dropbox/contractor-note.txt

Versuchen Sie nun, als jack die Datei des Auftragnehmers zu löschen:

sudo -u jack rm /tmp/shared-dropbox/contractor-note.txt

Dieser Fehler ist beabsichtigt. Sie sollten Operation not permitted sehen, und die Datei des Auftragnehmers sollte erhalten bleiben. Prüfen Sie das Verzeichnis:

ls -ld /tmp/shared-dropbox

Die Berechtigungen sollten mit einem kleingeschriebenen t enden, zum Beispiel drwxrwxrwt. Das kleingeschriebene t bedeutet, dass sowohl das Sticky Bit als auch die Ausführungsberechtigung für andere Benutzer gesetzt sind. Ein großgeschriebenes T würde bedeuten, dass das Sticky Bit gesetzt ist, die zugehörige Ausführungsberechtigung jedoch fehlt.

Ein Teamverzeichnis mit Setgid konfigurieren

In diesem Schritt richten Sie ein privates Verzeichnis für die Zusammenarbeit ein. Bei einem Verzeichnis bewirkt setgid, dass neu erstellte untergeordnete Objekte die Gruppe des Verzeichnisses statt der primären Gruppe des Erstellers erben. Dadurch bleiben Teamdateien einer gemeinsamen Gruppe zugeordnet.

Erstellen Sie das Verzeichnis:

mkdir /home/labex/project/team-share

Machen Sie jack zum Eigentümer und developers zum Gruppeneigentümer:

sudo chown jack:developers /home/labex/project/team-share

Setzen Sie den Modus 2770. Die führende 2 aktiviert setgid; 770 gewährt dem Eigentümer und der Gruppe vollständigen Zugriff und verweigert den Zugriff für andere Benutzer.

sudo chmod 2770 /home/labex/project/team-share

Prüfen Sie das Ergebnis:

ls -ld /home/labex/project/team-share
stat -c 'owner=%U group=%G mode=%a' /home/labex/project/team-share

Die lange Auflistung sollte an der Position für die Gruppenausführungsberechtigung ein s zeigen, zum Beispiel drwxrws---. Ein kleingeschriebenes s bedeutet, dass sowohl setgid als auch die Gruppenausführungsberechtigung aktiv sind. Ein großgeschriebenes S würde bedeuten, dass setgid gesetzt ist, die Gruppenausführungsberechtigung jedoch fehlt.

Setuid wird durch ein s an der Position für die Ausführungsberechtigung des Eigentümers dargestellt und kommt häufig bei sorgfältig kontrollierten Systemprogrammen vor. Erkennen Sie dieses Bit beim Lesen von Berechtigungen, aber setzen Sie es nicht für beliebige Programme.

Gruppenmitgliedschaft aktualisieren und Vererbung prüfen

In diesem Schritt aktivieren Sie die Mitgliedschaft in developers in einer untergeordneten Shell und weisen nach, dass setgid die Gruppe einer neuen Datei festlegt. Wenn ein Benutzer zu /etc/group hinzugefügt wird, werden die zusätzlichen Gruppen einer bereits laufenden Shell nicht automatisch neu gesetzt.

Starten Sie eine untergeordnete Shell mit developers als aktiver Gruppe:

newgrp developers

Die Eingabeaufforderung wird möglicherweise aktualisiert. Sie sind weiterhin der Benutzer labex, aber die untergeordnete Shell verwendet nun developers als effektive Gruppe. Bestätigen Sie beide Identitäten:

id

Erstellen Sie eine Datei im setgid-Verzeichnis:

touch /home/labex/project/team-share/labex-note.txt

Prüfen Sie die neue Datei:

stat -c 'owner=%U group=%G mode=%a' /home/labex/project/team-share/labex-note.txt

Der Eigentümer sollte labex sein, während die Gruppe developers sein sollte. setgid vererbt den Gruppeneigentümer. Die Lese- und Schreibbits der Datei hängen weiterhin vom erstellenden Prozess und dessen umask ab.

Beenden Sie die untergeordnete Shell und kehren Sie zur ursprünglichen Terminalsitzung zurück:

exit

Die Datei bleibt erhalten, nachdem die untergeordnete Shell geschlossen wurde.

Zusammenfassung

Sie haben das grundlegende Identitäts- und Zugriffsmodell von Linux geübt. Sie haben einen Benutzer und eine Teamgruppe erstellt, zusätzliche Gruppenmitgliedschaften verwaltet, Eigentümer zugewiesen und numerische Berechtigungsmodi in praktische Zugriffsregeln übersetzt. Außerdem haben Sie eine Kontosperre geprüft, ohne den Passwort-Hash offenzulegen.

Anschließend haben Sie sich mit speziellen Berechtigungen beschäftigt: umask steuerte die Standardberechtigungen, das Sticky Bit schützte Dateien in einem öffentlichen Verzeichnis, und setgid bewahrte den Gruppeneigentümer des Teams in einem privaten Verzeichnis für die Zusammenarbeit. Zum Schluss haben Sie mit newgrp die Gruppenmitgliedschaft aktualisiert und die vererbte Gruppe anhand einer echten Datei überprüft.