เลือกบัญชีบริการ Windows — LocalSystem, บัญชีเสมือน และ gMSA

· · Windows, บริการ Windows, บัญชีบริการ, gMSA, LocalSystem, บัญชีเสมือน, ความปลอดภัย, Active Directory, สิทธิ์น้อยที่สุด

“บริการภายในที่เราเคยรันเป็น LocalSystem ถูกชี้ในตรวจความปลอดภัยว่า ‘สิทธิ์เกิน’ จะเปลี่ยนเป็นอะไร” “บริการเข้าถึงโฟลเดอร์แชร์ไม่ได้ จึงรันเป็นผู้ใช้โดเมน พอรหัสผ่านหมดอายุบริการหยุด จึงตั้งไม่ให้หมดอายุแล้วเขียนเป็นข้อความธรรมดาในรันบุ๊ก” — ในงานปรึกษาเรื่องบริการ Windows ของลูกค้า สองข้อนี้เป็นของประจำ

สิ่งที่ทั้งสองหน้างานมีร่วมกันคือ บัญชีล็อกออนของบริการถูกแช่แข็งเป็น “การตั้งค่าที่บังเอิญทำงานได้” ไม่ใช่การตัดสินใจออกแบบ บริการ Windows รันในบริบทความปลอดภัยของบัญชีใดบัญชีหนึ่งเสมอ และบัญชีนั้นตัดสินทั้งหมดว่าทำอะไรได้ในเครื่อง จากฝั่งไกลของเครือข่ายมันดูเป็นใคร และใครจัดการรหัสผ่าน ปล่อยเป็นค่าเริ่มต้นแล้วช่องโหว่ในบริการหนึ่งนำไปสู่การยึดทั้งเครื่องโดยตรง และรหัสผ่านข้อความธรรมดากระจายเข้าสู่รันบุ๊กและสคริปต์

สามสิ่งที่บัญชีล็อกออนตัดสินบริการรันในบริบทความปลอดภัยของบัญชีใดบัญชีหนึ่งเสมอ และบัญชีนั้นตัดสินทั้งหมดว่าทำอะไรได้ในเครื่อง จากฝั่งไกลของเครือข่ายมันดูเป็นใคร และใครจัดการรหัสผ่านบัญชีล็อกออนของบริการสิ่งที่ทำได้ในเครื่องจากฝั่งไกลของเครือข่ายมันดูเป็นใครใครจัดการรหัสผ่าน

ภาพ 1: การเลือกบัญชีล็อกออนคือการตัดสินใจออกแบบที่ตัดสินสิทธิ์ท้องถิ่น ตัวตนเครือข่าย และการจัดการรหัสผ่านพร้อมกัน

มีตัวเลือกที่มีผลหกแบบ — LocalSystem, LocalService, NetworkService, บัญชีเสมือน (NT SERVICE\<ชื่อบริการ>), ผู้ใช้โดเมน และ gMSA (group Managed Service Account) มุ่งที่เจ้าหน้าที่ไอทีในธุรกิจขนาดกลางและเล็กและนักพัฒนาแอป Windows บทความนี้จัดสิทธิ์ ตัวตนเครือข่าย และการจัดการรหัสผ่านของทั้งหกไว้ในตารางเดียวและสรุปไหลตัดสินใจ จากแหล่งปฐมภูมิ Microsoft Learn ณ สิงหาคม 2026

วิธีสร้างบริการเอง (เลือกระหว่าง Task Scheduler กับบริการ การอิมพลีเมนต์ด้วย .NET Worker Service) อยู่ใน “วิธีสร้างและดำเนินงานบริการ Windows” บทความนี้โฟกัสที่ “บัญชีล็อกออน” ซึ่งเป็นจุดที่เกิดอุบัติเหตุมากที่สุด

1. ข้อสรุปก่อน

  • เมื่อลังเล บัญชีเสมือนคือผู้สมัครอันดับแรกสำหรับบริการที่จบในเครื่องเดียว และ gMSA คือผู้สมัครอันดับแรกสำหรับบริการที่เข้าถึงทรัพยากรในโดเมนด้วยตัวตนเฉพาะบริการ Microsoft ก็ให้แนวทางใช้บัญชีที่จัดการ (MSA / บัญชีเสมือน) ทุกเมื่อที่ทำได้12
  • อย่าเลือก LocalSystem เพราะ “มันทำงาน” โทเคนมี SYSTEM และ BUILTIN\Administrators และถือสิทธิ์แรงอย่าง SeDebugPrivilege ดังนั้นการถูกยึดเกือบเสียทุกอย่างบนเครื่องนั้น ค่าเริ่มต้นของ sc.exe create ที่เป็น LocalSystem คือแหล่งเพาะอุบัติเหตุนี้34
  • ความต่างของ LocalService กับ NetworkService คือตัวตนเครือข่าย สิทธิ์ท้องถิ่นน้อยสุดทั้งคู่ แต่ฝั่งไกล LocalService ดูเป็นนิรนาม และ NetworkService ดูเป็นบัญชีคอมพิวเตอร์5
  • บัญชีเสมือน (NT SERVICE\<ชื่อบริการ>) คือค่าเริ่มต้นสมัยใหม่ที่แยกตัวตนต่อบริการได้โดยไม่ต้องจัดการรหัสผ่าน ระบุ “NT SERVICE\ชื่อบริการ” บน ACL ได้โดยตรง และบัญชีบริการค่าเริ่มต้นของ SQL Server ก็เป็นแบบนี้เช่นกัน61
  • เมื่อ LocalSystem, NetworkService หรือบัญชีเสมือนออกสู่เครือข่าย มันกลายเป็นบัญชีคอมพิวเตอร์ (DOMAIN\ชื่อคอมพิวเตอร์$) การให้ PC$ บน ACL ของโฟลเดอร์แชร์หรือ SQL Server มักทำให้ไม่ต้องใช้ผู้ใช้โดเมน36
  • การตั้งค่าที่ใช้ผู้ใช้โดเมนกับบริการกลายเป็นหนี้ทั้งด้านการดำเนินงานรหัสผ่านและ Kerberoasting SCM ล็อกออนด้วยรหัสผ่านที่เก็บไว้ ดังนั้นหมดอายุกลายเป็นความล้มเหลวตอนเริ่ม และ “ไม่หมดอายุ + บันทึกข้อความธรรมดา” ที่เลี่ยงนั้นกลายเป็นของขวัญให้ผู้โจมตี78
  • gMSA ให้ Active Directory สร้างและหมุนรหัสผ่านอัตโนมัติ ข้อกำหนดคือโดเมนและคีย์ราก KDS และตั้งบริการเป็น “DOMAIN\ชื่อบัญชี$” โดยเว้นช่องรหัสผ่านว่าง บางแอปไม่รองรับ จึงต้องตรวจสอบล่วงหน้า910
  • การเปลี่ยนบัญชีเปลี่ยนสมมติฐานของโปรไฟล์ %TEMP% และ DPAPI ข้อมูลที่ปกป้องด้วย DPAPI ของบัญชีเก่าถอดรหัสด้วยบัญชีใหม่ไม่ได้
  • สินค้าคงคลังของสถานะปัจจุบันยืนยันได้จากบัญชีล็อกออนของรายการบริการและจากเหตุการณ์ ID 4624 (ประเภทล็อกออน 5)11

สรุปบทความนี้ในประโยคเดียว: ทำให้การตั้งค่าที่ “ไม่ให้รหัสผ่านของคนแก่บริการ” (บัญชีในตัว บัญชีเสมือน gMSA) เป็นค่าเริ่มต้น และถือผู้ใช้โดเมนเป็นทางเลือกสุดท้าย

2. ภาพรวมของตัวเลือก — บัญชีล็อกออนหกแบบในตารางเดียว

ทบทวนหนึ่งก้าวก่อน ตอนบริการเริ่ม Service Control Manager (SCM) ล็อกออนเป็นบัญชีที่ตั้งไว้ และเมื่อสำเร็จจะสร้าง access token แล้วกำหนดให้โพรเซสบริการ หลังจากนั้นการเข้าถึงทรัพยากรทุกครั้ง — ไฟล์ ไปป์ และคล้ายกัน — ถูกตัดสินโดยจับคู่โทเคนนี้กับ ACL7 ดังนั้นการเลือกบัญชีล็อกออนคือ การออกแบบที่ตัดสินเนื้อหาของโทเคนที่ส่งให้โพรเซสบริการ นี่คือหกตัวเลือก

สิ่งที่ SCM ทำตอนบริการเริ่มSCM ล็อกออนเป็นบัญชีที่ตั้งไว้ เมื่อสำเร็จสร้าง access token และกำหนดให้โพรเซสบริการ หลังจากนั้นการเข้าถึงทรัพยากรถูกตัดสินโดยจับคู่โทเคนกับ ACLใช่ไม่SCMล็อกออนเป็นบัญชีที่ตั้งไว้สร้าง access tokenกำหนดให้โพรเซสบริการเข้าถึงไฟล์หรือไปป์ACL อนุญาตหรือไม่เข้าถึงสำเร็จถูกปฏิเสธการเข้าถึง

ภาพ 2: การเข้าถึงทรัพยากรทุกครั้งของบริการถูกตัดสินโดยจับคู่โทเคนที่ SCM สร้างตอนเริ่มกับ ACL

บัญชี สิทธิ์ท้องถิ่น ตัวตนเครือข่าย การจัดการรหัสผ่าน การใช้ทั่วไป
LocalSystem เกือบไม่จำกัด (SYSTEM+Administrators) บัญชีคอมพิวเตอร์ (PC$) ไม่ต้อง (ไม่มีรหัสผ่าน) บริการพิเศษที่รันเป็นหนึ่งเดียวกับ OS
LocalService น้อยสุด (ระดับ Users) นิรนาม ไม่ต้อง ประมวลผลท้องถิ่นที่ไม่ต้องการตัวตนเครือข่าย
NetworkService น้อยสุด (ระดับ Users) บัญชีคอมพิวเตอร์ (PC$) ไม่ต้อง ประมวลผลสิทธิ์ต่ำที่ตัวตนระดับเครื่องพอ
บัญชีเสมือน NT SERVICE\<ชื่อ> น้อยสุด + ให้ทีละรายการบน ACL บัญชีคอมพิวเตอร์ (PC$) ไม่ต้อง (จัดการอัตโนมัติ) ค่าเริ่มต้นของบริการธุรกิจที่รันบนเซิร์ฟเวอร์เดียว
ผู้ใช้โดเมน เฉพาะที่คุณให้ ผู้ใช้นั้นเอง ด้วยมือ (หมดอายุ รั่ว หมุน ล้วนอยู่ที่คน) ทางเลือกสุดท้ายสำหรับแอปที่ไม่รองรับ gMSA
gMSA เฉพาะที่คุณให้ gMSA นั้นเอง AD สร้างและหมุนอัตโนมัติ เมื่อสภาพแวดล้อมโดเมนต้องการตัวตนเฉพาะบริการ

