ค้นหาเว็บไซต์

วิธีอนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเริ่ม/หยุดบริการใน Windows


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

สมมติว่าคุณต้องให้สิทธิ์แก่บัญชีโดเมน ผู้ใช้ contoso ในการเริ่มบริการ ตัวจัดคิวงานพิมพ์ ใหม่ หากผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบพยายามเริ่มบริการใหม่ ข้อผิดพลาดจะปรากฏขึ้น:

net stop spooler
System error 5 has occurred. Access is denied.

ใน Windows มีหลายวิธีในการให้สิทธิ์บริการ:

จัดการการอนุญาตบริการด้วย Windows CMD

คุณสามารถใช้คำสั่งคอนโซล sc.exe (Service Controller) ในตัวเพื่อจัดการสิทธิ์ของบริการ Windows

  • sc show

    - รายการสิทธิ์บริการปัจจุบัน

  • sc sdset

    - เปลี่ยนการอนุญาตบริการ

ข้อเสียเปรียบหลักของวิธีนี้คือรูปแบบการให้สิทธิ์ในบริการนั้นซับซ้อนมาก ใช้รูปแบบ Security Description Definition Language (SDDL)

คุณสามารถรับสิทธิ์บริการปัจจุบันเป็นสตริง SDDL:

sc.exe sdshow Spooler

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

สัญลักษณ์เหล่านี้คืออะไร?

S: — System Access Control List (SACL)
D: — Discretionary ACL (DACL)

ตัวอักษรตัวแรกหลังวงเล็บหมายถึง: อนุญาต (A) หรือปฏิเสธ (D)

สิทธิ์ที่กำหนดได้คืออักขระชุดถัดไป

CC — SERVICE_QUERY_CONFIG (query service settings)
LC — SERVICE_QUERY_STATUS (get service status)
SW — SERVICE_ENUMERATE_DEPENDENTS
LO — SERVICE_INTERROGATE
CR — SERVICE_USER_DEFINED_CONTROL
RC — READ_CONTROL
RP — SERVICE_START
WP — SERVICE_STOP
DT — SERVICE_PAUSE_CONTINUE

อักขระ 2 ตัวสุดท้ายคือวัตถุ (ผู้ใช้ กลุ่ม หรือ SID) ที่ได้รับสิทธิ์ นี่คือรายการของกลุ่มที่กำหนดไว้ล่วงหน้า

AU

ผู้ใช้ที่ได้รับการรับรองความถูกต้อง

AO

ผู้ดำเนินการบัญชี

RU

นามแฝงเพื่ออนุญาต Windows 2000 รุ่นก่อนหน้า

AN

เข้าสู่ระบบแบบไม่ระบุชื่อ

AU

ผู้ใช้ที่ได้รับการรับรองความถูกต้อง

BA

ผู้ดูแลระบบในตัว

BG

บิวท์อินแขก

BO

ตัวดำเนินการสำรอง

BU

ผู้ใช้ในตัว

CA

ผู้ดูแลระบบเซิร์ฟเวอร์ใบรับรอง

CG

กลุ่มผู้สร้าง

CO

เจ้าของผู้สร้าง

DA

ผู้ดูแลระบบโดเมน

DC

คอมพิวเตอร์โดเมน

DD

ตัวควบคุมโดเมน

DG

ผู้เยี่ยมชมโดเมน

DU

ผู้ใช้โดเมน

EA

ผู้บริหารองค์กร

ED

ตัวควบคุมโดเมนขององค์กร

WD

ทุกคน

PA

ผู้ดูแลระบบนโยบายกลุ่ม

IU

ผู้ใช้ที่เข้าสู่ระบบแบบโต้ตอบ

LA

ผู้บริหารท้องถิ่น

LG

แขกท้องถิ่น

LS

บัญชีบริการในพื้นที่

SY

ระบบท้องถิ่น

NU

ผู้ใช้เข้าสู่ระบบเครือข่าย

NO

ตัวดำเนินการกำหนดค่าเครือข่าย

NS

บัญชีบริการเครือข่าย

PO

ผู้ประกอบการเครื่องพิมพ์

PS

ส่วนตัว

PU

ผู้ใช้ไฟฟ้า

RS

กลุ่มเซิร์ฟเวอร์ RAS

RD

ผู้ใช้เซิร์ฟเวอร์เทอร์มินัล

RE

เครื่องจำลอง

RC

รหัสที่ถูกจำกัด

SA

ผู้ดูแลระบบสคีมา

SO

ตัวดำเนินการเซิร์ฟเวอร์

SU

ผู้ใช้บริการเข้าสู่ระบบ

คุณสามารถใช้กลุ่มที่กำหนดไว้ล่วงหน้าใน DACL หรือคุณสามารถระบุผู้ใช้หรือกลุ่มตาม SID ใช้คำสั่งเพื่อรับ SID สำหรับผู้ใช้ปัจจุบัน:

whoami /user

