שאלה כיצד לאלץ את PowerShell לא לאפשר חלון פקודה אינטראקטיבי


אני סיטריקס ומבקש להגביל את אוכלוסיית המשתמשים הכללית בשרתים שלנו מלהשתמש ב- PowerShell כדי להפעיל סקריפטים משלהם, או להשתמש בו באופן אינטראקטיבי. אנחנו כבר disallowing את השימוש בשורת הפקודה דרך לע"מ, אבל עם PowerShell זמין, זה בעצם חסר תועלת.

מצאתי כי Powershell.exe יש אפשרות שורת הפקודה של -NoInteractive אשר יאפשר למשתמש להפעיל סקריפט, אבל זה לא מספק להם שורת פקודה אינטראקטיבית. הבעיה היא שלא מצאתי דרך לאלץ את כוחותיה לפעול כך. אני אפילו הרחיק לכת כדי ליצור קובץ Script של C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1 שיבדוק את -NoInteractive אבל המשתמשים יכולים לעקוף את זה פשוט על ידי השקת Powershell.exe עם -NoProfile פרמטר.

הבעיה השנייה היא שאנחנו עושים שימוש הרבה סקריפטים PowerShell להשיק יישומים עבור משתמשים חלקים של סקריפט ההתחברות כתובים PowerShell ו צריך לרוץ תחת ההקשר המשתמש, אז אני לא יכול פשוט ACL קובץ EXE. אני צריך אותם כדי להיות מסוגל להשתמש PowerShell, פשוט לא אינטראקטיבי. בסופו של דבר, אנחנו רוצים לאכוף את AllSigned מדיניות ביצוע ולהחתים את כל הסקריפטים כך הדבר היחיד שהמשתמש יכול להפעיל הוא סקריפט שאנחנו (המנהלים) יצרו ו / או חתם ב.

ניסיתי googling עבור תשובה זו ומצאתי אנשים רבים משתמשים -NoInteractive, אבל לא מצאתי מקרה שבו מישהו ניסה לכפות אותו. רעיונות כלשהם?


7
2017-11-07 16:27




אני חושב שכבר יש לך חלק מהפתרון. חתימת סקריפטים ואכיפת מדיניות כדי למנוע תסריטים לא חתומים מלהפעיל נשמע כמו תוכנית טובה. אתה עדיין צריך לכסות את השימוש האינטראקטיבי למרות. - Dominic Cronin


תשובות:


אני חושב שאתה לא מבין את השימוש של מתג -Noninteractive; אתה עדיין יכול לרוץ powershell -noninteractive ולקבל הנחיה אינטראקטיבית. המתג הלא-אינטראקטיבי מיועד לתרחישי Scripting אוטומטיים, שבהם אתה לא רוצה לשלוח את הבקשה למשתמש ולהמתין לתשובה. לדוגמה, בחלון PowerShell לא אינטראקטיבי, אם אתה מפעיל Get-Credential ללא כל הפרמטרים זה ייכשל מיד במקום לבקש שם משתמש וסיסמה. Nonactiveactive לא יפעל כמנגנון אבטחה.

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


10
2017-11-07 19:39



תודה על שהצבעת את זה. הייתי בודק את זה על ידי הפעלת "powershell.exe -nointeractive" מתוך תיבת הפעלה וזה ייעלם מיד, אז הנחתי שזה היה ההתנהגות. מתברר שזה נכשל כי הייתי משתמש -NoInactive במקום -NonInactiveactive. facepalm - SalamanderMN
למרות הבעיה שלי נשאר. אני עדיין צריך למצוא דרך להגביל Powershell באותה הדרך שבה מיקרוסופט תכננה את ההגבלה של שורת הפקודה. בסביבה מרובת משתמשים, זהו נוהג נפוץ יחסית להגן על המשתמשים מפני פגיעה בעצמם. (במיוחד אלה שאינם מתמצא IT) המשתמשים שלי אין שום סיבה להשתמש PowerShell אז אני רוצה לנעול אותו. - SalamanderMN
ובכן, אני לא יודע על דרך, במיוחד אם אתה רוצה להשתמש powershell עבור סקריפטים התחברות. אל תגרום למשתמשים שלך למנהלי מערכת מקומיים, להגדיר רשימות בקרת גישה מתאימות בקבצים / תיקיות, ואיני רואה היכן הבעיה. לאחר מכן, אם יש לך משתמש מתמצא ב- IT, הם יכולים להשתמש ב- PowerShell כדי להאיץ את עבודתם. אם למשתמש יש הרשאה למחוק קובץ, הוא יכול לעשות זאת בין אם הם יכולים לגשת ל- PowerShell ובין אם לאו. אם אתה צריך לחסום את זה, אז אני חושב שיהיה עליך ACL את הקובץ ולאחר מכן למצוא דרך אחרת להשיק את התסריטים PS1 (לארח את זמן ריצת PS ב C # App?). - jbsmith


אני מאמין שיש לי פתרון שיעבוד, למרות שזה לא יפה במיוחד. משתמש פחמימות היה על המסלול הנכון. אם אני בסופו של דבר ACLing את powershell.exe להסיר לבצע הרשאות מקבוצת המשתמשים, המונעת מהם להפעיל חלון אינטראקטיבי. עבור אותם סקריפטים PowerShell כי המשתמשים צריכים להפעיל באמצעות סקריפט התחברות, אנחנו יכולים לקמפל סקריפטים אלה לתוך EXE באמצעות PowerGUI וזה מאפשר סקריפטים לרוץ, שכן זה לא קורא את ההפעלה PowerShell.

אנחנו מתלבטים אם אנחנו רוצים לקחת את זה עוד צעד נוסף ולהשתמש AppLocker GPO להגביל סקריפטים PowerShell רק אלה שיש לנו ברכה. כמובן, אנחנו יכולים לשים את ההגבלות האלה רק על המשתמש הממוצע שאינו IT ולאפשר למנהלים שלנו להמשיך להשתמש PowerShell כרגיל. זה יהיה כרוך קצת תקורה ניהולית כדי לשמור, ולכן חלק AppLocker לא יכול לבוא לידי ביטוי.


1
2017-11-14 20:55