LocalSystem, LocalService, NetworkService และบัญชีเสมือนล้วน ไม่มีแนวคิดรหัสผ่านเลย ที่มีล็อกออนด้วยรหัสผ่านที่เก็บใน SCM (= หมดอายุและรั่วได้) มีเพียงผู้ใช้โดเมนและผู้ใช้ท้องถิ่น73

ด้านล่างเราขุดตารางนี้ทีละแถว

3. LocalSystem มีปัญหาอะไร

3.1. แรงกว่า “รันในฐานะผู้ดูแลระบบ” อีก

LocalSystem (ชื่อแสดง Local System, NT AUTHORITY\SYSTEM) เป็นบัญชีที่กำหนดไว้ล่วงหน้าที่ SCM ใช้ และถือสิทธิ์กว้างบนคอมพิวเตอร์ท้องถิ่น โทเคนมี SID ของ NT AUTHORITY\SYSTEM และ BUILTIN\Administrators และเข้าถึงออบเจ็กต์ส่วนใหญ่บนระบบได้ ต่อไป SeDebugPrivilege ที่ดีบักโพรเซสอื่นได้ และ SeTcbPrivilege ที่ทำหน้าที่เป็นส่วนของ OS ถูกเปิดเป็นค่าเริ่มต้น3

ความแรงนี้เทียบเท่าขนาดความเสียหายเมื่อถูกยึด หากบริการที่รันเป็น LocalSystem มีช่องโหว่รันโค้ดตามอำเภอใจหนึ่งจุด ผู้โจมตีในลมหายใจเดียวถึงการอ่านและแก้ไขไฟล์ของผู้ใช้ทุกคนบนเครื่องนั้น (SYSTEM มี Full Control เป็นค่าเริ่มต้นบน NTFS5) การอ่านหน่วยความจำของโพรเซสอื่นผ่าน SeDebugPrivilege และการขโมยข้อมูลรับรองแล้วเคลื่อนที่ด้านข้างจากที่นั่น (จุดเริ่มของ Pass-the-Hash และคล้ายกัน) ลูกโซ่การขโมยข้อมูลรับรองและการเคลื่อนที่ด้านข้างเหมือนที่ครอบคลุมใน “อธิบาย NTLM และ Kerberos ด้วยแผนภาพ” และ “คู่มือปฏิบัติ Windows LAPS

ความเสียหายเมื่อบริการ LocalSystem ถูกยึดหากบริการที่รันเป็น LocalSystem มีช่องโหว่รันโค้ดตามอำเภอใจหนึ่งจุด ผู้โจมตีถึงการอ่านและแก้ไขไฟล์ของผู้ใช้ทุกคน อ่านหน่วยความจำโพรเซสอื่น และขโมยข้อมูลรับรองแล้วเคลื่อนที่ด้านข้างช่องโหว่รันโค้ดตามอำเภอใจหนึ่งจุดผู้โจมตีได้สิทธิ์ SYSTEMอ่านและแก้ไขไฟล์อ่านหน่วยความจำโพรเซสอื่นขโมยข้อมูลรับรองเคลื่อนที่ด้านข้างไปเครื่องอื่น

ภาพ 3: ช่องโหว่หนึ่งจุดในบริการ LocalSystem ให้ผู้โจมตีในลมหายใจเดียวถึงการยึดทั้งเครื่องและจุดเริ่มเคลื่อนที่ด้านข้าง

3.2. ทำไมยังถูกเลือก

เหตุผลเรียบง่าย: มันคือค่าเริ่มต้น และ access-denied ไม่ปรากฏ ค่าเริ่มต้นเมื่อละ obj= บน sc.exe create คือ LocalSystem4 และโค้ดตัวอย่างเก่ากับเทมเพลตตัวติดตั้งจำนวนมากยังสมมติ LocalSystem เพราะคุณพ้นจากข้อผิดพลาดสิทธิ์ระหว่างพัฒนา โครงสร้างที่ผลิตจำนวนมาก “ทำงานแล้วจึงปล่อยไว้” จึงมีอยู่ เอกสารของ Microsoft เองก็ระบุว่าบริการส่วนใหญ่ไม่ต้องการระดับสิทธิ์สูงขนาดนี้ และหากไม่ต้องการควรพิจารณาใช้ LocalService หรือ NetworkService3

โครงสร้างที่ทำให้ LocalSystem ยังถูกเลือกค่าเริ่มต้นของ sc.exe create คือ LocalSystem และโค้ดตัวอย่างกับเทมเพลตเก่าก็สมมติ LocalSystem ดังนั้น access-denied ไม่ปรากฏระหว่างพัฒนา และการตั้งค่าทำงานแล้วจึงปล่อยไว้ถูกผลิตจำนวนมากค่าเริ่มต้นของ sc.exe createถูกสร้างเป็น LocalSystemตัวอย่างและเทมเพลตเก่าไม่มี access-denied ระหว่างพัฒนาทำงานแล้วจึงปล่อยไว้บริการสิทธิ์เกินถูกผลิตจำนวนมาก

ภาพ 4: ค่าเริ่มต้นและประสบการณ์พัฒนา “ไม่มี access-denied” ผลิตจำนวนมากบริการที่ถูกแช่แข็งเป็น LocalSystem

3.3. ความต่างจาก TrustedInstaller — LocalSystem ก็ไม่ไร้ขีดจำกัด

เรียก LocalSystem ว่า “บัญชีที่แรงที่สุดของ Windows” ไม่แม่น Windows Resource Protection (WRP) ตั้งแต่ Windows Vista อนุญาตการเปลี่ยนไฟล์ระบบ OS สำคัญ โฟลเดอร์ และคีย์รีจิสทรีเฉพาะ TrustedInstaller (บริการ Windows Modules Installer) และแม้ SYSTEM หรือผู้ดูแลระบบก็ได้ access denied ตอนเขียนทับ12 “คุณต้องได้รับอนุญาตจาก TrustedInstaller” ของ Explorer คือกลไกนี้ พูกลับกัน LocalSystem ถึงเกือบทุกอย่างนอกพื้นที่ที่ WRP ปกป้อง และโดยปกติไม่มีเหตุผลให้สิ่งนั้นแก่บริการธุรกิจ

ความสัมพันธ์ระหว่างพื้นที่ที่ WRP ปกป้องกับ TrustedInstallerการเปลี่ยนไฟล์ระบบสำคัญและคีย์รีจิสทรีที่ WRP ปกป้องอนุญาตเฉพาะ TrustedInstaller และแม้ SYSTEM หรือผู้ดูแลระบบก็ได้ access deniedเปลี่ยนได้Access deniedเกือบทุกอย่างได้รับอนุญาตTrustedInstallerไฟล์ระบบที่ WRP ปกป้องและคล้ายกันSYSTEM และผู้ดูแลระบบนอกพื้นที่ที่ WRP ปกป้อง

ภาพ 5: LocalSystem ก็ไม่ไร้ขีดจำกัด การเปลี่ยนพื้นที่ที่ WRP ปกป้องอนุญาตเฉพาะ TrustedInstaller

3.4. กรณีที่ LocalSystem สมเหตุสมผล

สิ่งที่สมเหตุสมผลเป็นพิเศษคือบริการที่ สิทธิ์ที่ต้องการเกินระดับผู้ดูแลระบบตั้งแต่แรก — ทำงานใกล้ชิดกับไดรเวอร์อุปกรณ์ ดำเนินงานฐานความปลอดภัยของ OS จัดการบริการหรือเซสชันอื่น และคล้ายกัน ซอฟต์แวร์อย่างเอเจนต์สำรองหรือ EDR เข้าข่าย แม้ตอนนั้นก็คุ้มที่จะยืนยันว่ามีเส้นทางโค้ดที่ใช้สิทธิ์นั้นจริง และพิจารณาว่างานที่ต้องการสิทธิ์แยกได้หรือไม่ (วิธีแยก ดู “เมื่อใดที่คุณต้องการสิทธิ์ผู้ดูแลระบบบน Windows จริง ๆ”)

4. LocalService และ NetworkService — บัญชีในตัวที่มีสิทธิ์น้อยที่สุด

LocalService (NT AUTHORITY\LOCAL SERVICE, SID: S-1-5-19) และ NetworkService (NT AUTHORITY\NETWORK SERVICE, SID: S-1-5-20) เป็นบัญชีในตัวที่เตรียมสำหรับบริการสิทธิ์ต่ำ ทั้งคู่ถือสิทธิ์น้อยสุดในเครื่อง และทำได้น้อยกว่าสมาชิกกลุ่ม Users ไม่มาก51

ความต่างของทั้งคู่มีจุดเดียว: จากฝั่งไกลของเครือข่ายพวกมันดูเป็นใคร5

  • LocalService: เชื่อมต่อฝั่งไกลด้วย ข้อมูลรับรองนิรนาม เข้าถึงทรัพยากรที่ต้องยืนยันตัวตนไม่ได้
  • NetworkService: นำเสนอ ข้อมูลรับรองของคอมพิวเตอร์ ให้ฝั่งไกล (ในสภาพแวดล้อมโดเมน คือ DOMAIN\ชื่อคอมพิวเตอร์$)

การแยกคือ LocalService หาก “ไม่ออกสู่เครือข่าย หรือถ้าออกก็ไม่ต้องการตัวตน” และ NetworkService หาก “ต้องการเข้าถึงทรัพยากรในโดเมนด้วยตัวตนของเครื่อง”

ความต่างของ LocalService กับ NetworkServiceสิทธิ์ท้องถิ่นน้อยสุดทั้งคู่ แต่ฝั่งไกล LocalService เชื่อมด้วยข้อมูลรับรองนิรนาม และ NetworkService นำเสนอข้อมูลรับรองของคอมพิวเตอร์LocalServiceเชื่อมด้วยข้อมูลรับรองนิรนามทรัพยากรที่ต้องยืนยันตัวตนเป็นไปไม่ได้NetworkServiceนำเสนอข้อมูลรับรองของคอมพิวเตอร์ในสภาพแวดล้อมโดเมนดูเป็น PC$

ภาพ 6: สิทธิ์ท้องถิ่นเท่ากันที่น้อยสุด แต่ตัวตนที่มองจากฝั่งไกลของเครือข่ายแยกเป็นนิรนามหรือบัญชีคอมพิวเตอร์

