ניהול הרשאות NTFS עם PowerShell: מדריך

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

PowerShell מציע שני פקודות cmdlets במיוחד לעבודה עם לוחות בקרה גישה (ACL) בשם Get-ACL ו-Set-ACL. שתי פקודות אלו מסוגלות לאחזר ולהקצות כמעט כל רמת הרשאות NTFS, והכל יופיע במדריך זה. אם ברצונך להיות יעיל יותר ולהיות מיידית שימושי בניהול ההרשאות ב-NTFS, המשך לקרוא.

אין לך זמן לקרוא? אין בעיה! צפה בסרטון הלוואי מ-TechSnips.io של Anthony Howell למטה:

ניהול ודיווח על הפעלת התקן והתקנה, אקסצ'יינג' ו-Microsoft 365 עם ManageEngine ADManager Plus. הורד גרסה דמו חינם!

דרישות מוקדמות

כדי להמשיך עם הדוגמאות במדריך זה, יש לך צורך ב:

יצירת קבצים/תיקיות לבדיקה

המדריך הזה יוקם סביב "מעבדה" פשוטה או תיקייה בודדת. תלמד איך לעבוד עם הרשאות NTFS בפוורשל מההתחלה; אין צורך בעבודה נוספת מצידך.

  1. כדי להתחיל, פתח ישיבת פוורשל כמנהל.
  2. צור תיקיה ריקה בשם "Share" באיזשהו מקום במערכת הקבצים שלך. בדוגמאות הבאות, נניח שהתיקיה נמצאת ב- C:\Share. זה ישמור על הדוגמאות קצרות וקלות יותר לעקיפה. תוכל ליצור את התיקיה הזו על ידי העתקת הקוד הבא:
New-Item -ItemType Directory -Path 'C:\Share'

3. צור תיקיה בשם C:\Share\Assets.

New-Item -ItemType Directory -Path 'C:\Share\Assets'

4. צור קובץ בשם client_list.txt בתיקית C:\Share.

New-Item -ItemType File -Path 'C:\Share\Client_list.txt'

5. צור קובץ בשם client_projects.txt בתיקית C:\Share.

New-Item -ItemType File -Path 'C:\Share\Client_projects.txt'

6. לבסוף, הקצה משתנה עבור נתיב התיקיה "Share". יצירת משתנים חוסכת בהקלדה והופכת את הנתיב לקל לשימוש מחדש. בהנחה שאתה משתמש ב- C:\Share, העתק את דוגמת הקוד הבאה ליישוב פוורשל שלך:

$dir = 'C:\Share'

7. לחץ Enter. כעת יש לך ספרייה ריקה ושמרת את הנתיב הזה כמשתנה.

צפייה בהרשאות NTFS עם Get-Acl

PowerShell מאפשר לך לצפות במהירות בהרשאות NTFS באמצעות פקודת Get-Acl. בסעיפים הבאים, תלמד כיצד להשתמש בפקודה כדי לצפות בהרשאות NTFS לקובץ או תיקייה.

