Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Ein Image und seine Versionen prüfen

Nach dieser Lektion: Ich kann prüfen, was ein Image ausführt, welche Versionen es enthält und ob welche veraltet sind.

Lektion, 55 Min.8 BefehleWebserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Das Image, das letztes Jahr in Ordnung war

Ein Container-Image zu prüfen heißt: nachsehen, welche Version es ausführt, als wer seine Prozesse laufen und ob ein Paket darin veraltet ist. Alte Pakete haben bekannte Fehler, nach denen Angreifer zuerst suchen.

Ein Team baute vor einem Jahr ein Webserver-Image und betreibt es seitdem. Es lief, also fasste niemand es an. In diesem Jahr wurden drei Fehler in Programmen gefunden, die es enthält. Das Team sah nie nach.

Am Ende dieser Lektion

Notiz

Ich kann prüfen, was ein Image ausführt, welche Versionen es enthält und ob welche veraltet sind.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Imageeine verpackte Kopie eines Programms mit allem, was es braucht, aus der Container starten
Tagdas Etikett nach dem Doppelpunkt im Namen eines Images1.27.5-alpine
Festlegeneine genaue Version nennen, damit sie sich nicht überraschend ändert
Paketein Programm oder eine Bibliothek, die im Image installiert ist
Hinweiseine Mitteilung, welche Version einen bekannten Fehler behoben hat
Scandas Installierte mit einer Liste bekannter Fehler vergleichen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Tag sagt, welche Version Sie betreiben

Ein Container startet aus einem Image. Der Name des Images endet mit einem Tag, etwa nginx:1.27.5-alpine.

Ein Tag namens latest heißt: das, was heute das Neueste ist. Es ändert sich unter Ihren Füßen. Ein festgelegtes Tag nennt eine genaue Version: Sie wissen, was läuft, und entscheiden, wann Sie wechseln.

Welches Image betreibt der Dienst web?

Befehl
docker inspect web --format '{{.Config.Image}}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Welches nginx steckt darin?

Befehl
docker exec web nginx -v

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was die beiden Runs ausgaben

Der erste schrieb nginx:1.27.5-alpine. Das Tag ist eine Version: Dieses Image ist festgelegt. Der zweite schrieb nginx version: nginx/1.27.5.

Beide Antworten müssen übereinstimmen. Sagt das Tag das eine und das Programm etwas anderes, hat jemand das Image verändert.

Wer führt die Prozesse aus?

Befehl
docker exec web ps -o user,args | head -n 3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Root und der Arbeiter

Der Run schrieb eine Überschrift, dann eine Zeile root für den Hauptprozess und dann eine Zeile nginx für einen Arbeiter.

Der Hauptprozess ist root, um den Port 80 öffnen zu können. Die Arbeiter, die Besucher bedienen, laufen unter dem einfachen Konto nginx. Ein Fehler in einem Arbeiter gibt einem Angreifer viel weniger. Liefe alles als root, gäbe derselbe Fehler den ganzen Container.

Eine Bestandsliste kommt vor dem Scan

Ein Scanner tut drei Dinge. Er listet die Pakete auf, liest eine Liste von Fehlern und ihren Reparaturen und vergleicht beides.

Das Erste und das Dritte können Sie im Labor tun. Ein echter Scanner holt seine Fehlerliste aus dem Internet, und das Labor hat keinen Ausgang: Sie tippen deshalb zwei erfundene Hinweise.

Wie viele Pakete sind installiert?

Befehl
docker exec web apk info 2>/dev/null | wc -l

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Versionen von zweien davon zeigen

Befehl
docker exec web apk info -v 2>/dev/null | grep -E '^(zlib|musl)-[0-9]'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Bestandsliste

Als es versucht wurde, war die Zahl 68, und die zwei Zeilen waren musl-1.2.5-r9 und zlib-1.3.1-r2. Jede Zeile ist ein Name, eine Version und eine Build-Nummer.

Jetzt ein erfundener Hinweis: "zlib ist in 1.3.2-r0 behoben". Alpine kann zwei Versionen für Sie vergleichen, offline.

Ist das installierte zlib älter als die Reparatur?

Befehl
docker exec web apk version -t 1.3.1-r2 1.3.2-r0

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

musl mit einer gleichen Reparatur vergleichen

Befehl
docker exec web apk version -t 1.2.5-r9 1.2.5-r9

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was die Zeichen bedeuten

Der erste Run schrieb <. Die installierte Version ist älter als die Reparatur: Dieses Paket bräuchte ein Update. Der zweite schrieb =: Es ist schon in der reparierten Version.

Ein Zeichen > hieße: neuer als die Reparatur. Das ist der ganze Scan: eine Bestandsliste, ein Hinweis und ein Vergleich.

Beispiel: Was ein Scan entscheidet

PaketInstalliertBehoben inErgebnis
zlib1.3.1-r21.3.2-r0Älter: aktualisieren
musl1.2.5-r91.2.5-r9Gleich: behoben
curl8.12.1-r18.12.0-r0Neuer: behoben

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Was trägt das Image in seiner Umgebung?

Befehl
docker inspect web --format '{{json .Config.Env}}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele scannen einmal, sehen nichts und scannen nie wieder. Jede Woche werden neue Fehler gefunden: Ein Image, das letzten Monat sauber war, ist es heute vielleicht nicht mehr. Scannen Sie nach einem Zeitplan und noch einmal bei jeder Änderung des Images.

Was das Labor nicht zeigen kann

Ein Labor kann keine Images laden, bauen oder scannen: Sie haben den laufenden Dienst geprüft, nicht die Image-Datei. Auf der Testmaschine schrieb der Umgebungs-Run nur Werte, die das Image selbst setzt, etwa die Version. Das soll er enthalten.

Ein Passwort in dieser Liste wäre ein Leck. Jeder, der den Container prüfen kann, kann es lesen.

Zum Weiterdenken: nach Ihren Korrekturen

Schließen Sie die Korrekturen des Labors ab und führen Sie dann docker exec web lab-check aus. Wiederholen Sie die Runs zu Tag, Benutzer und Umgebung aus dieser Lektion und schreiben Sie einen Satz: Hat sich einer geändert?

Die Konfiguration haben Sie gehärtet. Das Image und seine Pakete nicht, denn eine Konfigurationskorrektur aktualisiert kein Paket.

Über dieses Lab und seinen Quellcode: Webserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.