Знімки й дрейф
Кожен інший інструмент каже, як машина виглядає зараз. Запитання, яке насправді має адміністратор, - що відрізняється від того, коли все працювало - і ніщо в стандартній Windows на нього не відповідає.
Що містить знімок
Вся машина в один момент: кожна служба й драйвер із типом запуску, обліковим записом, шляхом запуску й аргументами, хешем і підписантом файлу, який він запускає, його залежностями та тим, що залежить від нього, його тригерами, потрібними привілеями, типом SID і дескриптором безпеки - плюс ім'я машини, обліковий запис, що його зробив, і чи був цей обліковий запис адміністратором.
bws snapshot create before.json --note "before the patch"
Це JSON з одним полем на рядок. Це зроблено навмисно: знімок потрапляє в репозиторій, і git diff його читає, тож власне порівняння інструмента - не єдиний спосіб на нього подивитися.
Зберігайте його так, як він того вартий. Знімок описує всю машину, до кожного шляху запуску й дескриптора безпеки. Він записується з тими правами, які вже має його каталог, і інструмент нічого не звужує - тож каталог, який можуть читати інші люди, дає їм змогу прочитати все це.
А потім спитайте, що відрізняється
$ 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.
- Конфігурація й стан виконання повідомляються окремо. Два знімки з різницею в день відрізняються тим, що випадково працює, і майже ніщо з цього не дрейф. Змішані разом, єдиний рядок, що має значення, - тип запуску, який хтось змінив, - тоне під сорока тими, що ні.
- Те, що не вдалося порівняти, перелічено, а не приховано. Поле, якого один із двох знімків ніколи не читав, бо той сеанс не мав на нього прав, виходить як not compared під своїм записом, а підсумок рахує такі записи. Тож порівняння, що каже нічого не змінилося, означає, що нічого не змінилося в тому, що бачили обидві сторони.
- Знімок з підвищеними правами проти знімка без них збрехав би, повідомляючи про видалення записів, яких ніхто не видаляв. Кожен файл записує, чи був обліковий запис, що його зробив, адміністратором, і порівняння про це каже.
- Два файли, а не лише файл і ця машина. Зробіть один на тестовому середовищі й один на робочому та порівняйте їх будь-де - відповідь на чому тестове середовище відрізняється не потребує присутності жодної з машин.
Вікно робить те саме в розділі Audit.... Take snapshot... записує той самий файл, із нотаткою, якщо ви її введете, а Compare with this machine... або Compare two snapshots... показує, що змінилося, замість списку, по одному рядку на поле, з усім, що робить порівняння менш ніж точним, сказаним над таблицею. Show звужує його до відмінностей або до одного поля, а Export... записує його у файл CSV.
Код завершення - це суть
--exit-code завершується кодом 5, коли конфігурація відрізняється: запис додано чи видалено, або один налаштовано інакше. Служба, що просто сама зупинилася чи запустилася, повідомляється й не враховується, так само як і копії для кожного користувача, які Windows робить для кожного сеансу ввійшовшого користувача, - їх пропущено й пораховано. Це не збій: дрейф - це те, що цей інструмент створено знаходити, а його знаходження не є збоєм, - тому в нього власне число, а не позичене в того, що означає, що щось пішло не так.
# день, коли машина вводиться в експлуатацію
bws snapshot create C:\baselines\web01.json --note "after the build"
# щоночі, із запланованої задачі
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - немає дрейфу конфігурації
# 5 - конфігурація пішла в дрейф, і drift.json каже, що саме
# 3 - виконалося й не змогло прочитати все, тож відповідь часткова
Це весь механізм: еталонний стан, знятий, коли машина була відома як справна, і запитання, яке ставлять щоночі. Якщо першої ночі відповідь 5, хтось дізнається про це першої ж ночі, а не вранці, коли щось зламається.