מתן הרשאות על SERVICE מסויים על ידי עריכת ה SDDL באמצעות פקודת SC

חיים ליזרוביץ, Microsoft Most Valuable Professional, מסביר על הרשאות אתחול SERVICE עבור משתמש
בהמשך למאמר הקודם שלי על שפת ה SDDL ומתן הרשאות ספציפיות על EVENT VIEWER, אציג כאן כיצד ניתן לתת הרשאה מסויימת עבור משתמש לאתחול  SERVICE, להלן המאמר הקודם שכתבתי:
http://blogs.microsoft.co.il/blogs/haiml/archive/2009/10/23/security-descriptor-definition-language.aspx

אנו נתמקד בפעולות הבאות:
sc sdshow –  הצגת הרשאות ה SDDL על SERVICE מסויים.
sc sdset – הגדרת הרשאה על SERVICE מסויים.

התחביר להצגת ההרשאות: sc sdshow
התחביר להגדרת ההרשאות: sc sdset "sddl string"

כיצד אנו יודעים מה שם ה SERIVCE באמצעות פקודת SC ?

יש להקליד את הפקודה SC QUERY על מנת לראות את שמות כל ה SERVICE-ים, אנו נתמד ב SERVICE של ה Automatic Updates ששמו הינו: wuauserv

 
 
כיצד אנו יודעים מה שם ה SERVICE באמצעות ה GUI ?

יש לגשת לשורת ההפעלה START –> RUN ולהקליד את הפקודה:  SERVICES.MSC:

ב Service Name ניתן לראות את שם ה SERVICE.
 

 
כיצד להציג את ההרשאות על אותו SERVICE?
יש להקליד את הפקודה sc sdshow wuauserv, כאשר wuauserv הינו ה SERVICE הספציפי:

 
 
ניתוח התוצאה:
אנו נתמקד ב STRINGS הבאים (צירוף כל 2 אותיות, אשר נצבעו בצבע שונה):
 
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)

D: = DACL
A: = ALLOW בטבלת ace_type string
CC = SERVICE_QUERY_CONFIG (set configuration)
LC = SERVICE_QUERY_STATUS
SW = SERVICE_ENUMERATE_DEPENDENTS
RP = SERVICE_START
WP = SERVICE_STOP
DT = SERVICE_PAUSE_CONTINUE (להשהות + להחיל סרביס)
LO = SERVICE_INTERROGATE
CR = SERVICE_USER_DEFINED_CONTROL
RC = READ_CONTROL

SY = LOCAL SYSTEM

כלומר ל LOCAL SYSTEM (למעשה USER TYPE) יש את ההרשאות המצויינות לעיל, בין היתר להשהות, לאתחל סרביס ולבצע שאילתה לגבי סרביס.

את שאר הקודים של ה USER TYPE ואת ה SDDL ניתן לראות כאן:

http://networkadminkb.com/Shared%20Documents/Understanding%20the%20SDDL%20permissions%20in%20the%20ACE_String.aspx

http://support.microsoft.com/kb/914392/en

כיצד לתת הרשאה למשתמש (SID) ספציפי עבור עצירה והחלה של סרביס ?

נתמקד בסרביס Automatic Updates המצויין למעלה, ראינו כי קוד ההראשות של ה SDDL הינו, (אנו מתייחסים להרשאות ה DACL אשר הדגשתי אותם בכחול), יש צורך להוסיף הרשאות עבור המשתמש במחרוזת שבין ה D: ל S:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

כלומר יש צורך לאפשר (ALLOW) למשתמש הספציפי (ערך A) לעצור (WP) ולהתחיל את הסרביס (RP) המדובר (automatic updates).

* להלן ה SID של אותו משתמש: S-1-5-21-2111063221-2081503460-1415713722-2524
על מנת לזהות את ה SID ניתן לראות ערך כיצד ניתן לזהות את ה SID של אותו משתמש ? בתחתית המאמר.
 
(A;;RPWP;;;S-1-5-21-2111063221-2081503460-1415713722-2524)

ערך A = ALLOW
RP = SERVICE_START
WP = SERVICE_STOP
S-1-5-21-2111063221-2081503460-1415713722-2524 = ה SID של אותו משתמש.

את הפקודה המצויינת נשלב כאן (בצבע אדום):
sc sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP;;;S-1-5-21-2111063221-2081503460-1415713722-2524)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

יש צורך לבדוק שקיבלנו הודעת SUCCESS לאחר הזנת הפקודה ב Command Prompt:

 

כיצד ניתן להתחבר מרחוק לרשימת ה SERVICES מבלי לקבל הודעת  Access Denied Error 5 ?

יש להקליד את הפקודה הבאה (לקוח מתוך ה http://support.microsoft.com/default.aspx?scid=kb;EN-US;907460):
sc sdset SCMANAGER D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

ננתח את שלושת המחרוזות של ה DACL :

מחרוזת ראשונה שלמעשה מספקת גישה ל Authnticated Users עבור ה service manager על אותו שרת

(כמובן שניתן לצמצם הרשאות ובמקום AU ניתן לשלב קבוצה כמו למשל PU = Power Users)

D:(A;;CCLCRPRC;;;AU)

D: = DACL
A: = ALLOW
CC = SERVICE_QUERY_CONFIG (set configuration)
LC = SERVICE_QUERY_STATUS
RP = SERVICE_START
RC = READ_CONTROL

AU = Authenticated Users

מחרוזת שניה:

(A;;CCLCRPWPRC;;;SY)

A: = ALLOW
CC = SERVICE_QUERY_CONFIG (set configuration)
LC = SERVICE_QUERY_STATUS
RP = SERVICE_START
WP = SERVICE_STOP
RC = READ_CONTROL

SY = Local System

מחרוזת שלישית:

(A;;KA;;;BA)

A: = ALLOW
KA = KEY_ALL_ACCESS
BA = Built-in (Local ) Administrators
 
כיצד ניתן לזהות את ה SID של אותו משתמש ?
 
ישנו סקריפט VBS אשר נמצא ב BLOG (שבהחלט מומלץ על ידי) hey, scripting guy , אשר מזהה את ה SID של משתמש מסויים ב AD:
 
להלן הסקריפט:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")

Set objAccount = objWMIService.Get _
("Win32_UserAccount.Name='kenmyer',Domain='fabrikam'")
Wscript.Echo objAccount.SID

להלן אתר הבלוג:
http://blogs.technet.com/heyscriptingguy/archive/2004/12/03/how-can-i-determine-the-sid-for-a-user-account.aspx

כאשר Win32_UserAccount.Name = ה SID של אותו משתמש.
Domain = שם ה NETBIOS של הדומיין.

ניתן לייצא את ה SID לקובץ TXT :
cscript name.vbs > haim.txt
name.vbs הינו שם הקובץ שבו העתקו את תוכנו של הסקריפט המוזכר לעיל.

haim.txt הינו הקובץ שאליו אנו מייצאים את שם ה SID.

המאמר נכתב ונערך ע"י חיים ליזרוביץ MVP:

Microsoft Most Valuable Professional
Microsoft Certified IT professional / Enterprise & Server Administrator
Microsoft Certified Technology Specialist
Microsoft Certified System engineer& Administrator
Vmware Certified Professional
 

דילוג לתוכן