ทั้งคู่มีจุดอ่อนจากมุมสมัยใหม่ บัญชีเดียวกันถูกหลายบริการใช้ร่วม หากห้าบริการรันเป็น LocalService ตราบที่ ACL เป็นต่อบัญชี ทั้งห้าเข้าถึงทรัพยากรของกันและกันได้ SQL Server ไม่รองรับบัญชี Local Service ด้วยเหตุเดียวกัน: เป็นบัญชีร่วมและแยกจากบริการอื่นไม่ได้1

บัญชีร่วมแยกไม่ได้หากหลายบริการใช้ LocalService เดียวกัน ตราบที่ ACL เป็นต่อบัญชี พวกมันเข้าถึงทรัพยากรของกันและกันได้บริการ ALocalService เดียวกันบริการ Bบริการ Cเข้าถึงทรัพยากรของกันและกันได้เพราะ ACL เป็นต่อบัญชี

ภาพ 7: บริการที่ใช้บัญชีเดียวกันแยกทรัพยากรของกันและกันด้วย ACL ไม่ได้

การแก้ “คงสิทธิ์ต่ำ แต่แยกต่อบริการ” คือหัวข้อถัดไป บัญชีเสมือน

5. บัญชีเสมือน (NT SERVICE\<ชื่อบริการ>) — ค่าเริ่มต้นสมัยใหม่

5.1. มีตัวตนต่อบริการโดยไม่ต้องมีรหัสผ่าน

บัญชีเสมือนคือ “บัญชีท้องถิ่นที่จัดการ” ที่มีตั้งแต่ Windows Server 2008 R2 / Windows 7 เป็นต้นไป มีสามลักษณะ6

  • บัญชี ถูกจัดการอัตโนมัติ ไม่ต้องสร้างหรือตั้งรหัสผ่าน
  • ชื่อคือ NT SERVICE\<ชื่อบริการ> และกลายเป็น ตัวตนเฉพาะของแต่ละบริการ
  • ในสภาพแวดล้อมโดเมน เข้าถึงเครือข่ายด้วย ข้อมูลรับรองของบัญชีคอมพิวเตอร์ (DOMAIN\ชื่อคอมพิวเตอร์$)

กล่าวคือ มันคงข้อดี “ไม่จัดการรหัสผ่าน” ของ LocalService/NetworkService และตัดข้อเสีย “แยกไม่ได้เพราะบัญชีร่วม” นั่นก็เป็นเหตุที่การติดตั้ง SQL Server ใช้บัญชีเสมือนอย่าง NT SERVICE\MSSQLSERVER เป็นค่าเริ่มต้น1

สิ่งที่บัญชีเสมือนทำให้เข้ากันได้บัญชีเสมือนคงข้อดีไม่จัดการรหัสผ่านของ LocalService และ NetworkService ตัดข้อเสียแยกไม่ได้เพราะร่วม และมีตัวตนเฉพาะต่อบริการคงตัดข้อดี (ไม่จัดการรหัสผ่าน)บัญชีเสมือนข้อเสีย (แยกไม่ได้เพราะร่วม)ตัวตนเฉพาะต่อบริการไม่ต้องสร้างหรือตั้งรหัสผ่าน

ภาพ 8: บัญชีเสมือนคงข้อดีของบัญชีในตัวและตัดเฉพาะข้อเสียแยกไม่ได้เพราะร่วม

5.2. เขียน “NT SERVICE\ชื่อบริการ” บน ACL ได้โดยตรง

ความสะดวกในทางปฏิบัติคือ คุณเพิ่มเฉพาะบริการนั้นเข้า ACL ตามชื่อได้ “เฉพาะบริการนี้เขียนโฟลเดอร์ข้อมูลนี้ได้” ทำให้จริงได้โดยไม่สร้างกลุ่มและไม่จัดการรหัสผ่าน

# เปลี่ยนบัญชีล็อกออนของบริการเป็นบัญชีเสมือน
# ค่าของ obj= คือ "NT SERVICE\ชื่อบริการ" อย่าระบุรหัสผ่าน
sc.exe config MyAppService obj= "NT SERVICE\MyAppService"

# ยืนยันการตั้งค่า (ตรวจ SERVICE_START_NAME)
sc.exe qc MyAppService

# ให้สิทธิ์แก้ไขบนโฟลเดอร์ข้อมูลเฉพาะบริการนี้
icacls "C:\ProgramData\MyApp" /grant "NT SERVICE\MyAppService:(OI)(CI)M"

ใน GUI ที่ services.msc เปิดคุณสมบัติของบริการ → แท็บ “Log On” → ใส่ NT SERVICE\ชื่อบริการ ใน “This account” และ เว้นช่องรหัสผ่านว่าง (สำหรับบัญชีเสมือนหรือ MSA การไม่ระบุรหัสผ่านคือข้อกำหนดของ SCM) หลังเปลี่ยน การเริ่มบริการใหม่จะนำไปใช้

5.3. ข้อจำกัด — นอกเครื่องมันไม่ใช่ “บริการนั้น”

ตัวตนของบัญชีเสมือนเป็นท้องถิ่นเครื่องและโดเมนไม่รู้จัก บนเครือข่ายมันยุบเป็นบัญชีคอมพิวเตอร์ดังที่อธิบายภายหลัง ดังนั้น ฝั่งไกลแยกไม่ได้ว่า “เป็นบริการใด” และคุณก็แชร์ตัวตนเดียวกันข้ามหลายเซิร์ฟเวอร์ไม่ได้10

ตัวตนบัญชีเสมือนยุบนอกเครื่องบัญชีเสมือนที่เฉพาะต่อบริการในเครื่องก็ยุบเป็นบัญชีคอมพิวเตอร์บนเครือข่าย และฝั่งไกลแยกไม่ได้ว่าเป็นบริการใดบัญชีเสมือน Aบัญชีคอมพิวเตอร์ PC$บัญชีเสมือน Bตัวตนที่ฝั่งไกลมองเห็นแยกไม่ได้ว่าเป็นบริการใด

ภาพ 9: แม้มีตัวตนเฉพาะในเครื่อง จากฝั่งไกลของเครือข่ายทุกบริการดูเป็น PC$ เดียวกัน

ช่วงที่ข้อจำกัดนี้ — ต้องการตัวตนเฉพาะบริการที่ฝั่งไกลของเครือข่าย ต้องการตัวตนเดียวกันบนหลายเซิร์ฟเวอร์ — กลายเป็นปัญหา คือตอนที่ gMSA (บทที่ 8) ถูกเรียก

6. ตัวตนเมื่อออกสู่เครือข่าย — ปฏิบัติของบัญชีคอมพิวเตอร์ (PC$)

6.1. “บริการเข้าถึงโฟลเดอร์แชร์ไม่ได้” คือความเข้าใจผิด

บนเครื่องที่เข้าร่วมโดเมน เมื่อบริการที่รันเป็น LocalSystem, NetworkService หรือบัญชีเสมือนเข้าถึงทรัพยากรไกล มันยืนยันตัวตนในฐานะบัญชีคอมพิวเตอร์ (DOMAIN\ชื่อคอมพิวเตอร์$)36 การปรึกษาเปิดเรื่องจำนวนมากที่ว่า “เข้าถึงโฟลเดอร์แชร์ไม่ได้ จึงทำให้เป็นผู้ใช้โดเมน” จริง ๆ แล้วถูกแก้ด้วยสิ่งนี้ ACL ปลายทางแค่ไม่อนุญาต PC$

การเข้าถึงไกลในฐานะบัญชีคอมพิวเตอร์บริการ LocalSystem, NetworkService หรือบัญชีเสมือนบนเครื่องที่เข้าร่วมโดเมนยืนยันตัวตนกับฝั่งไกลในฐานะบัญชีคอมพิวเตอร์ และหาก ACL ปลายทางอนุญาต PC$ ก็เข้าถึงได้ใช่ไม่บริการ (LocalSystem บัญชีเสมือน และคล้ายกัน)ยืนยันตัวตนเป็น PC$ACL ปลายทางอนุญาต PC$ หรือไม่เข้าถึงโฟลเดอร์แชร์หรือฐานข้อมูลสำเร็จถูกปฏิเสธการเข้าถึง

ภาพ 10: ในสภาพแวดล้อมโดเมน การให้ PC$ บน ACL ปลายทางอย่างเดียวก็สร้างการเข้าถึงไกลโดยไม่ต้องมีผู้ใช้โดเมน

การให้ฝั่งไฟล์เซิร์ฟเวอร์เหมือนการดำเนินการ ACL ทั่วไป ระบุ ชื่อคอมพิวเตอร์$ เป็นชื่อบัญชี (ในกล่องเลือกออบเจ็กต์ของ GUI ให้รวม “Computers” ในประเภทออบเจ็กต์)

# ฝั่งไฟล์เซิร์ฟเวอร์: ให้บริการบน APPSV01 สิทธิ์แก้ไขบนโฟลเดอร์แชร์
# ต้องให้ทั้งสิทธิ์แชร์และสิทธิ์ NTFS
Grant-SmbShareAccess -Name "AppData" -AccountName "CORP\APPSV01$" -AccessRight Change -Force
icacls "D:\Shares\AppData" /grant "CORP\APPSV01$:(OI)(CI)M"

SQL Server ก็เช่นกัน: สร้างบัญชีคอมพิวเตอร์เป็นล็อกอินแล้วสตริงเชื่อมต่อผ่านด้วย Integrated Security=true โดยไม่มีรหัสผ่าน

-- ฝั่งเซิร์ฟเวอร์ฐานข้อมูล: อนุญาตการยืนยันตัวตนรวม Windows จากบริการบน APPSV01
CREATE LOGIN [CORP\APPSV01$] FROM WINDOWS;

6.2. รู้ขีดจำกัดของแนวทาง PC$

แนวทางนี้มีสองขีดจำกัด

  1. ความละเอียดต่อเครื่อง LocalSystem, NetworkService และบริการบัญชีเสมือนทุกตัวที่รันบนเครื่องเดียวกันล้วนดูเป็น PC$ เดียวกันจากฝั่งไกล คุณ “อนุญาตเฉพาะบริการนี้” ที่ปลายทางไม่ได้ และตรวจสอบว่าบริการใดใช้บัญชีนั้นก็ไม่ได้2
  2. ใช้ในสภาพแวดล้อมเวิร์กกรุ๊ปไม่ได้ บัญชีคอมพิวเตอร์เป็นออบเจ็กต์ Active Directory ดังนั้นเครื่องที่ไม่ได้เข้าร่วมโดเมนไม่มี คุณต้องการการออกแบบที่จัดการข้อมูลรับรองของบัญชีปลายทางอย่างชัดเจน

เมื่อต้องการข้ามขีดจำกัด 1 คำตอบปี 2026 ไม่ใช่ผู้ใช้โดเมนในบทถัดไป… แต่ข้ามปัญหานั้นแล้วไปที่ gMSA

