חיים ליזרוביץ, 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


