Snapshots und Drift
Jedes andere Werkzeug sagt Ihnen, wie ein Rechner jetzt aussieht. Die Frage, die ein Administrator wirklich hat, ist was ist anders als damals, als es funktionierte - und kein gewöhnliches Windows beantwortet sie.
Was ein Snapshot enthält
Den ganzen Rechner in einem Augenblick: jeden Dienst und jeden Treiber mit Starttyp, Konto, Startpfad und Argumenten, Hash und Signierer der Datei, die er ausführt, seinen Abhängigkeiten und dem, was von ihm abhängt, seinen Triggern, seinen erforderlichen Privilegien, seinem SID-Typ und seinem Sicherheitsdeskriptor - dazu den Namen des Rechners, das Konto, das ihn erstellt hat, und ob dieses Konto ein Administrator war.
bws snapshot create before.json --note "before the patch"
Er ist JSON mit einem Feld pro Zeile. Das ist Absicht: Ein Snapshot passt so in ein Repository, und git diff liest ihn, sodass der eigene Vergleich des Werkzeugs nicht der einzige Weg ist, einen anzusehen.
Legen Sie ihn ab wie das, was er ist. Ein Snapshot beschreibt den ganzen Rechner bis hin zu jedem Startpfad und jedem Sicherheitsdeskriptor. Er wird mit den Berechtigungen geschrieben, die sein Verzeichnis ohnehin hat, und das Werkzeug schränkt nichts ein - ein Verzeichnis, das andere lesen können, ist also eines, in dem sie all das lesen können.
Dann fragen, was anders ist
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- Konfiguration und Laufzustand werden getrennt gemeldet. Zwei Snapshots im Abstand eines Tages unterscheiden sich darin, was gerade läuft, und fast nichts davon ist Drift. Zusammengemischt geht die eine Zeile, auf die es ankommt - ein Starttyp, den jemand geändert hat -, unter vierzig anderen unter.
- Was sich nicht vergleichen ließ, wird aufgelistet und nicht versteckt. Ein Feld, das einer der beiden Snapshots nie gelesen hat, weil diese Sitzung dafür keine Rechte hatte, erscheint als not compared unter seinem Eintrag, und die Zusammenfassung zählt diese Einträge. Ein Vergleich, der nichts hat sich geändert sagt, bedeutet also: nichts hat sich in dem geändert, was beide Seiten sehen konnten.
- Ein Snapshot mit erhöhten Rechten gegen einen ohne würde lügen und Einträge als entfernt melden, die niemand entfernt hat. Jede Datei hält fest, ob das Konto, das sie erstellt hat, ein Administrator war, und der Vergleich sagt das.
- Zwei Dateien, nicht nur eine Datei und dieser Rechner. Machen Sie einen auf dem Staging- und einen auf dem Produktivsystem und vergleichen Sie sie irgendwo - die Antwort auf warum unterscheidet sich Staging braucht keinen der beiden Rechner vor Ort.
Das Fenster tut dasselbe unter Audit.... Take snapshot... schreibt dieselbe Datei, mit einer Notiz, wenn Sie eine eingeben, und Compare with this machine... oder Compare two snapshots... zeigt anstelle der Liste, was sich geändert hat, eine Zeile pro Feld, wobei alles, was den Vergleich weniger als exakt macht, über der Tabelle steht. Show grenzt ihn auf die Unterschiede oder auf ein Feld ein, und Export... schreibt ihn in eine CSV-Datei.
Der Exit-Code ist der Punkt
--exit-code endet mit 5, wenn sich die Konfiguration unterscheidet - ein Eintrag hinzugefügt oder entfernt, oder einer anders eingerichtet. Ein Dienst, der nur von selbst angehalten oder gestartet wurde, wird gemeldet und zählt nicht, und die Kopien pro Benutzer, die Windows für jede angemeldete Sitzung anlegt, ebenso nicht - sie werden ausgelassen und gezählt. Kein Fehler - Drift zu finden ist wofür dieses Werkzeug da ist, und sie zu finden ist kein Fehler -, weshalb er eine eigene Nummer hat und nicht die ausleiht, die bedeutet, dass etwas schiefging.
# der Tag, an dem der Rechner in Betrieb geht
bws snapshot create C:\baselines\web01.json --note "after the build"
# jede Nacht, aus einer geplanten Aufgabe
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - keine Konfigurationsdrift
# 5 - die Konfiguration ist abgedriftet, und drift.json sagt, was
# 3 - es lief und konnte nicht alles lesen, die Antwort ist also unvollständig
Das ist der ganze Mechanismus: eine Baseline, erstellt, als der Rechner als gut bekannt war, und eine Frage, die jede Nacht gestellt wird. Antwortet er in der ersten Nacht mit 5, erfährt es jemand in der ersten Nacht und nicht am Morgen, an dem etwas kaputtgeht.