สองขีดจำกัดของแนวทาง PC$การยืนยันตัวตนเป็น PC$ มีความละเอียดระดับเครื่องจึงไม่อนุญาตหรือตรวจสอบต่อบริการได้ และในเวิร์กกรุ๊ปบัญชีคอมพิวเตอร์เองไม่มีจึงใช้ไม่ได้แนวทาง PC$ขีดจำกัด 1: ต่อเครื่องขีดจำกัด 2: ไม่มีเวิร์กกรุ๊ปไม่อนุญาตหรือตรวจสอบต่อบริการใช้ข้อมูลรับรองชัดเจนข้ามจากนี้: gMSA

ภาพ 11: เมื่อต้องการข้ามสองขีดจำกัดความละเอียดระดับเครื่องและเงื่อนไขโดเมน ให้ข้ามผู้ใช้โดเมนแล้วไปที่ gMSA

7. ปัญหาของการใช้ผู้ใช้โดเมนกับบริการ

7.1. ปัญหาโครงสร้างของรหัสผ่าน

หากคุณกำหนดผู้ใช้โดเมน (หรือผู้ใช้ท้องถิ่น) ให้บริการ SCM เก็บรหัสผ่านนั้นและใช้ล็อกออนทุกครั้งที่เริ่ม SCM ไม่จัดการการหมดอายุ ดังนั้น เมื่อรหัสผ่านหมดอายุการล็อกออนล้มเหลวและบริการจะไม่เริ่ม7

จากนั้นวงจรลบที่มักเห็นในสนามเริ่มต้น

  1. เกิดอุบัติเหตุบริการหยุดเพราะหมดอายุ
  2. เพื่อกันเกิดซ้ำ จึงตั้ง “รหัสผ่านไม่หมดอายุ”
  3. ไม่เคยตั้งขั้นตอนการเปลี่ยน และรหัสผ่านเดียวกันถูกเขียนเป็นข้อความธรรมดาในรันบุ๊ก สคริปต์ และ Task Scheduler ของหลายเซิร์ฟเวอร์
  4. แม้มีคนออก รหัสผ่านก็ไม่เปลี่ยน (ถ้าเปลี่ยน ไม่รู้ว่าอะไรจะหยุด)
วงจรลบของการดำเนินงานด้วยผู้ใช้โดเมนรหัสผ่านหมดอายุและบริการหยุด ตั้งไม่หมดอายุเพื่อกันเกิดซ้ำ รหัสผ่านข้อความธรรมดาแพร่เข้าสู่รันบุ๊กและสคริปต์ และแม้มีคนออกก็เปลี่ยนไม่ได้1. หมดอายุทำให้บริการหยุด2. ตั้งไม่หมดอายุเพื่อกันเกิดซ้ำ3. รหัสผ่านข้อความธรรมดาแพร่รันบุ๊ก สคริปต์ งาน4. แม้มีคนออกก็เปลี่ยนไม่ได้

ภาพ 12: เริ่มจากอุบัติเหตุหมดอายุ การไม่หมดอายุและการแพร่ของรหัสผ่านข้อความธรรมดาถูกตรึง

Microsoft ยังชี้ว่าการตั้งค่าที่ใช้บัญชีโดเมนกับบริการกินความพยายามดำเนินงานมากในการจัดการรหัสผ่านและ SPN ด้วยมือ และการบำรุงรักษาอาจนำไปสู่การหยุดบริการ1

7.2. Kerberoasting — บัญชีบริการถูกเล็ง

การโจมตีอีกแบบที่เฉพาะกับบัญชีบริการผู้ใช้โดเมนคือ Kerberoasting บริการที่รับการยืนยันตัวตน Kerberos ลงทะเบียน SPN (service principal name) บนบัญชีล็อกออน ผู้ใช้ที่ยืนยันตัวตนแล้วในโดเมนทุกคนขอตั๋วบริการไปยังบัญชีที่มี SPN ลงทะเบียนได้ ดังนั้นผู้โจมตีได้ตั๋วแล้วลอง brute-force รหัสผ่านออฟไลน์ รหัสผ่าน 10 ถึง 16 ตัวอักษรที่คนตัดสินจะต้านการโจมตีนี้ไม่ได้

ไหลของ Kerberoastingตั๋วบริการไปยังบัญชีบริการที่มี SPN ลงทะเบียนถูกผู้ใช้ที่ยืนยันตัวตนแล้วขอได้ ดังนั้นผู้โจมตีได้ตั๋วแล้วลอง brute-force รหัสผ่านออฟไลน์ผู้ใช้ที่ยืนยันตัวตนแล้วในโดเมนขอตั๋วสำหรับ SPNได้ตั๋วบริการBrute-force ออฟไลน์ราว 10 ถึง 16 ตัวอักษรจะถูกแกะ

ภาพ 13: ผู้ใช้ที่ยืนยันตัวตนแล้วทุกคนขอตั๋วได้ และรหัสผ่านความยาวที่คนตัดสินจะต้าน brute-force ออฟไลน์ไม่ได้

การตอบที่มีผลคือ ทำให้รหัสผ่านแข็งแรงถึงระดับที่คนเดาหรือแกะไม่ได้ Microsoft ยังระบุการบังคับรหัสผ่านยาว และการใช้ gMSA ที่รหัสผ่านกลายเป็นค่าสุ่มยาวที่เครื่องสร้าง8 เอกสารเดียวกันยังกล่าวถึง Kerberos armoring (FAST) แต่ FAST ปกป้องข้อมูลก่อนยืนยันตัวตนและความทนต่อการปลอม KDC มันไม่กันผู้ใช้ที่ยืนยันตัวตนแล้วขอตั๋วบริการไปยัง SPN จึงไม่ใช่สิ่งแทนความแข็งแรงของรหัสผ่านบัญชีบริการ ความสัมพันธ์ของ SPN กับ Kerberos และเงื่อนไขที่การยืนยันตัวตนตกไป NTLM ถูกวาดใน “อธิบาย NTLM และ Kerberos ด้วยแผนภาพ

7.3. หากยังใช้ผู้ใช้โดเมน

หากไม่มีทางเลือกนอกจากใช้ผู้ใช้โดเมน ด้วยเหตุเช่นแอปไม่รองรับ gMSA ให้ถือสิ่งต่อไปนี้เป็นการลดผลกระทบขั้นต่ำ

  • ทำให้รหัสผ่านเป็น 25 ตัวอักษรขึ้นไปที่สุ่มสร้าง และอย่าเขียนที่ไหนนอกเครื่องมือจัดการรหัสผ่าน (รันบุ๊ก สคริปต์ Excel ร่วม)
  • ทำให้เป็นบัญชีเฉพาะบริการและแยกต่อบริการ (อย่าใช้ร่วมกับบัญชีคน2)
  • ปฏิเสธล็อกออนเชิงโต้ตอบและ Remote Desktop และอนุญาตเฉพาะ “Log on as a service”
  • ย่อกลุ่มที่สังกัดให้เล็กสุด (เพิ่มเข้า Domain Admins อยู่นอกโต๊ะ)
  • ตั้งขั้นตอนหมุนเป็นระยะและ ใส่จุดที่การเปลี่ยนจะกระทบลงสมุดบัญชี

ทำทั้งหมดนี้ยังปลอดภัยน้อยและง่ายน้อยกว่าการย้ายไป gMSA — นั่นคือบทถัดไป

8. gMSA — มอบการจัดการรหัสผ่านให้ Active Directory

8.1. กลไกและผล

gMSA (group Managed Service Account) คือบัญชีโดเมนที่มอบการจัดการรหัสผ่านให้ตัวควบคุมโดเมน รหัสผ่านถูกตัวควบคุมโดเมนคำนวณจากคีย์ราก KDS (Key Distribution Service) และเฉพาะโฮสต์ที่ได้รับอนุญาตเท่านั้นที่ได้13

วิธีที่ gMSA จัดการรหัสผ่านตัวควบคุมโดเมนคำนวณรหัสผ่านจากคีย์ราก KDS เฉพาะโฮสต์ที่ได้รับอนุญาตที่ได้แล้วนำไปรันบริการ และรหัสผ่านถูกหมุนอัตโนมัติทุก 30 วันเป็นค่าเริ่มต้นคีย์ราก KDSDC คำนวณรหัสผ่านโฮสต์ที่ได้รับอนุญาตได้มันใช้รันบริการหมุนอัตโนมัติทุก 30 วันเป็นค่าเริ่มต้น

ภาพ 14: ตัวควบคุมโดเมนรับหน้าที่สร้าง แจก และอัปเดตรหัสผ่าน และคนดำเนินงานได้โดยไม่รู้รหัสผ่าน

ผลชัดเจน9

  • รหัสผ่านสุ่ม 240 ไบต์ที่สร้างแบบสุ่ม: brute-force และการโจมตีพจนานุกรมกลายเป็นไม่สมจริง และความทน Kerberoasting สูงขึ้นมาก
  • หมุนอัตโนมัติทุก 30 วันเป็นค่าเริ่มต้น: คนไม่ต้องวางแผนการเปลี่ยน และบริการไม่ต้องหยุด
  • ตัวตนเดียวกันแชร์ข้ามหลายเซิร์ฟเวอร์ได้: ฟาร์มเซิร์ฟเวอร์ใต้การกระจายโหลดยืนยันตัวตนซึ่งกันและกันในฐานะหลักการเดียวกัน
  • การจัดการ SPN ง่ายขึ้น: การลงทะเบียนและจัดการ SPN ก็มอบหมายและทำให้เรียบง่ายได้

คนดำเนินงานได้โดยไม่รู้รหัสผ่าน — หากเข้าใจว่าเป็นกลไกที่ทำกับบัญชีบริการสิ่งที่ Windows LAPS ทำกับรหัสผ่านผู้ดูแลระบบท้องถิ่น การวางตำแหน่งจะจับง่ายขึ้น

8.2. ข้อกำหนด

gMSA มีเงื่อนไข10

  • สภาพแวดล้อมโดเมน Active Directory (ในเวิร์กกรุ๊ปไม่ได้)
  • ระดับฟังก์ชันโดเมนและฟอเรสต์ Windows Server 2012 หรือสูงกว่า
  • คีย์ราก KDS ถูกสร้างแล้ว
  • ชื่อ gMSA ไม่ซ้ำในฟอเรสต์ ไม่ใช่เพียงในโดเมน
  • ช่วงเปลี่ยนรหัสผ่านตั้งได้เฉพาะตอนสร้าง