หรือ คุณสามารถใช้ Get-ADUSer cmdlet เพื่อค้นหา SID สำหรับผู้ใช้โดเมนใดก็ได้:

Get-ADUser -Identity 'sadams' | select SID

ใช้ cmdlet Get-ADGroup เพื่อรับ SID กลุ่มโดเมน:

Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID

หากต้องการกำหนดสตริง SDDL ที่มีสิทธิ์สำหรับบริการเฉพาะ ให้ใช้คำสั่ง sc sdset ในตัวอย่างนี้ เพิ่มบรรทัดต่อไปนี้ใน ACL ของบริการ

(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)
  • A - อนุญาต

  • RPWPCR - RP (SERVICE_START) + WP (SERVICE_STOP) + CR ( SERVICE_USER_DEFINED_CONTROL)

  • SID - SID ของผู้ใช้หรือกลุ่ม

เพิ่ม ACL ของคุณที่ส่วนท้ายของสตริงที่ส่งคืนโดย sdshow ใช้คำสั่ง sc sdset เพื่อใช้สิทธิ์ใหม่กับบริการ:

sc sdset Spooler "D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)"

หากคุณมี DACL ที่ถูกต้อง คำสั่งจะส่งกลับ:

[SC] SetServiceObjectSecurity SUCCESS

หากคุณระบุ SID ที่ไม่มีอยู่หรือทำผิดพลาดในไวยากรณ์ SDDL ข้อผิดพลาดจะเกิดขึ้น:

ไม่มีการแมประหว่างชื่อบัญชีและรหัสความปลอดภัย

ตรวจสอบว่าผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบสามารถหยุดและเริ่มบริการได้แล้ว:

net stop spooler && net start spooler

SERVICE_NAME: Spooler
DISPLAY_NAME: Print Spooler
        ACCOUNT: LocalSystem
        SECURITY:
        [ALLOW] NT AUTHORITY\Authenticated Users
                Query status
                Query Config
                Interrogate
                Enumerate Dependents
                User-Defined Control
                Read Permissions
        [ALLOW] NT AUTHORITY\SYSTEM
                Query status
                Query Config
                Interrogate
                Enumerate Dependents
                Pause/Resume
                Start
                Stop
                User-Defined Control
                Read Permissions
        [ALLOW] WOSHUB\max_adm
                Change Config
                Start
                Stop
                User-Defined Control
                Read Permissions
        [ALLOW] BUILTIN\Administrators
                All

ใน Windows รุ่นก่อนหน้า คุณสามารถใช้เครื่องมือคอนโซล SubInACL (ส่วนหนึ่งของ Windows Resource Kit) เพื่อจัดการการอนุญาตบริการ

ในการอนุญาตให้บัญชีผู้ใช้ contoso เริ่มบริการใหม่:

subinacl.exe /service Spooler /grant=contoso\tuser=PTO

ในกรณีนี้ ผู้ใช้ได้รับสิทธิ์ในการหยุดชั่วคราว/ดำเนินการต่อ เริ่ม และหยุดบริการ รายการสิทธิพิเศษทั้งหมด:

F

ควบคุมทั้งหมด

R

อ่านทั่วไป

W

เขียนทั่วไป

X

eXecute ทั่วไป

L

อ่านการควบคุมL

Q

การกำหนดค่าบริการแบบสอบถาม

S

สอบถามสถานะบริการ

E

ระบุบริการที่ต้องพึ่งพา

C

การกำหนดค่าการเปลี่ยนแปลงบริการ

T

เริ่มบริการ

O

หยุดให้บริการ

P

หยุดชั่วคราว/ดำเนินการต่อบริการ

I

บริการสอบถาม

U

คำสั่งควบคุมที่ผู้ใช้บริการกำหนด

หากต้องการเพิกถอนสิทธิ์ที่ผู้ใช้กำหนดในบริการ ให้ใช้ตัวเลือก /revoke:

subinacl.exe /service Spooler /revoke=contoso\tuser

อย่างไรก็ตาม ขณะนี้ SubInACL ยังไม่พร้อมให้ดาวน์โหลดจากเว็บไซต์ Microsoft และไม่แนะนำให้ใช้

วิธีเปลี่ยนการอนุญาตบริการโดยใช้ Process Explorer

คุณสามารถจัดการสิทธิ์ของบริการจาก GUI โดยใช้เครื่องมือ Process Explorer (https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer)

  1. เรียกใช้ Process Explorer ในฐานะผู้ดูแลระบบและค้นหากระบวนการของบริการที่คุณต้องการในรายการกระบวนการ ในตัวอย่างนี้ก็คือ

    spoolsv.exe

    (ตัวจัดคิวปฏิบัติการได้ C:\Windows\System32\spoolsv.exe) เปิดคุณสมบัติกระบวนการและไปที่แท็บ บริการ

  2. คลิกที่ปุ่ม สิทธิ์ ACL ปัจจุบันของบริการปรากฏในหน้าต่าง ตามค่าเริ่มต้น ผู้ใช้ภายในสามารถดู (อ่าน) สถานะบริการเท่านั้น

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

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

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

  6. บันทึกการเปลี่ยนแปลง;

  7. ผู้ใช้ที่ได้รับมอบหมายสามารถเริ่มบริการใหม่ได้แล้ว

