Snímky a drift
Každý jiný nástroj vám řekne, jak stroj vypadá teď. Otázka, kterou správce skutečně má, je co je jinak než ve chvíli, kdy to fungovalo - a na čisté instalaci Windows na ni neodpovídá nic.
Co snímek obsahuje
Celý stroj v jednom okamžiku: každá služba a ovladač s typem spouštění, účtem, cestou ke spuštění a argumenty, hashem a podepisovatelem souboru, který spouští, závislostmi a tím, co na něm závisí, triggery, požadovanými privilegii, typem SID a popisovačem zabezpečení - plus název stroje, účet, který snímek pořídil, a zda byl tento účet správce.
bws snapshot create before.json --note "before the patch"
Je to JSON s jedním polem na řádek. To je záměr: snímek lze uložit do repozitáře a git diff ho čte, takže vlastní porovnání nástroje není jediný způsob, jak se na něj podívat.
Ukládejte ho podle toho, čím je. Snímek popisuje celý stroj, až po každou cestu ke spuštění a každý popisovač zabezpečení. Zapisuje se s oprávněními, která jeho adresář už má, a nástroj nic nezužuje - adresář, který mohou číst jiní lidé, je tedy takový, ve kterém mohou přečíst to všechno.
Pak se zeptejte, co je jinak
$ 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.
- Konfigurace a stav běhu se hlásí odděleně. Dva snímky pořízené s odstupem dne se liší tím, co zrovna běží, a téměř nic z toho není drift. Smíchané dohromady je jediný řádek, na kterém záleží - typ spouštění, který někdo změnil - pohřben pod čtyřiceti, které nezáleží.
- Co nešlo porovnat, je uvedeno, ne skryto. Pole, které jeden ze dvou snímků nikdy nečetl, protože ta relace na ně neměla práva, vyjde pod svou položkou jako not compared a souhrn takové položky počítá. Porovnání, které říká nic se nezměnilo, tedy znamená, že se nic nezměnilo v tom, co viděly obě strany.
- Snímek se zvýšenými oprávněními proti snímku bez nich by lhal a hlásil by jako odstraněné položky, které nikdo neodstranil. Každý soubor zaznamenává, zda účet, který ho pořídil, byl správce, a porovnání to říká.
- Dva soubory, ne jen soubor a tento stroj. Pořiďte jeden na testovacím a jeden na produkčním prostředí a porovnejte je kdekoli - odpověď na proč se testovací liší nepotřebuje ani jeden ze strojů.
Okno dělá totéž v části Audit.... Take snapshot... zapíše týž soubor, s poznámkou, pokud ji napíšete, a Compare with this machine... nebo Compare two snapshots... místo seznamu ukáže, co se změnilo, jeden řádek na pole, se vším, co činí porovnání méně než přesným, uvedeným nad tabulkou. Show ho zúží na rozdíly nebo na jedno pole a Export... ho zapíše do souboru CSV.
Důležitý je návratový kód
--exit-code skončí kódem 5, když se konfigurace liší - položka přidána nebo odebrána, nebo nastavená jinak. Služba, která se jen sama zastavila nebo spustila, se ohlásí a nepočítá se, a nepočítají se ani kopie pro jednotlivé uživatele, které Windows vytváří pro každou přihlášenou relaci: ty se vynechají a spočítají. Není to selhání - drift je to, co tento nástroj má nacházet, a jeho nalezení není selhání - a proto má vlastní číslo, místo aby si půjčoval to, které znamená, že se něco pokazilo.
# den, kdy stroj jde do provozu
bws snapshot create C:\baselines\web01.json --note "after the build"
# každou noc z naplánované úlohy
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - žádný drift konfigurace
# 5 - konfigurace se odchýlila a drift.json říká co
# 3 - proběhlo to a nešlo přečíst všechno, takže odpověď je částečná
To je celý mechanismus: výchozí stav pořízený, když byl stroj prokazatelně v pořádku, a otázka kladená každou noc. První noc, kdy odpoví 5, se to někdo dozví hned první noc, a ne ráno, kdy se něco rozbije.