การสร้างคีย์ราก KDS เป็นงานครั้งเดียว แต่ นานถึง 10 ชั่วโมงหลังสร้างคุณสร้าง gMSA ไม่ได้ เพราะรอการจำลองไปยังตัวควบคุมโดเมนทุกตัว เป็นอุปกรณ์ความปลอดภัยเพื่อกันอุบัติเหตุการดึงรหัสผ่านล้มเหลวก่อนจำลองเสร็จ14

จากการสร้างคีย์ราก KDS ถึงการสร้าง gMSAหลังสร้างคีย์ราก KDS คุณรอการจำลองไปยังตัวควบคุมโดเมนทุกตัว จึงนานถึง 10 ชั่วโมงสร้าง gMSA ไม่ได้ หลังจำลองเสร็จจึงสร้างได้สร้างคีย์ราก KDSรอจำลองนานถึง 10 ชั่วโมงอุปกรณ์ความปลอดภัยกันอุบัติเหตุดึงล้มเหลวจำลองไปยังทุก DC เสร็จแล้วสร้าง gMSA ได้

ภาพ 15: การรอสูงสุด 10 ชั่วโมงหลังสร้างคีย์รากคือเวลารอเพื่อกันการดึงล้มเหลวขณะจำลองยังไม่เสร็จ

# รันในฐานะผู้ดูแลโดเมน บนตัวควบคุมโดเมน (หรือสถานีงาน
# บริหารที่มีโมดูล AD PowerShell)

# ยืนยันว่ามีคีย์ราก KDS หรือไม่ และสร้างถ้ายังไม่มี (ครั้งเดียวต่อฟอเรสต์)
Get-KdsRootKey
Add-KdsRootKey -EffectiveImmediately   # ใช้ได้จริงหลังสูงสุด 10 ชั่วโมง

8.3. ขั้นตอนจากการสร้างถึงการตั้งค่า

ขั้นตอนสี่ระยะ: “① สร้างกลุ่มที่ได้รับอนุญาตให้ดึง → ② สร้าง gMSA → ③ ติดตั้งบนเซิร์ฟเวอร์ → ④ ตั้งบนบริการ”10

สี่ระยะของการนำ gMSA เข้านำเข้าสี่ระยะ สร้างกลุ่มที่ได้รับอนุญาตให้ดึงรหัสผ่าน สร้าง gMSA ติดตั้งบนแต่ละเซิร์ฟเวอร์ และตั้งเป็นบัญชีล็อกออนของบริการ① สร้างกลุ่มที่ได้รับอนุญาตให้ดึง② สร้าง gMSAเพิ่ม PC$ ของเซิร์ฟเวอร์③ ติดตั้งบนแต่ละเซิร์ฟเวอร์ตรวจสอบการดึงด้วยคำสั่ง Test④ ตั้งบนบริการ

ภาพ 16: จากการสร้างกลุ่มถึงการตั้งบริการ การนำ gMSA เข้าดำเนินในสี่ระยะ

# ① สร้างกลุ่มความปลอดภัยที่ได้รับอนุญาตให้ดึงรหัสผ่าน
#    และเพิ่มบัญชีคอมพิวเตอร์ของเซิร์ฟเวอร์ที่จะรันบริการ
New-ADGroup -Name "GG-SvcBatchHosts" -GroupScope Global
Add-ADGroupMember -Identity "GG-SvcBatchHosts" -Members "APPSV01$", "APPSV02$"
# สมาชิกภาพกลุ่มถูกประเมินตอนคอมพิวเตอร์ล็อกออน ดังนั้น
# การเริ่มเซิร์ฟเวอร์เป้าหมายใหม่หลังเพิ่มคือแนวทางที่แน่นอน

# ② สร้าง gMSA
New-ADServiceAccount -Name "svc-batch" `
    -DNSHostName "svc-batch.corp.example.com" `
    -PrincipalsAllowedToRetrieveManagedPassword "GG-SvcBatchHosts"

# ③ บนแต่ละเซิร์ฟเวอร์ที่จะรันบริการ ติดตั้ง gMSA และตรวจสอบ
Install-ADServiceAccount -Identity "svc-batch"
Test-ADServiceAccount -Identity "svc-batch"   # True หมายความว่าการดึงทำงาน

# ④ ตั้งเป็นบัญชีล็อกออนของบริการ ต่อ $ ที่ชื่อ และอย่าระบุรหัสผ่าน
sc.exe config MyBatchService obj= "CORP\svc-batch$"
Restart-Service MyBatchService

เมื่อตั้งจาก services.msc เช่นกัน ชื่อบัญชีเป็นแบบ CORP\svc-batch$ต่อ $ ที่ท้าย และเว้นช่องรหัสผ่านว่าง บัญชีตระกูล MSA ใช้สำหรับลงชื่อเข้าใช้เชิงโต้ตอบไม่ได้1 หลังจากนั้น ให้ CORP\svc-batch$ บน ACL ของโฟลเดอร์แชร์หรือ SQL Server แทน PC$ และ การเข้าถึงเครือข่ายด้วยตัวตนเฉพาะบริการ เสร็จ โดยไม่มีรหัสผ่าน

8.4. บางแอปไม่รองรับ

ในฐานะข้อควรระวัง ไม่ใช่ซอฟต์แวร์ทุกชิ้นจะรันเป็น gMSA ได้ สิ่งที่ตั้งตัวตนล็อกออนผ่านกลไกมาตรฐาน — บริการ Windows พูลแอป IIS งาน Task Scheduler — รองรับกว้าง แต่มีข้อจำกัดอย่าง failover clustering เองไม่รองรับ gMSA และแอปที่ภายในเรียกรหัสผ่านใช้ไม่ได้10 Microsoft ยังระบุชัดว่าคุณควรยืนยันพฤติกรรมในฐานะ gMSA ในสภาพแวดล้อมทดสอบก่อนโปรดักชัน9

แยกว่าอะไรรองรับ gMSAแอปที่ตั้งตัวตนล็อกออนผ่านกลไกมาตรฐานรองรับ gMSA กว้าง แต่ failover clustering และแอปที่ภายในเรียกรหัสผ่านใช้ไม่ได้ จึงยืนยันในสภาพแวดล้อมทดสอบก่อนโปรดักชันกลไกมาตรฐานเรียกรหัสผ่านแอปเป้าหมายล็อกออนถูกตั้งอย่างไรรองรับ gMSAบริการ IIS งานgMSA ไม่ได้Failover clusteringทดสอบก่อนโปรดักชัน

ภาพ 17: แอปที่ตั้งล็อกออนผ่านกลไกมาตรฐานรองรับกว้าง แต่บางการออกแบบไม่รองรับ ดังนั้นการตรวจสอบก่อนโปรดักชันขาดไม่ได้

ยังมีพี่น้อง: sMSA (standalone Managed Service Account) สำหรับเซิร์ฟเวอร์เดียว และ dMSA (delegated Managed Service Account เปิดใน Windows Server 2025 ซึ่งผูกกับตัวตนอุปกรณ์เพื่อต้านการขโมยข้อมูลรับรอง) สำหรับการสร้างใหม่ ให้ถือ gMSA เป็นฐานแล้วพิจารณาตามข้อกำหนด6

9. การออกแบบประกอบ — สิทธิ์ล็อกออน โปรไฟล์ DPAPI และการตรวจสอบ

อีกสี่สิ่งที่เปลี่ยนตามบัญชี ที่ต้องจำ

9.1. สิทธิ์ “Log on as a service” (SeServiceLogonRight)

เพื่อเริ่มในฐานะบริการ บัญชีต้องมีสิทธิ์ผู้ใช้ “Log on as a service” LocalSystem, LocalService และ NetworkService มีในตัว แต่ บัญชีอื่น (ผู้ใช้โดเมน gMSA และคล้ายกัน) ต้องกำหนดอย่างชัดเจน15

หากตั้งจากแท็บ “Log On” ของ GUI services.msc สแนปอินให้สิทธิ์นี้อัตโนมัติ ในทางกลับกัน CreateService / ChangeServiceConfig (API ที่ sc.exe config เรียก) ไม่ตรวจว่าบัญชีที่ระบุมีสิทธิ์นี้ สาเหตุทั่วไปที่บริการที่ตั้งด้วยสคริปต์หยุดตอนเริ่มด้วย “บริการไม่เริ่มเนื่องจากความล้มเหลวของล็อกออน” คือสิ่งนี้ อย่าพึ่งผลข้างเคียงของเครื่องมือ ให้ใส่ในขั้นตอนดีพลอยอย่างชัดเจน การเพิ่มเข้า “Log on as a service” ใน Local Security Policy (secpol.msc) หรือการตั้งผ่าน GPO/Intune (ในสภาพแวดล้อมที่ตั้งสิทธิ์นี้ด้วย Group Policy การให้ท้องถิ่นถูกทับเมื่อนโยบายใช้ จึงต้องใส่ใจเช่นกัน) ในทางกลับกัน ขั้นตอนมาตรฐานสำหรับบัญชีเฉพาะบริการคือตั้ง “Deny log on locally” พร้อมกัน

ความต่างตามเส้นทางตั้งสิทธิ์ Log on as a serviceGUI services.msc ให้สิทธิ์อัตโนมัติ แต่ API ที่ sc.exe config เรียกไม่ตรวจสิทธิ์ ดังนั้นบัญชีที่ไม่มีสิทธิ์หยุดบริการด้วยความล้มเหลวของล็อกออนตอนเริ่มใช่ไม่ตั้งใน services.mscสิทธิ์ถูกให้อัตโนมัติบริการเริ่มได้ตั้งด้วย sc.exe configสิทธิ์ไม่ถูกตรวจมีสิทธิ์หรือไม่บริการเริ่มได้หยุดด้วยความล้มเหลวของล็อกออนให้ชัดเจนด้วย secpol.msc หรือ GPO

ภาพ 18: GUI ให้สิทธิ์อัตโนมัติ แต่การตั้งด้วยสคริปต์ไม่ตรวจ จึงต้องใส่การให้ชัดเจนในขั้นตอน

9.2. โปรไฟล์ %TEMP% และ HKEY_CURRENT_USER เปลี่ยน

SCM โหลดโปรไฟล์ผู้ใช้ของบัญชีนั้นตอนบริการเริ่ม7 ดังนั้น %TEMP% %APPDATA% และ HKEY_CURRENT_USER ที่แท้จริงเป็นสิ่งต่างกันต่อบัญชีล็อกออน และเมื่อคุณสลับบัญชี การตั้งค่าและแคชที่บันทึกในโปรไฟล์บัญชีเก่าดูเหมือน “หายไป”

การตอบด้านการออกแบบเรียบง่าย: วางข้อมูลของบริการไม่ใต้โปรไฟล์ แต่บนเส้นทางชัดเจนอย่าง C:\ProgramData\<ชื่อแอป> และให้ ACL นั้นแก่บัญชีล็อกออน แบบนั้นการเปลี่ยนบัญชีไม่มาพร้อมการย้ายข้อมูล

