ความแตกต่างระหว่างบัญชี 'ระบบภายใน' และบัญชี 'บริการเครือข่าย' หรือไม่


386

ฉันได้เขียนบริการ Windows ที่วางกระบวนการแยกต่างหาก กระบวนการนี้สร้างวัตถุ COM หากบริการทำงานภายใต้บัญชี 'Local System' ทุกอย่างทำงานได้ดี แต่หากบริการทำงานภายใต้บัญชี 'บริการเครือข่าย' กระบวนการภายนอกจะเริ่มต้นขึ้น แต่ไม่สามารถสร้างวัตถุ COM ข้อผิดพลาดที่ส่งคืนจากการสร้างวัตถุ COM ไม่ใช่ข้อผิดพลาด COM มาตรฐาน (ฉันคิดว่าเฉพาะวัตถุ COM ที่กำลังสร้าง)

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

คำตอบ:


701

เนื่องจากมีความสับสนอย่างมากเกี่ยวกับการทำงานของบัญชีบริการมาตรฐานฉันจะพยายามทำให้หมดเร็ว

บัญชีแรก:

  • LocalServiceบัญชี (ที่ต้องการ)

    บัญชีบริการที่มี จำกัด ซึ่งคล้ายกับบริการเครือข่ายและต้องการใช้บริการที่มีสิทธิ์น้อยที่สุดมาตรฐาน อย่างไรก็ตามแตกต่างจากบริการเครือข่ายมันเข้าถึงเครือข่ายในฐานะผู้ใช้ที่ไม่ระบุชื่อ

    • ชื่อ: NT AUTHORITY\LocalService
    • บัญชีไม่มีรหัสผ่าน (ข้อมูลรหัสผ่านใด ๆ ที่คุณให้ไว้จะถูกละเว้น)
    • HKCU เป็นตัวแทนของ บัญชีผู้ใช้LocalService
    • มี สิทธิ์น้อยที่สุดในเครื่องคอมพิวเตอร์
    • นำเสนอไม่ระบุชื่อข้อมูลประจำตัวที่บนเครือข่าย
    • SID : S-1-5-19
    • มีโปรไฟล์ของตัวเองภายใต้คีย์รีจิสทรีHKEY_USERS ( HKEY_USERS\S-1-5-19)

     

  • NetworkServiceบัญชี

    บัญชีบริการ จำกัด ที่มีไว้เพื่อให้บริการที่ได้รับสิทธิพิเศษมาตรฐาน บัญชีนี้มีข้อ จำกัด มากกว่าระบบภายในเครื่อง (หรือแม้แต่ผู้ดูแลระบบ) แต่ก็ยังมีสิทธิ์ในการเข้าถึงเครือข่ายในฐานะเครื่อง (ดูคำเตือนด้านบน)

    • NT AUTHORITY\NetworkService
    • บัญชีไม่มีรหัสผ่าน (ข้อมูลรหัสผ่านใด ๆ ที่คุณให้ไว้จะถูกละเว้น)
    • HKCU แสดงถึงNetworkServiceบัญชีผู้ใช้
    • มีน้อยสิทธิ์ในเครื่องคอมพิวเตอร์
    • แสดงข้อมูลประจำตัวของคอมพิวเตอร์ (เช่นMANGO$) ไปยังเซิร์ฟเวอร์ระยะไกล
    • SID : S-1-5-20
    • มีโปรไฟล์ของตัวเองภายใต้คีย์รีจิสทรีHKEY_USERS ( HKEY_USERS\S-1-5-20)
    • หากพยายามกำหนดเวลางานโดยใช้ให้ป้อนNETWORK SERVICEในกล่องโต้ตอบ เลือกผู้ใช้หรือกลุ่ม

     

  • LocalSystemบัญชี (อันตรายไม่ได้ใช้!)

    บัญชีที่เชื่อถือได้อย่างสมบูรณ์มากกว่าบัญชีผู้ดูแลระบบ ไม่มีอะไรในกล่องเดียวที่บัญชีนี้ไม่สามารถทำได้และมีสิทธิ์ในการเข้าถึงเครือข่ายในขณะที่เครื่อง (ต้องใช้ Active Directory และให้สิทธิ์บัญชีเครื่องจักรกับบางสิ่ง)

    • ชื่อ: .\LocalSystem(สามารถใช้LocalSystemหรือComputerName\LocalSystem)
    • บัญชีไม่มีรหัสผ่าน (ข้อมูลรหัสผ่านใด ๆ ที่คุณให้ไว้จะถูกละเว้น)
    • SID : S-1-5-18
    • ไม่มีโปรไฟล์ของตัวเอง ( HKCUแสดงถึงผู้ใช้เริ่มต้น )
    • มีที่กว้างขวางสิทธิ์ในคอมพิวเตอร์ที่ใช้อยู่
    • แสดงข้อมูลประจำตัวของคอมพิวเตอร์ (เช่นMANGO$) ไปยังเซิร์ฟเวอร์ระยะไกล

     

ด้านบนเมื่อพูดถึงการเข้าถึงเครือข่ายนี่หมายถึงSPNEGO (เจรจาต่อรอง), NTLM และ Kerberos เท่านั้นและไม่ใช้กลไกการตรวจสอบสิทธิ์อื่น ๆ ตัวอย่างเช่นการประมวลผลการทำงานที่LocalServiceยังคงสามารถเข้าถึงอินเทอร์เน็ต

