Zum Inhalt springen

Aufgabe 06 - Benutzer, Gruppen und Rechte

Zu Zen-Modus wechseln

Sie arbeiten sich in das Rechtesystem von Linux ein und wenden das Prinzip der geringsten Rechte auf Ihren eigenen Server an (siehe Kapitel Server aufsetzen und härten). Das Ziel ist nicht, dass etwas funktioniert. Das erreicht man mit chmod 777 in fünf Sekunden. Das Ziel ist, dass Sie zu jeder Datei sagen können, welcher Benutzer welches Recht darauf braucht und warum.

  • Kapitel Server aufsetzen und härten, Abschnitte Benutzer, Gruppen und Rechte sowie Weniger Rechte, weniger Schaden.
  • Ihren gehärteten Server aus Aufgabe 05.
  • Sie setzen Eigentümer und Rechte gezielt und grenzen ein Permission denied systematisch ein.
  • Sie erklären das Prinzip der geringsten Rechte und weisen es an den Diensten Ihres Servers nach.
  • Sie schätzen ab, welchen Schaden ein übernommener Dienst anrichten könnte.
  • Reproduktion: Rechte lesen, setzen und Kennungen anlegen (Teil A).
  • Reorganisation und Transfer: ein Rechteproblem ohne chmod 777 eingrenzen und lösen (Teil B).
  • Reflexion, Problemlösung und Urteilsbildung: die Kennungen der laufenden Dienste beurteilen (Teil C).

Die Übung ist auf etwa zwei Stunden ausgelegt.

  1. Legen Sie das Verzeichnis ~/uebungen/06/ an und darin drei Dateien mit beliebigem Inhalt: oeffentlich.txt, intern.txt und geheim.txt.

  2. Setzen Sie die Rechte so, dass oeffentlich.txt von allen gelesen werden darf, intern.txt von Eigentümer und Gruppe, und geheim.txt nur vom Eigentümer gelesen und geschrieben werden darf. Notieren Sie zu jeder Datei den verwendeten Zahlenwert und die Zeile aus ls -l.

  3. Übersetzen Sie fünf Rechteangaben in Worte und in ihren Zahlenwert. Schreiben Sie für jede auf, was Eigentümer, Gruppe und alle anderen jeweils dürfen: -rw-r--r--, -rw-r-----, -rwxr-x---, drwxr-xr-x, -rw-------.

  4. Legen Sie mit sudo groupadd projekt eine Gruppe an und nehmen Sie Ihre Arbeitskennung mit sudo usermod -aG projekt deploy hinein. Rufen Sie danach id auf. Die neue Gruppe fehlt dort noch. Melden Sie sich ab und wieder an, rufen Sie id erneut auf und erklären Sie in zwei Sätzen, warum sie jetzt erscheint.

  5. Rufen Sie whoami, id und sudo -u www-data id auf. Notieren Sie die drei Ausgaben und schreiben Sie in einem Satz dazu, was der dritte Befehl tut.

Teil B - Verzeichnisrechte und ein Permission denied