การพึ่งโปรไฟล์และการตอบด้านการวางข้อมูลโปรไฟล์ที่แท้จริงเป็นสิ่งต่างกันต่อบัญชีล็อกออน ดังนั้นการสลับบัญชีทำให้ข้อมูลโปรไฟล์เก่าดูเหมือนหายไป แต่การวางข้อมูลบนเส้นทางชัดเจนและให้ ACL ทำให้ไม่ต้องย้ายการตอบสลับบัญชีล็อกออนโปรไฟล์อื่นถูกโหลดข้อมูลเก่าดูเหมือนหายไปวางใต้ ProgramDataให้ ACL แก่บัญชีล็อกออนไม่ต้องย้ายแม้บัญชีเปลี่ยน

ภาพ 19: หลีกโปรไฟล์และวางข้อมูลบนเส้นทางชัดเจน การเปลี่ยนบัญชีก็ไม่มาพร้อมการย้ายข้อมูลอีก

9.3. ข้อมูลที่ปกป้องด้วย DPAPI ผูกกับบัญชี

สิ่งที่พลาดง่ายกว่าอีกคือ DPAPI ข้อมูลที่เข้ารหัสด้วย DPAPI ขอบเขตผู้ใช้ (CryptProtectData หรือ ProtectedData ของ .NET) ตามหลักถอดรหัสได้เฉพาะบัญชีเดียวกันที่ปกป้อง ช่วงที่คุณเปลี่ยนบัญชี สตริงเชื่อมต่อหรือคีย์ API ที่เก็บไว้ไม่ได้อ่านอีก — นั่นคือ DPAPI ทำงานถูกต้อง แต่ถ้าไม่อยู่ในขั้นตอนการย้ายมันกลายเป็นเหตุการณ์

ความสัมพันธ์ระหว่างข้อมูลที่ปกป้องด้วย DPAPI กับการเปลี่ยนบัญชีข้อมูลที่ปกป้องด้วย DPAPI ขอบเขตผู้ใช้ถอดรหัสได้เฉพาะบัญชีเดียวกันที่ปกป้อง ดังนั้นหลังเปลี่ยนบัญชีล็อกออนคุณต้องกรอกความลับใหม่บัญชีเก่าเดียวกันบัญชีใหม่ปกป้อง DPAPI ด้วยบัญชีเก่าสตริงเชื่อมต่อที่ปกป้องและคล้ายกันบัญชีใดกำลังถอดรหัสถอดรหัสได้ถอดรหัสไม่ได้กรอกความลับใหม่

ภาพ 20: ข้อมูลที่ปกป้องด้วย DPAPI ผูกกับบัญชีที่ปกป้อง และหลังสลับบัญชีคุณต้องกรอกใหม่

การตอบคือใส่ในแผนการย้ายขั้นตอน “กรอกความลับใหม่หลังสลับบัญชี” (สำหรับการออกแบบว่าเก็บที่ไหน ดู “การเก็บความลับในแอป Windows”) อีกทั้งการตั้งค่าที่จบด้วยการยืนยันตัวตนรวม Windows ในฐานะ gMSA หรือ PC$ ตัดการเก็บความลับเองได้ ลำดับที่ถูกคือพิจารณา “เราไม่เก็บได้ไหม” ก่อน “เราเก็บที่ไหน”

และหากบริการต้องการประมวลผล “ด้วยสิทธิ์ของผู้ใช้ที่เรียก” คุณใช้การปลอมตัวแทนการทำให้บัญชีแรงขึ้น สำหรับเรื่องนั้น ดู “จัดการโทเคนการปลอมตัวของ Windows ให้ถูกต้อง

9.4. การตรวจสอบ — มอง 4624 ประเภทล็อกออน 5

การเริ่มบริการถูกบันทึกในบันทึกเหตุการณ์ Security เป็นเหตุการณ์ ID 4624 (An account was successfully logged on) ด้วย ประเภทล็อกออน 5 (Service: SCM เริ่มบริการ) ฟิลด์ “Virtual Account” ในเหตุการณ์บอกว่าล็อกออนโดย MSA / บัญชีเสมือนหรือไม่ จึงใช้เฝ้าการใช้บัญชีที่จัดการได้เช่นกัน11

ไหลของการตรวจสอบการเริ่มบริการSCM เริ่มบริการถูกบันทึกเป็นเหตุการณ์ ID 4624 ประเภทล็อกออน 5 และฟิลด์ Virtual Account ระบุได้ว่าล็อกออนโดยบัญชีที่จัดการหรือไม่SCM เริ่มบริการบันทึกเหตุการณ์ ID 4624ประเภทล็อกออน 5 (Service)ฟิลด์ Virtual Accountเฝ้าบัญชีที่จัดการ

ภาพ 21: การเริ่มบริการถูกบันทึกเป็น 4624 ประเภทล็อกออน 5 และคุณติดตามการใช้บัญชีที่จัดการได้ด้วย

สำหรับสินค้าคงคลังของสถานะปัจจุบัน การรวมบัญชีล็อกออนของรายการบริการคือวิธีเร็ว

# รวมว่าบริการใดรันเป็นบัญชีใด
Get-CimInstance Win32_Service |
    Group-Object StartName |
    Sort-Object Count -Descending |
    Select-Object Count, Name

# สินค้าคงคลังบริการนอกมาตรฐานที่รันเป็น LocalSystem (แยกภายใน / บุคคลที่สามจากเส้นทาง)
Get-CimInstance Win32_Service |
    Where-Object { $_.StartName -eq 'LocalSystem' -and $_.PathName -notlike '*\Windows\*' } |
    Select-Object Name, DisplayName, PathName

หากผลลัพธ์นี้เรียง “บริการธุรกิจที่รันเป็น LocalSystem” และ “บริการที่รันเป็นผู้ใช้โดเมน” ไหลตัดสินใจของบทถัดไปถูกเรียก

10. ไหลตัดสินใจ — ตัดสินด้วยสี่คำถาม

นี่คือเนื้อหาจนถึงตอนนี้ ในรูปขั้นตอนการเลือก ตอบสี่คำถามตามลำดับ

ไหลตัดสินใจของบัญชีล็อกออนตัดสินบัญชีล็อกออนโดยตอบตามลำดับสี่คำถามว่ามีการเข้าถึงเครือข่ายหรือไม่ เข้าร่วมโดเมนหรือไม่ ตัวตนระดับเครื่องพอหรือไม่ และการรองรับ gMSAไม่ใช่ไม่ใช่ใช่ไม่ใช่ไม่Win auth ไปยังคู่หรือไม่บัญชีเสมือนLocalSystem หากจำเป็นเข้าร่วมโดเมนหรือไม่ปกป้องข้อมูลรับรองที่เก็บระดับเครื่องพอหรือไม่บัญชีเสมือน + PC$แอปรองรับ gMSA หรือไม่gMSAผู้ใช้ + การลดผลกระทบ

ภาพ 22: ตอบสี่คำถามตามลำดับแล้วตัวเลือกใดในหกแบบที่คุณควรใช้ถูกตัดสิน

คำถาม 1: บริการนั้นเข้าถึงเครื่องอื่นบนเครือข่าย (โฟลเดอร์แชร์ ฐานข้อมูล API และคล้ายกัน) ด้วยการยืนยันตัวตน Windows หรือไม่

ถ้าไม่ บัญชีเสมือน คือค่าเริ่มต้น เฉพาะเมื่อต้องการสิทธิ์ท้องถิ่นพิเศษ ให้ยืนยันความจำเป็นนั้นแล้วจึงพิจารณา LocalSystem

คำถาม 2: (หากเข้าถึง) เครื่องเข้าร่วมโดเมนหรือไม่

ในเวิร์กกรุ๊ป ทั้ง PC$ และ gMSA ใช้ไม่ได้ ใช้การออกแบบที่จัดการข้อมูลรับรองของบัญชีปลายทางอย่างชัดเจน (ปกป้องที่เก็บด้วย DPAPI หรือคล้ายกัน) หรือพิจารณาเข้าร่วมโดเมน

คำถาม 3: (ในโดเมน) ตัวตนระดับเครื่อง (PC$) พอหรือไม่

ถ้าพอ บัญชีเสมือน (หรือ NetworkService) + ให้ PC$ บน ACL ปลายทาง ก็เสร็จ หากต้องการตัวตนเฉพาะบริการ หรือตัวตนร่วมข้ามหลายเซิร์ฟเวอร์ ไปคำถาม 4

คำถาม 4: แอปรองรับ gMSA หรือไม่

ถ้ารองรับ (สิ่งที่ตั้งล็อกออนผ่านกลไกมาตรฐาน — SCM พูลแอป IIS Task Scheduler — โดยทั่วไปรองรับ) gMSA อย่าลืมตรวจพฤติกรรมในสภาพแวดล้อมตรวจสอบ หากไม่รองรับอย่างไรก็ตาม ใช้ ผู้ใช้โดเมนเฉพาะ หลังใช้การลดผลกระทบทุกข้อในหัวข้อ 7.3

ในตารางมีดังนี้

สถานการณ์ คำแนะนำ หมายเหตุ
เฉพาะท้องถิ่น สิทธิ์ธรรมดา บัญชีเสมือน ให้ ACL แก่ NT SERVICE\<ชื่อ>
เฉพาะท้องถิ่น ต้องการสิทธิ์เกินผู้ดูแลระบบ LocalSystem ตรวจสอบความจำเป็นของสิทธิ์ก่อน
ประมวลผลท้องถิ่นที่ไม่ต้องการตัวตนเครือข่าย LocalService ยอมรับได้เมื่อคงบริการที่มีอยู่ตามเดิม
เข้าถึงทรัพยากรในโดเมนด้วยตัวตนของเครื่อง บัญชีเสมือน (หรือ NetworkService) ให้ PC$ บน ACL ปลายทาง
เข้าถึงทรัพยากรในโดเมนด้วยตัวตนเฉพาะบริการ gMSA คีย์ราก KDS + ยืนยันการรองรับ
ตัวตนเดียวกันบนหลายเซิร์ฟเวอร์ (กระจายโหลดและคล้ายกัน) gMSA ด้วยบัญชีเสมือนไม่ได้
แอปที่ไม่รองรับ gMSA + ต้องการตัวตนเฉพาะ ผู้ใช้โดเมนเฉพาะ ต้องมีการลดผลกระทบในหัวข้อ 7.3
เวิร์กกรุ๊ป + ต้องการเข้าถึงไกล ปกป้องและเก็บข้อมูลรับรองชัดเจน พิจารณาทบทวนการออกแบบด้วย