ปัญหาทั่วไปเกี่ยวกับการเรียกใช้เป็นบัญชีที่ไม่ได้มาตรฐานคือหากคุณแก้ไขการอนุญาตเริ่มต้นใด ๆ คุณกำลังขยายชุดของทุกสิ่งที่ทำงานตามที่บัญชีสามารถทำได้ ดังนั้นถ้าคุณให้ DBO กับฐานข้อมูลไม่เพียง แต่บริการของคุณจะทำงานเป็น Local Service หรือ Network Service เท่านั้น แต่ยังเข้าถึงทุกอย่างที่ทำงานในขณะที่บัญชีเหล่านั้นสามารถทำได้เช่นกัน หากนักพัฒนาทุกคนทำสิ่งนี้คอมพิวเตอร์จะมีบัญชีบริการที่มีสิทธิ์ในการทำสิ่งใด ๆ (โดยเฉพาะอย่างยิ่ง superset ของสิทธิพิเศษเพิ่มเติมที่แตกต่างกันทั้งหมดที่มอบให้กับบัญชีนั้น)

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

ในกรณีเฉพาะของคุณปัญหาที่คุณอาจเห็นคือการเปิดใช้งาน DCOM หรือ COM + ถูก จำกัด ไว้ที่ชุดบัญชีที่กำหนด ใน Windows XP SP2, Windows Server 2003 และสูงกว่าการอนุญาตการเปิดใช้งานถูก จำกัด อย่างมาก คุณควรใช้สแน็ปอิน MMC ของบริการเพื่อตรวจสอบวัตถุ COM เฉพาะของคุณและดูสิทธิ์การเปิดใช้งาน หากคุณไม่ได้เข้าถึงอะไรบนเครือข่ายเนื่องจากบัญชีเครื่องคุณควรพิจารณาใช้Local Serviceอย่างจริงจัง(ไม่ใช่ Local Local ซึ่งเป็นระบบปฏิบัติการ)


ใน Windows Server 2003 คุณไม่สามารถเรียกใช้งานที่กำหนดเป็น

  • NT_AUTHORITY\LocalService (aka บัญชี Local Service) หรือ
  • NT AUTHORITY\NetworkService (aka บัญชีบริการเครือข่าย)

เพิ่มความสามารถนั้นด้วย Task Scheduler 2.0 เท่านั้นซึ่งมีอยู่ใน Windows Vista / Windows Server 2008 และใหม่กว่าเท่านั้น

บริการที่ทำงานตามที่NetworkServiceแสดงข้อมูลรับรองเครื่องบนเครือข่าย ซึ่งหมายความว่าหากคอมพิวเตอร์ของคุณถูกเรียกว่าmango, มันจะนำเสนอเป็นบัญชีเครื่อง MANGO$ :

ป้อนคำอธิบายรูปภาพที่นี่


7
ฉันคิดว่าManaged Service Accountsลบความเจ็บปวดในการตั้งค่าบัญชีและจัดการรหัสผ่าน (หรือส่งต่อผู้ดูแลระบบโดเมนหรือผู้แทน)
Carl G

1
สวัสดีขอบคุณสำหรับคำอธิบาย ฉันมีคำถามหนึ่งข้อ - การใช้บัญชีบริการระบบ / เครือข่ายท้องถิ่นเป็นไปได้หรือไม่ที่จะเพิ่ม / ลบรายการไปยังคอนเทนเนอร์ในไดเรกทอรีที่ใช้งาน (ให้ภาชนะในไดเรกทอรีที่ใช้งานได้ให้สิทธิ์อย่างเต็มที่กับคอมพิวเตอร์ที่ใช้บริการ windows เหล่านี้) โปรดทราบว่าทุกอย่างใช้งานได้เมื่อฉันใช้บริการเป็นหนึ่งในผู้ใช้โดเมน แต่ไม่เป็นบริการระบบ / เครือข่ายท้องถิ่น (สำหรับรายละเอียดstackoverflow.com/questions/20943436/… ) ขอแสดงความนับถือ
Dreamer

1
ใช่มันควรจะเป็น ฉันจะตอบคำถามของคุณโดยตรงเนื่องจากคำถามนี้เป็นนามธรรมมากกว่าและนั่นคือการใช้งานที่เฉพาะเจาะจง
Peter Oehlert

7
โปรดทราบว่าผู้ใช้ "ไม่ระบุชื่อ" ไม่เพียง แต่ไม่ใช่สมาชิกของ "ผู้ใช้ที่ผ่านการรับรองความถูกต้อง" แต่ไม่ใช่สมาชิกของ "ทุกคน" บน Windows บนเครือข่าย Windows 'ไม่ระบุชื่อ' มีการเข้าถึงทรัพยากรที่ได้รับอนุญาตอย่างชัดเจนให้กับ 'ไม่ระบุชื่อ' - โดยค่าเริ่มต้นไม่มีอะไร
david

1
@ HakamFostok ฉันไม่มีการอ้างอิงจำนวนมาก ถ้าฉันจำได้ถูกต้อง Dan Brown กล่าวถึงบางอย่างในหนังสือของเขา Programming Windows Security มีหน้าต่างช่วยและเอกสาร MSDN มากมาย แต่ฉันไม่มีเอกสารอ้างอิงเฉพาะ หนังสือของ Jeff Richter บนหน้าต่างการเขียนโปรแกรมรวมถึง Inside Windows (3rd หรือ 4th Ed) โดย Soloman & Russinovich ก็มีบ้างเช่นกัน
Peter Oehlert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.