ตั้งค่าการอนุญาตบริการโดยใช้ PowerShell

cmdlet การจัดการบริการ Set-Service ในตัวช่วยให้คุณสามารถกำหนดสิทธิ์ในบริการโดยใช้รูปแบบ SDDL ซึ่งคล้ายกับ sc sdset:

$SDDL = "D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)"
Set-Service -Name Spooler -SecurityDescriptorSddl $SDDL

cmdlet เวอร์ชันนี้จะใช้ได้หลังจากที่คุณติดตั้ง/อัปเกรด PowerShell Core เท่านั้น

ใน Windows PowerShell 5.1 คำสั่งนี้ล้มเหลว:

Set-Service : A parameter cannot be found that matches parameter name 'SecurityDescriptorSddl'.

คุณยังสามารถจัดการสิทธิ์บนวัตถุ Windows ต่างๆ โดยใช้โมดูล คาร์บอน จาก PowerShell Gallery ติดตั้งโมดูล:

Install-Module -Name 'Carbon'
Import-Module 'Carbon'

ในการให้สิทธิ์แก่บริการ ให้ใช้คำสั่ง:

Grant-CServicePermission -Identity a-d\maxadm -Name spooler -QueryStatus -EnumerateDependents -Start -Stop

แสดงรายการ ACL ปัจจุบันของบริการ:

Get-ServicePermission -Name spooler|fl

วิธีใช้นโยบายกลุ่มเพื่อให้สิทธิ์สำหรับบริการ

หากคุณต้องการให้สิทธิ์ อนุญาตให้ผู้ใช้เริ่มและหยุดบริการบนเซิร์ฟเวอร์โดเมนหรือคอมพิวเตอร์ทั้งหมด วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้คุณลักษณะนโยบายกลุ่ม (GPO)

  1. สร้าง GPO ใหม่หรือแก้ไข GPO ที่มีอยู่และเชื่อมโยงกับคอนเทนเนอร์ Active Directory (OU) ที่จำเป็นกับวัตถุคอมพิวเตอร์ ไปที่ การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> บริการระบบ

  2. ค้นหาบริการ ตัวจัดคิวงานพิมพ์ และเปิดคุณสมบัติ

  3. เปิดใช้งานตัวเลือก กำหนดการตั้งค่านโยบายนี้ เปิดใช้งานการเริ่มอัตโนมัติสำหรับบริการ และคลิก แก้ไขความปลอดภัย

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

  5. สิ่งที่คุณต้องทำคือรอให้การตั้งค่า Group Policy ได้รับการอัปเดตบนคอมพิวเตอร์ไคลเอนต์ และตรวจสอบว่าผู้ใช้ของคุณสามารถเริ่มบริการใหม่ได้แล้ว

สิทธิ์การรักษาความปลอดภัยของบริการ Windows เก็บไว้ที่ไหน

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

HKLM\System\CurrentControlSet\Services\<servicename>\Security

ในพารามิเตอร์ Security (ประเภท REG_BINARY)

ซึ่งหมายความว่าวิธีหนึ่งในการตั้งค่าการอนุญาตแบบเดียวกันบนคอมพิวเตอร์เครื่องอื่นคือการส่งออก/นำเข้าพารามิเตอร์รีจิสทรีนี้ คุณสามารถใช้ GPO เพื่อปรับใช้การเปลี่ยนแปลงกับรีจิสทรีบนคอมพิวเตอร์โดเมน

หากคุณต้องการให้ผู้ใช้สามารถหยุด/เริ่มต้น/รีสตาร์ทบริการจากระยะไกล (โดยไม่ต้องให้สิทธิ์การลงชื่อเข้าใช้ในเครื่องหรือการเข้าถึง RDP) คุณต้องอนุญาตให้ผู้ใช้ระบุบริการ Service Control Manager จากระยะไกล (

scmanager

).

คำสั่งต่อไปนี้อนุญาตให้กลุ่มระยะไกล (ผู้ใช้) ที่มี SID ที่ระบุเพื่อระบุรายการบริการบนคอมพิวเตอร์ระยะไกล:

sc sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;{PASTE_YOUR_SID_HERE})S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"

มิฉะนั้น คุณจะได้รับข้อผิดพลาดเมื่อคุณพยายามสอบถามบริการบนโฮสต์ Windows ระยะไกล:

sc \\lonts-01 query
[SC] OpenSCManager FAILED 5:
Access is denied.

ดังนั้นเราจึงได้พิจารณาวิธีต่างๆ ในการจัดการการอนุญาตสำหรับบริการ Windows ที่อนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบอนุญาตสิทธิ์สำหรับบริการระบบ

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