11. สรุป

  • บัญชีล็อกออนของบริการคือการตัดสินใจออกแบบที่ตัดสินสิทธิ์ท้องถิ่น ตัวตนเครือข่าย และการจัดการรหัสผ่านพร้อมกัน อย่าปล่อยเป็นค่าเริ่มต้น (LocalSystem)
  • LocalSystem ถือโทเคน SYSTEM+Administrators และสิทธิ์แรง และความเสียหายเมื่อถูกยึดถูกทำให้สูงสุด บริการธุรกิจส่วนใหญ่ไม่ต้องการสิทธิ์นี้
  • LocalService และ NetworkService ทั้งคู่สิทธิ์ต่ำ ความต่างคือตัวตนเครือข่าย (นิรนาม หรือบัญชีคอมพิวเตอร์) เพราะบัญชีถูกหลายบริการใช้ร่วม จึงแยกไม่ได้
  • บัญชีเสมือน (NT SERVICE\<ชื่อบริการ>) คือค่าเริ่มต้นสมัยใหม่ที่แยกต่อบริการได้โดยไม่ต้องจัดการรหัสผ่าน ระบุบน ACL ได้โดยตรง และการตั้งค่ามีเพียงเปลี่ยนชื่อบัญชีล็อกออน
  • LocalSystem, NetworkService และบัญชีเสมือนออกสู่เครือข่ายเป็น DOMAIN\PC$ ในสภาพแวดล้อมโดเมน การให้ PC$ บน ACL ของโฟลเดอร์แชร์หรือ SQL Server มักทำให้ไม่ต้องใช้ผู้ใช้โดเมน
  • การใช้ผู้ใช้โดเมนกับบริการมีปัญหาโครงสร้างของการหยุดจากหมดอายุ การแพร่ของรหัสผ่านข้อความธรรมดา และ Kerberoasting หากใช้ ต้องมีบัญชีเฉพาะ + รหัสผ่านสุ่มยาว + ข้อจำกัดล็อกออน
  • gMSA คือกลไกที่ AD สร้างและหมุนรหัสผ่านอัตโนมัติ ข้อกำหนดคือโดเมน ระดับฟังก์ชัน 2012 หรือสูงกว่า และคีย์ราก KDS ตั้งบริการเป็น “DOMAIN\ชื่อ$” โดยเว้นช่องรหัสผ่านว่าง
  • เมื่อเปลี่ยนบัญชี ให้ใส่สิทธิ์ “Log on as a service” การย้ายโปรไฟล์และ %TEMP% และการกรอกข้อมูลที่ปกป้องด้วย DPAPI ใหม่ในขั้นตอนการย้าย การตรวจสอบยืนยันด้วยเหตุการณ์ ID 4624 ประเภทล็อกออน 5

ครั้งหน้าเมื่อติดตั้งบริการ ให้หยุดครู่หนึ่งบนหน้าจอตั้งค่าล็อกออนแล้วถามสิ่งนี้อีก ในฐานะใคร และไกลแค่ไหน บริการนี้ควรเข้าถึงได้ คำตอบควรเป็นแถวใดแถวหนึ่งของตารางตัดสินใจในบทความนี้

บทความที่เกี่ยวข้อง

ด้านให้คำปรึกษาที่เกี่ยวข้อง

KomuraSoft LLC รับออกแบบบัญชีล็อกออนและการเสริมสิทธิ์น้อยที่สุดสำหรับบริการ Windows และแอปประจำเครื่อง การย้ายบริการที่มีอยู่ที่สร้างบนสมมติฐาน LocalSystem ไปบัญชีเสมือนหรือ gMSA และการสอบสวนความล้มเหลวจาก access denied, DPAPI และโปรไฟล์หลังเปลี่ยนบัญชี เริ่มจากขั้น “ถูกชี้ในตรวจ แต่ไม่รู้จะเริ่มที่ไหน” ก็ได้

ลิงก์อ้างอิง

  1. Microsoft Learn, Configure Windows service accounts and permissions. ว่าด้วยบัญชีบริการค่าเริ่มต้นของ SQL Server คือบัญชีเสมือน (NT SERVICE\MSSQLSERVER และคล้ายกัน) เมื่อระบุบัญชีเสมือนหรือ MSA ให้เว้นช่องรหัสผ่านว่าง MSA เป็นชื่อที่ต่อ $ ท้ายและใช้ลงชื่อเข้าใช้เชิงโต้ตอบไม่ได้ Local Service เป็นบัญชีร่วมจึงแยกไม่ได้และ SQL Server ไม่รองรับ การใช้บัญชีโดเมนกินความพยายามในการจัดการรหัสผ่านและ SPN ด้วยมือและการบำรุงรักษาอาจนำไปสู่การหยุดบริการ และควรรันบริการเป็นบัญชีสิทธิ์น้อยที่สุดเสมอ  2 3 4 5 6 7

  2. Microsoft Learn, Securing on-premises service accounts. ลำดับความสำคัญก่อนอื่น gMSA สำหรับบริการในสถานที่ แล้ว sMSA หากใช้ไม่ได้ แล้วบัญชีคอมพิวเตอร์ และสุดท้ายบัญชีผู้ใช้ เมื่อใช้บัญชีคอมพิวเตอร์คุณแยกไม่ได้ว่าบริการใดใช้บัญชีนั้นและตรวจสอบการเปลี่ยนไม่ได้ และบทบาทของบัญชีบริการ (ระบุ ยืนยันตัวตน และเริ่มบริการ)  2 3

  3. Microsoft Learn, LocalSystem Account. ว่าด้วย LocalSystem ถือสิทธิ์กว้างบนคอมพิวเตอร์ท้องถิ่นและโทเคนมี SID ของ NT AUTHORITY\SYSTEM และ BUILTIN\Administrators ว่าไม่มีรหัสผ่าน ว่านำเสนอข้อมูลรับรองของคอมพิวเตอร์ให้เซิร์ฟเวอร์ไกล รายการสิทธิ์รวม SE_DEBUG_NAME และ SE_TCB_NAME และบริการส่วนใหญ่ไม่ต้องการระดับสิทธิ์นี้จึงควรพิจารณา LocalService/NetworkService  2 3 4 5 6

  4. Microsoft Learn, sc.exe config. ว่าด้วยคุณระบุบัญชีล็อกออนของบริการด้วยพารามิเตอร์ obj= ค่าเริ่มต้นคือ LocalSystem และพารามิเตอร์ password= เมื่อใช้บัญชีผู้ใช้นอก LocalSystem  2

  5. Microsoft Learn, Local accounts. ว่าด้วย SYSTEM (S-1-5-18) มี Full Control เป็นค่าเริ่มต้นบนวอลุ่ม NTFS NETWORK SERVICE (S-1-5-20) นำเสนอข้อมูลรับรองของคอมพิวเตอร์ให้เซิร์ฟเวอร์ไกล และ LOCAL SERVICE (S-1-5-19) ถือสิทธิ์น้อยสุดในเครื่องและนำเสนอข้อมูลรับรองนิรนามให้เครือข่าย  2 3 4

  6. Microsoft Learn, Service accounts. ว่าด้วยบัญชีเสมือนเป็นบัญชีท้องถิ่นที่จัดการอัตโนมัติที่ไม่ต้องจัดการรหัสผ่าน ชื่ออยู่ในรูป NT SERVICE<SERVICENAME> ในสภาพแวดล้อมโดเมนเข้าถึงเครือข่ายด้วยข้อมูลรับรองของบัญชีคอมพิวเตอร์ (\$) และเกณฑ์การเลือกระหว่าง sMSA, gMSA, dMSA และบัญชีเสมือน  2 3 4 5

  7. Microsoft Learn, Service User Accounts. ว่าด้วยบริการรันในบริบทความปลอดภัยของบัญชีผู้ใช้ SCM ล็อกออนเข้าบัญชีตอนเริ่มและผูก access token กับโพรเซสบริการ SCM โหลดโปรไฟล์ผู้ใช้ และ SCM ไม่จัดการการหมดอายุของรหัสผ่านจึงหมดอายุทำให้ล็อกออนล้มเหลวและบริการไม่เริ่ม  2 3 4 5

  8. Microsoft Learn, Protect SMB traffic from interception. คำแนะนำรวม gMSA เป็นการปกป้องบัญชีบริการ (รหัสผ่านสุ่มยาวที่เครื่องสร้างทำให้การแกะรหัสผ่านด้วย brute-force หรือการโจมตีพจนานุกรมไม่สมจริง) การบังคับรหัสผ่านยาว และการกล่าวถึง Kerberos armoring (FAST)  2

  9. Microsoft Learn, Secure group managed service accounts. ว่าด้วยรหัสผ่าน gMSA เป็นการสร้างสุ่ม 240 ไบต์ที่ยากต่อ brute-force หรือการโจมตีพจนานุกรม OS Windows เปลี่ยนรหัสผ่านทุก 30 วันจึงผู้ดูแลไม่ต้องวางแผนการเปลี่ยนหรือหยุดบริการ การนำไปใช้กับฟาร์มเซิร์ฟเวอร์และการจัดการ SPN ที่ง่ายขึ้น หากบริการไม่รองรับ gMSA ให้ใช้ sMSA และถ้าไม่ได้เช่นกันให้ใช้บัญชีผู้ใช้มาตรฐานที่มีการจัดการรหัสผ่านแข็งแรง และควรยืนยันพฤติกรรมในฐานะ gMSA ในสภาพแวดล้อมทดสอบก่อนโปรดักชัน  2 3

  10. Microsoft Learn, Manage group Managed Service Accounts. เงื่อนไข gMSA (ระดับฟังก์ชันโดเมน/ฟอเรสต์ 2012 หรือสูงกว่า การสร้างคีย์ราก KDS) ชื่อ gMSA ต้องไม่ซ้ำในฟอเรสต์ ช่วงเปลี่ยนรหัสผ่านตั้งได้เฉพาะตอนสร้าง การระบุกลุ่มที่ได้รับอนุญาตให้ดึงรหัสผ่านด้วย -PrincipalsAllowedToRetrieveManagedPassword ของ New-ADServiceAccount ขั้นตอน Install-ADServiceAccount/Test-ADServiceAccount ตัวตนของบัญชีเสมือนเป็นท้องถิ่นเครื่องและโดเมนไม่รู้จัก failover cluster ไม่รองรับ gMSA และ SCM พูลแอป IIS และ Task Scheduler รองรับการตั้งล็อกออนเป็น gMSA  2 3 4 5

  11. Microsoft Learn, 4624(S): An account was successfully logged on. ว่าด้วยเหตุการณ์ 4624 ถูกบันทึกบนคอมพิวเตอร์ที่เข้าถึงเมื่อเซสชันล็อกออนถูกสร้าง ประเภทล็อกออน 5 หมายถึงบริการ (SCM เริ่มบริการ) และฟิลด์ “Virtual Account” ระบุล็อกออนโดย MSA หรือบัญชีเสมือนได้และใช้เฝ้าบัญชีบริการที่จัดการได้  2

  12. Microsoft Learn, About Windows Resource Protection. ว่าด้วย Windows Resource Protection (WRP) กันการแทนที่ไฟล์ระบบ โฟลเดอร์ และคีย์รีจิสทรีสำคัญ การเข้าถึงเต็มของทรัพยากรที่ WRP ปกป้องจำกัดเฉพาะ TrustedInstaller และการเปลี่ยนทำได้เฉพาะผ่านกลไกแทนที่ที่รองรับผ่านบริการ Windows Modules Installer และแอปที่พยายามเปลี่ยนทรัพยากรที่ปกป้องได้รับ access denied 

  13. Microsoft Learn, Group Managed Service Accounts overview. ว่าด้วย gMSA เป็นบัญชีโดเมนที่มอบการจัดการรหัสผ่านให้ Windows ตัวควบคุมโดเมนคำนวณรหัสผ่านจากความลับร่วมของ Key Distribution Service (kdssvc.dll) และโฮสต์สมาชิกสอบถามตัวควบคุมโดเมนสำหรับรหัสผ่านปัจจุบันและก่อนหน้า และทำให้ยืนยันตัวตนซึ่งกันและกันในฐานะหลักการเดียวกันในฟาร์มเซิร์ฟเวอร์ได้ 

  14. Microsoft Learn, Create a Key Distribution Service (KDS) root key. ว่าด้วยต้องมีคีย์รากเพื่อให้ตัวควบคุมโดเมนเริ่มสร้างรหัสผ่าน gMSA ขั้นตอนการสร้างด้วย Add-KdsRootKey -EffectiveImmediately นานถึง 10 ชั่วโมงหลังสร้างคุณสร้าง gMSA ไม่ได้เพราะรอการจำลอง AD รวม และจำลองไม่สมบูรณ์อาจทำให้การดึงรหัสผ่านล้มเหลว 

  15. Microsoft Learn, Policy CSP - UserRights: LogOnAsService. ว่าด้วยสิทธิ์ “Log on as a service” ให้หลักการความปลอดภัยล็อกออนในฐานะบริการ Local System, Local Service และ Network Service มีสิทธิ์นี้ในตัว บริการที่รันเป็นบัญชีอื่นต้องได้รับสิทธิ์นี้ และเส้นทางตั้งค่า Group Policy 

