ตามค่าเริ่มต้น ผู้ใช้ทั่วไป (ที่ไม่ใช่ผู้ดูแลระบบ) จะไม่สามารถจัดการบริการ Windows ได้ ซึ่งหมายความว่าผู้ใช้ไม่สามารถหยุด เริ่ม เริ่มใหม่ หรือเปลี่ยนการตั้งค่า/การอนุญาตของบริการ Windows ในบางกรณี ผู้ใช้จำเป็นต้องมีสิทธิ์ในการรีสตาร์ทหรือจัดการบริการบางอย่าง ในบทความนี้ เราจะมาดูหลายวิธีในการจัดการสิทธิ์อนุญาตสำหรับบริการ Windows โดยเฉพาะอย่างยิ่ง เราจะแสดงวิธีอนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเริ่มต้น หยุด และเริ่มบริการ Windows ใหม่โดยให้สิทธิ์ที่เหมาะสม
สมมติว่า คุณต้องให้สิทธิ์บัญชีโดเมน contoso\tuser สิทธิ์ในการรีสตาร์ท ตัวจัดคิวงานพิมพ์ บริการ (ชื่อบริการ – ตัวจัดคิว) . เมื่อผู้ที่ไม่ใช่ผู้ดูแลระบบพยายามเริ่มบริการใหม่ ข้อผิดพลาดจะปรากฏขึ้น:
เกิดข้อผิดพลาดของระบบ 5 การเข้าถึงถูกปฏิเสธ
ไม่มีเครื่องมือในตัวที่ใช้งานง่ายและสะดวกในการจัดการสิทธิ์ของบริการใน Windows เราจะพิจารณาวิธีการบางอย่างในการให้สิทธิ์แก่ผู้ใช้ในการจัดการบริการ:
การตั้งค่าการอนุญาตบริการ Windows โดยใช้เครื่องมือ SC.exe (ตัวควบคุมบริการ)
วิธีมาตรฐานในตัวของ Windows ในการจัดการสิทธิ์บริการระบบโดยใช้ sc.exe (Service Controller) เครื่องมือ ปัญหาหลักในการใช้ยูทิลิตี้นี้คือรูปแบบการอนุญาตบริการที่ซับซ้อน (SDDL รูปแบบ — คำอธิบายความปลอดภัย คำนิยาม ภาษา)
คุณสามารถรับสิทธิ์ปัจจุบันสำหรับบริการ Windows เป็นสตริง SDDL ดังนี้:
sc.exe sdshow Spooler
D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
สัญลักษณ์เหล่านี้หมายความว่าอย่างไร
S:— รายการควบคุมการเข้าถึงระบบ (SACL)D:— Discretionary ACL (DACL)
ตัวอักษรตัวแรกหลังวงเล็บหมายถึง:อนุญาต (A ) หรือปฏิเสธ (D )
สัญลักษณ์ชุดถัดไปคือสิทธิ์ที่มอบหมายได้
CC — SERVICE_QUERY_CONFIG (ขอการตั้งค่าบริการ)LC — SERVICE_QUERY_STATUS (การโพลสถานะบริการ)SW — SERVICE_ENUMERATE_DEPENDENTSLO — SERVICE_INTERROGATECR — SERVICE_USER_DEFINED_CONTROLRC — READ_CONTROLRP — SERVICE_STARTWP — SERVICE_STOP_DT — TIN SERVICEอักขระ 2 ตัวสุดท้ายคืออ็อบเจ็กต์ (ผู้ใช้ กลุ่ม หรือ SID) ที่ได้รับสิทธิ์ มีรายชื่อกลุ่มที่กำหนดไว้ล่วงหน้า
AU Authenticated UsersAO Account operatorsRU Alias to allow Previous Windows 2000AN Anonymous logonAU Authenticated usersBA Built-in administratorsBG Built-in guestsBO Backup operatorsBU Built-in usersCA Certificate server administratorsCG Creator groupCO Creator ownerDA ผู้ดูแลระบบโดเมนDC คอมพิวเตอร์โดเมนDD Domain controllersDG ผู้เข้าร่วมโดเมนDU ผู้ใช้โดเมนEA Enterprise ผู้ดูแลระบบ ED ตัวควบคุมโดเมนองค์กร WD ทุกคนPA ผู้ดูแลระบบนโยบายกลุ่ม IU ผู้ใช้ที่เข้าสู่ระบบแบบโต้ตอบLA ผู้ดูแลระบบในพื้นที่LG แขกในพื้นที่ บัญชีบริการในพื้นที่ SY ระบบภายในเครื่อง NU ผู้ใช้การเข้าสู่ระบบเครือข่าย NO ตัวดำเนินการกำหนดค่าเครือข่าย NS บัญชีบริการเครือข่าย PO ตัวดำเนินการเครื่องพิมพ์ PS ตนเองส่วนบุคคล PU ผู้ใช้ระดับสูง ผู้ใช้เซิร์ฟเวอร์ RS RAS ผู้ใช้เซิร์ฟเวอร์ปลายทาง RE ReplicatorRC รหัสที่จำกัดSA ผู้ดูแลระบบสคีมาSO ตัวดำเนินการเซิร์ฟเวอร์SU ผู้ใช้เข้าสู่ระบบบริการแทนที่จะระบุกลุ่มที่กำหนดไว้ล่วงหน้า คุณสามารถระบุผู้ใช้หรือกลุ่มตาม SID ได้อย่างชัดเจน ในการรับ SID สำหรับผู้ใช้ปัจจุบัน คุณสามารถใช้คำสั่ง:
whoami /user
หรือคุณสามารถค้นหา SID สำหรับผู้ใช้โดเมนโดยใช้ Get-ADUser cmdlet:
Get-ADUser -Identity 'sadams' | select SID
คุณสามารถรับ SID ของกลุ่มความปลอดภัย AD โดยใช้ Get-ADGroup cmdlet:
Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID
ในการกำหนดสตริงการอนุญาต SDDL สำหรับบริการเฉพาะ คุณสามารถใช้ sc sdset สั่งการ. ตัวอย่างเช่น สามารถให้สิทธิ์แก่ผู้ใช้โดยใช้คำสั่งต่อไปนี้:
sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
การใช้ SubInACL เพื่ออนุญาตให้ผู้ใช้เริ่ม/หยุด/เริ่มบริการใหม่
ใช้เครื่องมือบรรทัดคำสั่ง SubInACL . ได้ง่ายขึ้น จาก Sysinternals (โดย Mark Russinovich) เพื่อจัดการการอนุญาตบริการ ไวยากรณ์ของเครื่องมือนี้ง่ายกว่าและสะดวกกว่ามาก นี่คือวิธีที่คุณสามารถให้สิทธิ์การรีสตาร์ทสำหรับบริการโดยใช้ SubInACL:
- ดาวน์โหลด subinacl.msi จากหน้าเว็บนี้ (https://www.microsoft.com/en-us/download/details.aspx?id=23510) และติดตั้งบนระบบเป้าหมาย
- ในพรอมต์คำสั่งที่มีการยกระดับ ไปที่ไดเร็กทอรีที่มีเครื่องมือ:
cd “C:\Program Files (x86)\Windows Resource Kits\Tools\"
- เรียกใช้คำสั่ง:
subinacl.exe /service Spooler /grant=contoso\tuser=PTO
หมายเหตุ . ในกรณีนี้ เราได้ให้สิทธิ์ผู้ใช้ในการระงับ (หยุดชั่วคราว/ดำเนินการต่อ) เริ่มและหยุด (เริ่มใหม่) บริการ รายการสิทธิ์บริการทั้งหมดที่มี:F:Full ControlR :Generic ReadW :Generic WriteX :Generic eXecuteL :อ่าน controLQ :Query Service ConfigurationS :Query Service StatusE :Enumerate Dependent ServicesC :Service Change ConfigurationT :Start ServiceO :Stop ServiceP :Pause/Continue ServiceI :Interrogate ServiceU :คำสั่งควบคุมที่กำหนดโดยผู้ใช้บริการถ้าคุณต้องการให้สิทธิ์กับบริการที่ทำงานบนคอมพิวเตอร์ระยะไกล ให้ใช้ไวยากรณ์คำสั่ง subinacl ต่อไปนี้:
subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F
- ตอนนี้ คุณต้องเข้าสู่ระบบคอมพิวเตอร์โดยใช้บัญชีผู้ใช้และลองเริ่มบริการใหม่โดยใช้คำสั่ง:
net stop spooler
net start spooler
หรือsc stop spooler && sc start spooler
หากคุณทำทุกอย่างถูกต้อง บริการควรเริ่มต้นใหม่
หากต้องการเพิกถอนสิทธิ์การบริการที่กำหนด ใช้/revoke
ตัวเลือกของเครื่องมือ subinacl.exe ตัวอย่างเช่น:
subinacl.exe /service Spooler /revoke=contoso\tuser
จะเปลี่ยนการอนุญาตบริการ Windows โดยใช้ Process Explorer ได้อย่างไร
คุณสามารถเปลี่ยนการอนุญาตบริการ Windows ได้โดยใช้ยูทิลิตี้ Sysinternals อีกหนึ่งรายการ – Process Explorer . เรียกใช้ Process Explorer ในฐานะผู้ดูแลระบบ และค้นหากระบวนการของบริการที่คุณต้องการ ในตัวอย่างของเรา นี่คือ spoolsv.exe (ตัวจัดคิวปฏิบัติการ –
C:\Windows\System32\spoolsv.exe
). เปิดคุณสมบัติของกระบวนการแล้วคลิก บริการ แท็บ
คลิก การอนุญาต และเพิ่มผู้ใช้หรือกลุ่มในหน้าต่างที่เปิดขึ้น หลังจากนั้น เลือกการอนุญาตที่คุณต้องการกำหนด (ควบคุมทั้งหมด/เขียน/อ่าน)
การตั้งค่าการอนุญาตบริการ Windows โดยใช้ PowerShell
ในแกลเลอรี TechNet มีโมดูล PowerShell ที่ไม่เป็นทางการแยกต่างหากสำหรับจัดการการอนุญาตสำหรับวัตถุ Windows ต่างๆ – โมดูล PowerShellAccessControl (สามารถดาวน์โหลดได้ที่นี่) โมดูลนี้ยังช่วยให้คุณจัดการการอนุญาตบริการ ติดตั้งโมดูลนี้และนำเข้าไปยังเซสชัน PS ของคุณ:
Import-Module PowerShellAccessControl
คุณสามารถรับการอนุญาตที่มีประสิทธิภาพสำหรับบริการ Windows เฉพาะจาก PowerShell ดังนี้:
Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser
หากต้องการอนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบสามารถเริ่มและหยุดบริการตัวจัดคิว ให้เรียกใช้คำสั่ง:
Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser
การใช้เทมเพลตความปลอดภัยเพื่อจัดการการอนุญาตบริการ
วิธีแบบกราฟิก (แต่ต้องมีการดำเนินการเพิ่มเติม) ในการจัดการสิทธิ์ของบริการคือการใช้เทมเพลตความปลอดภัย เปิด mmc.exe คอนโซลและเพิ่ม เทมเพลตความปลอดภัย สแนปอิน
สร้างเทมเพลตความปลอดภัยใหม่ (เทมเพลตใหม่)
ระบุชื่อสำหรับเทมเพลตใหม่และไปที่ System Services ส่วน. ในรายการบริการ ให้เลือกบริการ ตัวจัดคิวงานพิมพ์ แล้วเปิดคุณสมบัติ
เลือกโหมดเริ่มต้น (อัตโนมัติ ) และคลิก แก้ไขความปลอดภัย .
การใช้ เพิ่ม ปุ่ม เพิ่มบัญชีผู้ใช้หรือกลุ่มเพื่อให้การอนุญาต ในกรณีของเรา เริ่ม หยุด และหยุดชั่วคราว อนุญาตก็พอ
บันทึกเทมเพลตนี้
หมายเหตุ . เนื้อหาของเทมเพลตความปลอดภัยจะถูกบันทึกเป็นไฟล์ INF ในโฟลเดอร์ C:\Users\%username%\Documents\Security\Templatesหากคุณเปิดไฟล์นี้ คุณจะเห็นว่าข้อมูลเกี่ยวกับการอนุญาตได้รับการบันทึกในรูปแบบ SDDL ที่กล่าวถึงก่อนหน้านี้ สตริงที่ได้รับด้วยวิธีนี้สามารถใช้เป็นอาร์กิวเมนต์ของคำสั่ง sc.exe
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"Spooler",2,"D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
ตอนนี้คุณต้องสร้างฐานข้อมูลใหม่เท่านั้น (เปิดฐานข้อมูล) โดยใช้ ความปลอดภัย การกำหนดค่าและการวิเคราะห์ snap-in และนำเข้าเทมเพลตการรักษาความปลอดภัยของคุณจากไฟล์ Spooler User Rights.inf.
ใช้เทมเพลตนี้โดยเลือก กำหนดค่าคอมพิวเตอร์ทันที ตัวเลือกจากเมนูบริบท
ตอนนี้คุณตรวจสอบว่าผู้ใช้สามารถอนุญาตให้จัดการบริการ Print Spooler ภายใต้บัญชีที่ไม่ใช่ผู้ดูแลระบบได้
จะให้สิทธิ์ผู้ใช้ในการจัดการบริการโดยใช้ GPO ได้อย่างไร
ถ้าคุณต้องให้สิทธิ์แก่ผู้ใช้ในการเริ่ม/หยุดบริการหลายเซิร์ฟเวอร์หรือคอมพิวเตอร์โดเมน การใช้คุณลักษณะ Group Policy (GPO) จะง่ายกว่า:
สิทธิ์การรักษาความปลอดภัยของบริการ Windows เก็บไว้ที่ไหน
- สร้าง GPO ใหม่หรือแก้ไขที่มีอยู่ เชื่อมโยงไปยังคอนเทนเนอร์ Active Directory (OU) ที่จำเป็นด้วยวัตถุในคอมพิวเตอร์ ไปที่ส่วนนโยบาย การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> บริการระบบ;
- ค้นหาบริการ Spooler และให้สิทธิ์แก่ผู้ใช้ตามวิธีการที่อธิบายไว้ข้างต้น บันทึกการเปลี่ยนแปลงหมายเหตุ ก่อนหน้านี้ เราแสดงให้เห็นว่าการใช้ GPO เดียวกัน คุณสามารถซ่อนบริการ Windows จากผู้ใช้ทั้งหมดได้
- รอจนกว่าจะใช้ GPO บนคอมพิวเตอร์ไคลเอนต์ และตรวจสอบให้แน่ใจว่าได้กำหนดสิทธิ์บริการใหม่แล้ว
การตั้งค่าความปลอดภัยสำหรับบริการทั้งหมดที่คุณเปลี่ยนสิทธิ์เริ่มต้นจะถูกเก็บไว้ในคีย์รีจิสทรีของตนเอง
HKLM\System\CurrentControlSet\Services\<servicename>\Security
ใน ความปลอดภัย พารามิเตอร์ของประเภท REG_BINARYซึ่งหมายความว่าวิธีหนึ่งในการตั้งค่าการอนุญาตบริการบนคอมพิวเตอร์เครื่องอื่นคือการส่งออก/นำเข้าพารามิเตอร์รีจิสทรีนี้ (รวมถึงผ่าน GPO)
ดังนั้นเราจึงพิจารณาหลายวิธีในการจัดการการอนุญาตบริการ Windows ซึ่งอนุญาตให้คุณให้สิทธิ์ใดๆ สำหรับบริการของระบบแก่ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ หากผู้ใช้ต้องการการเข้าถึงบริการจากระยะไกล โดยไม่ต้องให้สิทธิ์การเข้าสู่ระบบในเครื่องหรือการเข้าถึง RDP คุณต้องอนุญาตให้ผู้ใช้เชื่อมต่อจากระยะไกลและระบุบริการผ่าน Service Control Manager