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:
-merstellt das Home-Verzeichnis.-Uerstellt eine primäre Gruppe mit demselben Namen.-s /bin/bashlegt 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
6bedeutet Lesen und Schreiben (4 + 2). - Gruppe
4bedeutet nur Lesen. - Andere Benutzer
0bedeutet 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.



