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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Image | eine verpackte Kopie eines Programms mit allem, was es braucht, aus der Container starten | |
| Tag | das Etikett nach dem Doppelpunkt im Namen eines Images | 1.27.5-alpine |
| Festlegen | eine genaue Version nennen, damit sie sich nicht überraschend ändert | |
| Paket | ein Programm oder eine Bibliothek, die im Image installiert ist | |
| Hinweis | eine Mitteilung, welche Version einen bekannten Fehler behoben hat | |
| Scan | das 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?
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?
docker exec web nginx -vHier 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?
docker exec web ps -o user,args | head -n 3Hier 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?
docker exec web apk info 2>/dev/null | wc -lHier 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
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?
docker exec web apk version -t 1.3.1-r2 1.3.2-r0Hier 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
docker exec web apk version -t 1.2.5-r9 1.2.5-r9Hier 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
| Paket | Installiert | Behoben in | Ergebnis |
|---|---|---|---|
| zlib | 1.3.1-r2 | 1.3.2-r0 | Älter: aktualisieren |
| musl | 1.2.5-r9 | 1.2.5-r9 | Gleich: behoben |
| curl | 8.12.1-r1 | 8.12.0-r0 | Neuer: behoben |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Was trägt das Image in seiner Umgebung?
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.