כיצד לאפשר למשתמש שאינו מנהל מערכת להפעיל/להפסיק שירות ב- Windows
כברירת מחדל, משתמשים רגילים (שאינם מנהלי מערכת) אינם יכולים לנהל את שירותי Windows. משמעות הדבר היא שמשתמשים אינם יכולים לעצור, להפעיל, להפעיל מחדש או לשנות את ההגדרות וההרשאות של שירותי Windows. במקרים מסוימים, יש צורך שלמשתמש תהיה הרשאה להפעיל מחדש או לנהל שירותים מסוימים. במאמר זה, נבחן מספר דרכים לניהול ההרשאות עבור שירותי Windows. לדוגמה, נראה כיצד לאפשר למשתמש שאינו מנהל מערכת להפעיל מחדש שירות Windows ספציפי.
נניח שעליך להעניק לחשבון התחום contoso\tuser את הזכות להפעיל מחדש את שירות מנגנון ההדפסה ברקע. אם המשתמש שאינו מנהל מערכת מנסה להפעיל מחדש את השירות, תוצג שגיאה:
net stop spoolerSystem 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 SpoolerD:(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_CONTINUE2 התווים האחרונים הם האובייקטים (משתמש, קבוצה או 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 spoolerSERVICE_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).
הפעל את סייר התהליכים כמנהל מערכת וחפש את תהליך השירות הדרוש לך ברשימת התהליכים. בדוגמה זו הוא
spoolsv.exe(קובץ ההפעלה ברקע C:\Windows\System32\spoolsv.exe). פתח את מאפייני התהליך ועבור אל הכרטיסיה שירותים;
לחץ על כפתור הרשאות. ACL הנוכחי של השירות מופיע בחלון. כברירת מחדל, משתמשים מקומיים יכולים רק להציג (לקרוא) את מצב השירות;
הוסף את המשתמש או הקבוצה שברצונך להעניק הרשאות שירות. כברירת מחדל, רק הרשאות השירות הבאות זמינות: שליטה מלאה, כתיבה וקריאה;
באפשרותך להקצות הרשאת כתיבה לשירות כך שמשתמשים יוכלו להפעיל ולהפסיק אותו. עם זאת, זה גם מאפשר למשתמש לשנות או אפילו להסיר את השירות;
כדי לאפשר רק את ההפעלה/הפסקה של השירות, לחץ על כפתור מתקדם -> בחר את המשתמש שלך, לחץ על ערוך -> לחץ על הצג הרשאות מתקדמות. השאר רק את האפשרויות התחל, עצור, קריאה, מצב שאילתה ובקרה מותאמת אישית ברשימת ההרשאות;
שמור שינויים;
המשתמש שהוקצה יכול כעת להפעיל מחדש את השירות.
הגדרת הרשאות שירות באמצעות 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).
צור GPO חדש או ערוך את הקיים וקשר אותו לגורם המכיל הדרוש של Active Directory (OU) עם אובייקטי המחשב. עבור אל תצורת מחשב -> הגדרות Windows -> הגדרות אבטחה -> שירותי מערכת;
אתר את שירות מנגנון ההדפסה ברקע ופתח את המאפיינים שלו;
הפעל את האפשרות הגדר הגדרות מדיניות אלה, הפעל הפעלה אוטומטית עבור השירות ולחץ על ערוך אבטחה;
בהגדרות אבטחת השירות, הוסף את המשתמש או קבוצת התחומים שברצונך להקצות הרשאות לשירות. הענקת הרשאת התחלה, עצירה והשהיה וקריאה;
כל שעליך לעשות הוא להמתין לעדכון הגדרות המדיניות הקבוצתית במחשבי הלקוח ולבדוק שהמשתמש יכול כעת להפעיל מחדש את השירות.
היכן מאוחסנות הרשאות האבטחה של שירות 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 המאפשרות להעניק למשתמשים שאינם מנהלי מערכת הרשאות כלשהן עבור שירותי מערכת.