רשימת בקרת גישה (ACL היא רשימת רשומות של בקרת גישה (ACE). כל ACE ב-ACL מזהה אמון וצורף את ההרשאות לגישה שמותרות, נדחות או מבודקות. דיסקריפטור לאבטחה עבור אובייקט בטחוני יכול לכלול שני סוגי ACL: DACL ו-SACL.

הצגת ההרשאות של NTFS

באופן מסורתי, תראה את ACL על ידי לחיצה ימנית על התיקייה C:\Share, לחיצה על מאפיינים, בחירה בלשונית אבטחה, ולחיצה על מתקדם. ניתן לראות דוגמה לאיך ה-GUI מציג את ההרשאות למטה.

Access Control List using Advanced Security Settings for Share

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

באמצעות התיקייה שיצרת מראש, הצג את ההרשאות הנוכחיות של NTFS לתיקייה באמצעות Get-Acl.

Get-Acl -Path $dir

עכשיו אתה אמור לראות את הנתיב, בעלים ופרטי הגישה בתמונת המסך הבאה.

Access Control List

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

(Get-Acl -Path $dir).Access

הפקודה לעיל יכולה גם להיות ביטוי באמצעות האובייקט Access ובאמצעות הפרמטר -ExpandProperties: Get-Acl -Path $dir | Select-Object -ExpandProperty Access

כפי שמוצג בצילום המסך הבא, הפלט מסובב כדי להקל על ראות הפקודה את המאפיינים היחידים של Access:

Access Control Entities

צפייה במאפייני גישה בדרך הנ"ל יכולה לגרום לפלט של הטרמינל להתגלגל מהר על המסך אם יש לך הרבה יחידות בקרת גישה (ACE). כל יחידה מכילה מאפייני FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags ו-PropagationFlags. כדי להפוך את זה לקצת יותר קריא, צריך לשלוף את האובייקטים ל-Format-Table -AutoSize. הרץ את הפקודה הבאה.

(Get-Acl -Path $dir).Access | Format-Table -AutoSize

כפי שניתן לראות בצילום המסך למטה, מאפייני הגישה נקיים ומאורגנים יותר כאשר משתמשים ב-Format-Table -AutoSize:

Cleaner output when piping to Format-Table

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

Access Control List using Advanced Security Settings for Share

סינון עצמיים לגישה

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

דוגמת הקוד למטה מסננת אובייקטים שלא מורישים הרשאות NTFS. הדבר נעשה על ידי שימוש ב- Where-Object עם האופרנד -Not שמסתכל על האובייקט הנוכחי בצינור $_. נכס האובייקט של IsInherited, שמציין אם ה- ACE הוא תוצאה של ירושה ולא הוגדר באופן ברור:

(Get-Acl -Path $dir).Access | Where-Object {$_.IsInherited -eq $true} | Format-Table -AutoSize

זכור לכלול אובייקטים בצינור ל- Format-Table -AutoSize אחרת הפלט יגלול למטה במסך. תקדם את זה להרגל חדש; תודה לי מאוחר יותר!

באמצעות הקוד למטה, החלף את 'שם משתמש' בשם משתמש אחר כדי לראות תוצאות ספציפיות:

(Get-Acl -Path $dir).Access | Where-Object {$_.IdentityReference -like 'USERNAME'} | Format-Table -AutoSize

למטה נמצאת דוגמה לאיך יכולות להיראות התוצאות:

Sample output from the filtering

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

המשך ותרגל את מה שלמדת עד כה על Get-Acl. בדוק כמה קבצים ותיקיות שונים במערכת שלך. זה יעזור לך לראות מגוון של תיאוריות אבטחה שונות להקשרים שונים. זה גם יעזור לבנות זיכרון שריר.

בואו נעלה את העניינים קצת ונקצור הרשאות NTFS.

שינוי הרשאות NTFS עם Set-Acl

עכשיו שאתה יכול להציג את הרשאות NTFS, הגיע הזמן להקצות ולשנות הרשאות NTFS באמצעות PowerShell. פקודת ה-cmdlet Set-Acl מקיימת את זה. הסעיפים הבאים ידגימו כיצד להשתמש ב-cmdlet זו בשילוב עם Get-Acl כדי להעתיק, לשנות ירושה ולהסיר הרשאות NTFS מקובץ או מתיקייה.

העתקת הרשאות NTFS

ייתכן ויש לך קובץ או תיקייה שמכילים את רמת ההרשאות של NTFS המתאימה שאתה צריך להשתמש בה ב-ACL חדש. ניתן לחסוך זמן על ידי העתקת הרשאות מקובץ או מתיקייה אחרת.

העתקת ACLs/ACEs קיימים יכולה להפחית שגיאות אנושיות בעת הגדרת הרשאות NTFS, בהנחה שהתיאור האבטחה שאתה מעתיק מתאים ונכון ליעד במקור. כמו שנאמר, "עם כוח גדול מגיעה אחריות גדולה.". תשמור על זה בזיכרון.

ה Consid רה את התמונה המסך הבאה. כאן אתה מסתכל על ה ACL עבור קובץ ב C:\Share בשם Client_List.txt. ה-ACL מכיל את הרמה הנכונה של הרשאות NTFS שאתה רוצה:

Client list with appropriate NTFS permissions for Bill, the new employee.

עכשיו, שקול את התמונה הבאה. הפעם אתה מסתכל על ה ACL עבור קובץ נוסף ב C:\Share בשם Client_Projects.txt. לקובץ הזה אין את ההרשאות NTFS שאתה רוצה:

Client Projects with no access for Bill.

עליך להעתיק את ההרשאות NTFS מ Client_List.txt ל Client_Projects.txt. איך אתה יכול לעשות זאת? תשנה את ההרשאות על ידי קבלת ה ACL מ Client_List.txt ואז שימוש ב- Set-Acl cmdlet עם הפרמטר -AclObject. כאשר אתה מפעיל את הקוד למטה, כל ה-ACL מ Client_List.txt יועתק ל Client_Projects.txt :

# העתקת מדגם האבטחה של Client_list.txt ל-Client_Projects.txt
$Acl = Get-Acl -Path 'C:\Share\Client_list.txt'
Set-Acl -AclObject $Acl -Path 'C:\Share\Client_Projects.txt'

כפי שניתן לראות בתמונה מספר, הקובץ Client_Projects.txt כעת כולל את אותם מדבקי בטחון כמו ב- Client_list.txt.

  1. קבל ACL קיים מקובץ קיים.
  2. הגדר את אובייקט ה-ACL שהועתק לקובץ או תיקייה.
  3. וודא שה-ACL הועתק לקובץ או לתיקייה בצורה נכונה.
NTFS Permissions Copied

אתה רואה כעת שה-ACL זהה לקובץ Client_Projects.txt כמו בקובץ Client_List.txt בעמודה IdentityReference עם AccessControlType מוגדר ל Allow. תשתמש בטכניקה זו גם להקצאת הרשאות NTFS לתיקיות.

בקטע האחרון, העתקת את ההרשאות הקיימות של NTFS מאובייקט קובץ אחד לאחר. הפעם אתה הולך ליצור הרשאות NTFS מתחילה. זה יאפשר לך להקצות הרשאות NTFS שיתקבלו על ידי קובץ או תיקייה.

ראשית, התחל בהקצאת משתנים לשימוש ביצירת אובייקט חדש המשמש על ידי Set-Acl. עשה זאת בכדי להקל קצת כאשר יידרש להריץ את הפקודה. הקוד למטה בונה את התכונות של ACE שיהפוך להרשאות NTFS שיוקצו לקובץ או לתיקייה:

# יצירת ACE
$identity = 'domain\user'
$rights = 'FullControl' # אפשרויות אחרות: [enum]::GetValues('System.Security.AccessControl.FileSystemRights')
$inheritance = 'ContainerInherit, ObjectInherit' # אפשרויות אחרות: [enum]::GetValues('System.Security.AccessControl.Inheritance')
$propagation = 'None' # אפשרויות אחרות: [enum]::GetValues('System.Security.AccessControl.PropagationFlags')
$type = 'Allow' # אפשרויות אחרות: [enum]::GetValues('System.Security.AccessControl.AccessControlType')
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)