บทความล่าสุดที่มีแท็กเดียวกัน เพื่อเจาะลึกหัวข้อใกล้เคียง

เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 2) — หน่วยความจำที่แม้เคอร์เนลก็มองไม่เห็น: กลไกของ VBS, HVCI และ Credential Guard

เมื่อติดตั้งใหม่บนฮาร์ดแวร์ที่รองรับ VBS จะเปิดตามค่าเริ่มต้น และใช้ hypervisor กับ SLAT สร้างการแยกที่แข็งกว่าเคอร์เนล บทความนี้อธิบายโค...

Named Pipe ในทางปฏิบัติ — IPC มาตรฐานของ Windows ตั้งแต่การออกแบบถึงความปลอดภัย

คู่มือเชิงปฏิบัติเรื่อง named pipe ซึ่งเป็นการสื่อสารระหว่างโปรเซสมาตรฐานของ Windows บทความนี้จัดระเบียบจากแหล่งปฐมภูมิ ทั้งการเลือกระหว่...

Windows ชัตดาวน์จากมุมของแอป — รอดจากการแจ้งออก รีสตาร์ต และการตัดไฟอย่างถูกต้อง

รีสตาร์ตข้ามคืนจาก Windows Update ทำให้ข้อมูลวัดเสีย — อุบัติเหตุแบบนั้นป้องกันด้วยการออกแบบได้ บทความนี้ครอบคลุมจากแหล่งปฐมภูมิว่าจะรับก...

เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 3) — เครื่องเสมือนที่บูตในไม่กี่วินาที: ทำไม WSL2, Windows Sandbox และคอนเทนเนอร์จึงเบา

ทำไม WSL2 และ Windows Sandbox จึงเริ่มในไม่กี่วินาทีและรู้สึกเบา? บทความนี้อธิบายกลไก ตั้งแต่ dynamic base image และ direct map ไปจนถึงกา...

เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 1) — Windows ของคุณรันอยู่ที่ไหนจริง ๆ? Hypervisor และพาร์ติชัน

เมื่อเปิด Hyper-V แล้ว Windows ฝั่งโฮสต์เองก็รันบน hypervisor ในฐานะ root partition บทความนี้อธิบายรากฐานของการจำลองเสมือนผ่านบทบาทของ VT...

หน้าเหล่านี้วางหัวข้อไว้ในบริบทที่กว้างขึ้นของบริการและการตัดสินใจ

บทความนี้เกี่ยวข้องโดยตรงกับบริการต่อไปนี้

คำถามที่พบบ่อย

คำถามที่มักพบในการปรึกษาเกี่ยวกับหัวข้อของบทความนี้

ควรเปลี่ยนบริการที่รันเป็น LocalSystem มาตลอดทันทีหรือไม่
การเปลี่ยนทันทีไม่ใช่คำตอบที่ถูกสำหรับทุกกรณี ก่อนอื่นให้ยืนยันว่าบริการนั้นต้องการสิทธิ์ท้องถิ่นระดับ LocalSystem จริงหรือไม่ (สิทธิ์แรงเกินผู้ดูแลระบบ) หากเป็นเพียงอ่าน/เขียนไฟล์และสื่อสารเครือข่าย การย้ายไปบัญชีเสมือน (NT SERVICE\ชื่อบริการ) คือผู้สมัครอันดับแรก ตอนย้ายให้ยืนยันการให้สิทธิ์เข้าถึงโฟลเดอร์และคีย์รีจิสทรีที่ต้องใช้ วิธีจัดการข้อมูลที่พึ่งโปรไฟล์หรือ DPAPI และว่ามีสิทธิ์ "Log on as a service" หรือไม่ ยืนยันการเริ่มและฟังก์ชันหลักในสภาพแวดล้อมตรวจสอบ แล้วจึงสลับโปรดักชัน
ควรเลือกบัญชีเสมือนหรือ NetworkService
สำหรับการเลือกใหม่ เราแนะนำบัญชีเสมือน บนเครือข่ายทั้งคู่ปรากฏเป็นบัญชีคอมพิวเตอร์ (DOMAIN\ชื่อคอมพิวเตอร์$) และทั้งคู่มีสิทธิ์ท้องถิ่นเล็ก NetworkService อย่างไรก็ตามถูกหลายบริการใช้ร่วม จึงแยกด้วย ACL ที่ "อนุญาตเฉพาะบริการนี้" ไม่ได้ บัญชีเสมือนมีตัวตนเฉพาะต่อบริการ และระบุ NT SERVICE\ชื่อบริการบน ACL ได้โดยตรง ผลิตภัณฑ์ Microsoft รุ่นใหม่เช่น SQL Server ก็ใช้บัญชีเสมือนเป็นค่าเริ่มต้นเช่นกัน
ใช้ gMSA ในสภาพแวดล้อมเวิร์กกรุ๊ป (ไม่มีโดเมน) ได้หรือไม่
ไม่ได้ gMSA เป็นกลไกที่ตัวควบคุมโดเมน Active Directory สร้างและจัดการรหัสผ่าน โดเมนบวกการสร้างคีย์ราก KDS เป็นเงื่อนไข ในเวิร์กกรุ๊ปพื้นฐานคือจบการประมวลผลท้องถิ่นด้วยบัญชีเสมือนหรือ LocalService/NetworkService หากต้องเข้าถึงเครื่องอื่น ต้องออกแบบอย่างอื่น เช่นใช้ข้อมูลรับรองของบัญชีที่เตรียมไว้ที่ปลายทางอย่างชัดเจน การเข้าถึงเครือข่ายในฐานะบัญชีคอมพิวเตอร์ (PC$) ก็ใช้ได้เฉพาะในสภาพแวดล้อมโดเมน
หลังเปลี่ยนบัญชีล็อกออนของบริการ การตั้งค่าและข้อมูลรับรองที่บันทึกไว้ไม่ได้อ่านอีก ทำไม
เพราะแต่ละบัญชีล็อกออนผูกกับโปรไฟล์ผู้ใช้ %TEMP% HKEY_CURRENT_USER และคีย์ DPAPI ของตนเอง โดยเฉพาะข้อมูลที่ปกป้องด้วย DPAPI ขอบเขตผู้ใช้ (CryptProtectData และคล้ายกัน) ตามหลักถอดรหัสได้เฉพาะบัญชีเดียวกันที่ปกป้อง ไฟล์ที่บันทึกใต้โปรไฟล์ (AppData และคล้ายกัน) ก็เป็นเส้นทางอื่นจากบัญชีใหม่ ก่อนสลับบัญชี ให้วางแผนขั้นตอนสร้างข้อมูลที่ปกป้องด้วย DPAPI ใหม่ (กรอกคีย์ API ใหม่ เป็นต้น) และการย้ายไฟล์ใต้โปรไฟล์
ถ้าต้องการให้บริการเข้าถึงโฟลเดอร์แชร์อย่างเดียว ต้องใช้ผู้ใช้โดเมนหรือไม่
ในหลายกรณี ไม่ต้อง ในสภาพแวดล้อมโดเมน บริการที่รันเป็น LocalSystem, NetworkService หรือบัญชีเสมือนยืนยันตัวตนกับฝั่งไกลในฐานะบัญชีคอมพิวเตอร์ (DOMAIN\ชื่อคอมพิวเตอร์$) เพิ่ม PC$ นั้นเข้าสิทธิ์แชร์และสิทธิ์ NTFS ของโฟลเดอร์แชร์แล้วอ่านเขียนได้ หากต้องการควบคุมการเข้าถึงด้วยตัวตนเฉพาะบริการ หรือตัวตนเดียวกันบนหลายเซิร์ฟเวอร์ ให้พิจารณา gMSA แทนผู้ใช้โดเมน

โปรไฟล์ผู้เขียน

หน้าแนะนำผู้เขียนบทความ

Go Komura

ผู้แทนของ KomuraSoft LLC

เชี่ยวชาญด้านการพัฒนาซอฟต์แวร์ Windows ที่ปรึกษาเทคนิค และการตรวจสอบบั๊ก โดยเฉพาะโปรเจกต์ที่มีระบบเดิมและบั๊กที่ทำซ้ำได้ยาก

ลิงก์สาธารณะ

กลับไปยังบล็อก