כיצד לאפשר למשתמש שאינו מנהל מערכת להפעיל/להפסיק שירות ב- Windows


כברירת מחדל, משתמשים רגילים (שאינם מנהלי מערכת) אינם יכולים לנהל את שירותי Windows. משמעות הדבר היא שמשתמשים אינם יכולים לעצור, להפעיל, להפעיל מחדש או לשנות את ההגדרות וההרשאות של שירותי Windows. במקרים מסוימים, יש צורך שלמשתמש תהיה הרשאה להפעיל מחדש או לנהל שירותים מסוימים. במאמר זה, נבחן מספר דרכים לניהול ההרשאות עבור שירותי Windows. לדוגמה, נראה כיצד לאפשר למשתמש שאינו מנהל מערכת להפעיל מחדש שירות Windows ספציפי.

נניח שעליך להעניק לחשבון התחום contoso\tuser את הזכות להפעיל מחדש את שירות מנגנון ההדפסה ברקע. אם המשתמש שאינו מנהל מערכת מנסה להפעיל מחדש את השירות, תוצג שגיאה:

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

ב- Windows, קיימות מספר דרכים להעניק הרשאות שירות:

ניהול הרשאת שירות באמצעות Windows CMD

באפשרותך להשתמש בפקודת מסוף sc.exe (בקר שירות) המוכללת כדי לנהל את ההרשאות של שירות 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

בעלים של Creator

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

לחלופין, באפשרותך להשתמש ב- cmdlet Get-ADUser כדי למצוא את ה- 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)
  • א - אפשר

  • 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\tuser להפעיל מחדש את השירות:

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

במקרה זה, המשתמש קיבל את ההרשאות להשהות/המשך, התחל והפסק את השירות. רשימה מלאה של הרשאות זמינות:

F

שליטה מלאה

R

קריאה כללית

W

כתיבה גנרית

X

eXecute גנרי

L

קרא controL

Q

תצורת שירות שאילתות

S

מצב שירות שאילתות

E

ספירת שירותים תלויים

C

תצורת שינוי שירות

T

התחל שירות

O

הפסקת שירות

P

השהה/המשך שירות

I

שירות חקירה

U

פקודות בקרה המוגדרות על-ידי המשתמש של השירות

כדי לבטל זכויות שהוקצו למשתמש לשירות, השתמש באפשרות /revoke :

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

עם זאת, SubInACL אינו זמין כעת להורדה מאתר האינטרנט של Microsoft ואינו מומלץ לשימוש.

כיצד לשנות הרשאת שירות באמצעות Process Explorer

באפשרותך לנהל הרשאות שירות מממשק המשתמש הגרפי באמצעות הכלי Process Explorer (https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer).

  1. הפעל את סייר התהליכים כמנהל מערכת וחפש את תהליך השירות הדרוש לך ברשימת התהליכים. בדוגמה זו הוא

    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 שונים באמצעות מודול Carbon מגלריית PowerShell. התקן את המודול:

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 חדש או ערוך את הקיים וקשר אותו לגורם המכיל הדרוש של Active Directory (OU) עם אובייקטי המחשב. עבור אל תצורת מחשב -> הגדרות Windows -> הגדרות אבטחה -> שירותי מערכת;

  2. אתר את שירות מנגנון ההדפסה ברקע ופתח את המאפיינים שלו;

  3. הפעל את האפשרות הגדר הגדרות מדיניות אלה, הפעל הפעלה אוטומטית עבור השירות ולחץ על ערוך אבטחה;

  4. בהגדרות אבטחת השירות, הוסף את המשתמש או קבוצת התחומים שברצונך להקצות הרשאות לשירות. הענקת הרשאת התחלה, עצירה והשהיה וקריאה;

  5. כל שעליך לעשות הוא להמתין לעדכון הגדרות המדיניות הקבוצתית במחשבי הלקוח ולבדוק שהמשתמש יכול כעת להפעיל מחדש את השירות.

היכן מאוחסנות הרשאות האבטחה של שירות Windows?

הגדרות האבטחה עבור כל השירותים שעבורם שינית את הרשאות ברירת המחדל מאוחסנות במפתח הרישום שלהם

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

בפרמטר אבטחה (סוג REG_BINARY).

משמעות הדבר היא שאחת הדרכים להגדיר את אותן הרשאות במחשבים אחרים היא לייצא/לייבא פרמטר רישום זה. באפשרותך להשתמש ב- GPO כדי לפרוס שינויים ברישום במחשבי תחום.

אם ברצונך שהמשתמש יוכל להפסיק/להפעיל/להפעיל מחדש את השירות מרחוק (מבלי להעניק לו הרשאות כניסה מקומיות או גישת RDP), עליך לאפשר לו למנות מרחוק את שירות מנהל בקרת השירות (

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 המאפשרות להעניק למשתמשים שאינם מנהלי מערכת הרשאות כלשהן עבור שירותי מערכת.