Abschnitt betitelt „Teil B - Verzeichnisrechte und ein Permission denied“
  1. Legen Sie das Verzeichnis ~/uebungen/06/kasten/ an und darin eine Datei datei.txt. Entziehen Sie danach dem Verzeichnis das Recht x für alle mit chmod 600 kasten.

  2. Versuchen Sie drei Operationen und notieren Sie zu jeder die Meldung, die Sie bekommen: das Verzeichnis auflisten (ls kasten), hineinwechseln (cd kasten), die Datei lesen (cat kasten/datei.txt).

  3. Erklären Sie in vier bis fünf Sätzen, was r und x bei einem Verzeichnis jeweils erlauben, und ordnen Sie jeder der drei Operationen aus Punkt 2 das Recht zu, das ihr gefehlt hat. Stellen Sie danach mit chmod 755 kasten den brauchbaren Zustand wieder her.

  4. Legen Sie mit sudo das Verzeichnis /srv/projekt/ an, das der Kennung deploy und der Gruppe projekt gehört, und darin eine Datei config.env mit einem erfundenen Wert.

  5. Bauen Sie einen Fehler ein: Setzen Sie Eigentümer oder Rechte so, dass der Zugriff unter einer anderen Kennung scheitert. Rufen Sie danach sudo -u www-data cat /srv/projekt/config.env auf und notieren Sie die Meldung.

  6. Grenzen Sie den Fehler in vier Schritten ein und notieren Sie zu jedem Befehl und Ergebnis. Erstens: Unter welcher Kennung arbeite ich (id)? Zweitens: Wem gehört die Datei und welche Rechte hat sie (ls -l)? Drittens: Wem gehören die Verzeichnisse auf dem Weg dorthin, also /srv und /srv/projekt (ls -ld)? Viertens: Welches Recht fehlt genau, und an welcher Stelle des Pfades?

  7. Beheben Sie den Fehler mit einem chown und einem chmod. Notieren Sie beide Befehle und begründen Sie den gewählten Zahlenwert in einem Satz.

  8. Beschreiben Sie in drei bis vier Sätzen, was chmod 777 an dieser Stelle bewirkt hätte. Nennen Sie dabei, welches Symptom verschwunden wäre und welche Kennungen des Systems danach Zugriff auf die Datei mit den Zugangsdaten gehabt hätten.

  1. Erstellen Sie eine Übersicht aller laufenden Dienste mit ihrer Kennung. Ein möglicher Weg führt über systemctl list-units --type=service --state=running in Verbindung mit ps -eo user,comm --sort=user. Notieren Sie den Weg, den Sie gewählt haben.

  2. Markieren Sie in der Übersicht jeden Dienst, der als root läuft. Wählen Sie zwei davon aus und beantworten Sie zu jedem in zwei bis drei Sätzen, ob er die Rechte von root tatsächlich braucht. Begründen Sie mit dem, was der Dienst tut, etwa dem Öffnen eines Ports unter 1024 oder dem Zugriff auf Gerätedateien.

  3. Wählen Sie einen Dienst aus, der unter einer eigenen Kennung läuft, zum Beispiel www-data oder postgres. Beschreiben Sie in fünf bis sechs Sätzen, was jemand erreichen könnte, der genau diesen Dienst übernimmt. Gehen Sie drei Fragen durch: Auf welche Verzeichnisse käme er, welche Dateien könnte er lesen, welche verändern? Beantworten Sie dieselben drei Fragen anschließend für den Fall, dass derselbe Dienst als root liefe.

  4. Prüfen Sie mit getent group sudo, welche Kennungen sudo verwenden dürfen. Vergleichen Sie das Ergebnis mit Ihrer Absicht aus Aufgabe 05 und notieren Sie Abweichungen.

  5. Tragen Sie die Ergebnisse der Punkte 2 bis 4 als Abschnitt Rechte und Kennungen in docs/haertung.md ein, jeweils mit dem Befehl, aus dem Sie die Angabe gewonnen haben.

  1. Was bedeuten die Rechte -rw-r----- für Eigentümer, Gruppe und alle anderen, und welcher Zahlenwert gehört dazu?
  2. Was bedeutet das Recht x bei einem Verzeichnis, und welche Operation braucht es?
  3. Warum kann ein Permission denied an einem Verzeichnis der Kette liegen und nicht an der Datei selbst?
  4. Warum löst chmod 777 nichts, sondern tauscht ein Problem gegen ein anderes?
  5. Was besagt das Prinzip der geringsten Rechte, und wie zeigt es sich an einem Webserver, der als www-data läuft?
  6. Warum arbeitet man unter einer normalen Kennung mit sudo statt direkt als root? Nennen Sie beide Gründe.
  7. Warum ist jedes zusätzlich installierte Paket eine zusätzliche Stelle, die Sicherheitsupdates braucht?

Eine Datei protokoll.md mit den Teilen A und B, jeweils mit Befehl und Ausgabe, dazu der Eingrenzung aus Teil B Punkt 6 in ihren vier Schritten. Der Abschnitt Rechte und Kennungen mit der Dienstübersicht und der Schadensabschätzung steht in docs/haertung.md. Die Eingriffe dieser Übung sind in docs/betrieb.md eingetragen.