לאחר מכן, הקצה עוד משתנה שיקבל את ה-ACL הראשוני עבור התיקייה Assets. לאחר מכן, באמצעות חבר הטיפול AddAccessRule, הוסף כלל גישה באמצעות המשתנה $ACE:

$Acl = Get-Acl -Path "$dir\Assets"
$Acl.AddAccessRule($ACE)

אתה מוכן כעת להוסיף את ACE החדש שנוצר ל-ACL של C:\Share\Assets. כעת השתמש ב-Set-Acl כדי להחיל את ACE החדש על המדריך המתאים:

Set-Acl -Path "$dir\Assets" -AclObject $Acl

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

(Get-Acl -Path "$dir\Assets").Access | Format-Table -Autosize

הסרת הרשאות NTFS

יהיה יום שבו תצטרך להסיר הרשאות NTFS ממשאב.

כדי להסיר הרשאות NTFS, התחל על ידי קבלת ה-ACL הנוכחית עבור הקובץ או התיקייה. בדוגמה זו, הקובץ הוא Client_Projects.txt:

$Acl = Get-Acl -Path "$dir\Client_Projects.txt"

עכשיו סנן את ACE המסוים שתרצה להסיר. עשה זאת על ידי קריאה לאובייקטי החבר $Acl ושימוש בפקודת Where-Object ובמספר אופרנדים:

$Ace = $Acl.Access | Where-Object {($_.IdentityReference -eq 'domain\user') -and -not ($_.IsInherited)}

לאחר מכן, השתמש במשתנה $Acl שמכיל את תיאורי האבטחה הנוכחיים של ה-ACL, קרא לשיטת RemoveAccessRule והעבר את אובייקט ה-ACE שנוצר לעיל באמצעות הפקודה New-Object לשיטה RemoveAccessRule(). זה יסיר את הרשומה:

$Acl.RemoveAccessRule($Ace)

חשוב לזכור ששינית את ה-ACL הקיים כאן ועדיין לא שמרת את השינויים.

עכשיו כדי לשמור על השינויים, הפעל את הפקודה Set-Acl, וספק את הפרמטרים -Path ו--AclObject עם הערכים המתאימים של "$dir\Client_Projects.txt" ו-$Acl. לאחר שהזנת את הפקודה למטה, לחץ Enter:

Set-Acl -Path "$dir\Client_Projects.txt" -AclObject $Acl

ניהול ודיווח על מאגר הנתונים הפעיל, Exchange ו-Microsoft 365 עם ManageEngine ADManager Plus. הורדה לניסיון חינם!

סיכום

במאמר זה, למדת על ניהול הרשאות NTFS בעזרת PowerShell. למדת על שני ה-cmdlets, Get-Acl ו-Set-Acl, ועל מה הם עושים עם הרשאות NTFS.

למדת גם כיצד להשתמש בפילטרים כדי לגעת ב-ACE ספציפי ב-ACL לשימוש ב-cmdlets שלמעלה. עם קצת תרגול, תוכל בקלות לנהל יותר בקשות להרשאות NTFS מאי פעם.

קריאה נוספת

Source:
https://adamtheautomator.com/ntfs-permissions/