สแนปช็อตและดริฟต์
เครื่องมืออื่นทุกตัวบอกแค่ว่าเครื่องหน้าตาเป็นอย่างไรตอนนี้ คำถามที่ผู้ดูแลระบบมีจริงๆ คือ ต่างจากตอนที่มันยังใช้งานได้อย่างไร และไม่มีอะไรบน Windows แบบปกติตอบได้
สแนปช็อตเก็บอะไรไว้
เครื่องทั้งเครื่อง ณ ช่วงเวลาหนึ่ง ทุกบริการและไดรเวอร์ พร้อมประเภทการเริ่มต้น บัญชี พาธการเปิดใช้งานและอาร์กิวเมนต์ แฮชและผู้ลงลายเซ็นของไฟล์ที่มันรัน การพึ่งพาและสิ่งที่ขึ้นอยู่กับมัน ทริกเกอร์ สิทธิพิเศษที่ต้องใช้ ประเภท SID และ security descriptor บวกชื่อเครื่อง บัญชีที่สร้างมัน และบัญชีนั้นเป็นผู้ดูแลระบบหรือไม่
bws snapshot create before.json --note "before the patch"
เป็น JSON ที่มีหนึ่งฟิลด์ต่อบรรทัด นี่ตั้งใจ: หมายความว่าสแนปช็อตเก็บในรีโพซิทอรีได้และ git diff อ่านได้ ดังนั้นการเปรียบเทียบในตัวเครื่องมือไม่ใช่วิธีเดียวที่จะดูมัน
เก็บมันตามสิ่งที่มันเป็น สแนปช็อตอธิบายทั้งเครื่อง ลงไปถึงทุกพาธการเปิดใช้งานและ security descriptor มันถูกเขียนด้วยสิทธิ์ที่ไดเรกทอรีมีอยู่แล้ว และเครื่องมือไม่จำกัดอะไรให้แคบลง ไดเรกทอรีที่คนอื่นอ่านได้จึงเป็นที่ที่พวกเขาอ่านทั้งหมดนั้นได้
แล้วถามว่าต่างอย่างไร
$ 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 ใต้รายการนั้น และสรุปนับรายการเหล่านั้น ดังนั้น diff ที่บอกว่า ไม่มีอะไรเปลี่ยน หมายถึงไม่มีอะไรเปลี่ยนในสิ่งที่ทั้งสองฝั่งมองเห็น
- สแนปช็อตที่ยกระดับสิทธิ์เทียบกับอันที่ไม่ยกระดับจะโกหก โดยรายงานรายการว่าถูกลบทั้งที่ไม่มีใครลบ แต่ละไฟล์บันทึกว่าบัญชีที่สร้างมันเป็นผู้ดูแลระบบหรือไม่ และการเปรียบเทียบบอกเรื่องนี้
- สองไฟล์ ไม่ใช่แค่ไฟล์กับเครื่องนี้ สร้างหนึ่งชุดบนสเตจจิงและหนึ่งชุดบนโปรดักชันแล้ว diff กันที่ไหนก็ได้ คำตอบของ ทำไมสเตจจิงต่างออกไป ไม่ต้องมีเครื่องไหนอยู่ตรงนั้น
หน้าต่างทำสิ่งเดียวกันภายใต้ 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 จะมีคนรู้ในคืนแรก ไม่ใช่ในเช้าวันที่บางอย่างพัง