إدارة أذونات NTFS بواسطة PowerShell: دورة تعليمية

إذا كنت محترف تكنولوجيا المعلومات وتجد صعوبة في ضبط إذن نظام الملفات لمؤسستك، فأنت محظوظ. إدارة أذونات NTFS باستخدام واجهة رسومية مستهلكة للوقت خاصة عند العمل مع العديد من المستخدمين أو المجموعات. لحسن الحظ، لدينا PowerShell لجعل الأمور أفضل تمامًا. كيف؟ عبر استخدام الوحدة النمطية Microsoft.PowerShell.Security.

يحتوي PowerShell على اثنين من الأوامر المساعدة خصيصًا للعمل مع قوائم التحكم في الوصول المسماة Get-ACL و Set-ACL. يمكن لهاتين الأمرين استرداد وتعيين أي عدد من أذونات NTFS التي ستتعلم عنها كل شيء في هذا البرنامج التعليمي. إذا كنت ترغب في أن تصبح أكثر كفاءة وفورية في إدارة أذونات NTFS ، فاستمر في القراءة.

لا يوجد وقت للقراءة؟ لا مشكلة! شاهد هذا الفيديو المصاحب من المدونة التقنية TechSnips.io بواسطة أنتوني هاول أدناه:

إدارة وتقرير Active Directory ، Exchange و Microsoft 365 باستخدام ManageEngine ADManager Plus. تنزيل النسخة التجريبية المجانية!

المتطلبات الأولية

لمتابعة الأمثلة في هذا البرنامج التعليمي ، تحتاج إلى:

إنشاء ملفات / مجلدات للاختبار معها

سيتم بناء هذا البرنامج التعليمي حول “مختبر” بسيط أو مجلد واحد. ستتعلم كيفية التعامل مع أذونات NTFS في PowerShell من الصفر؛ لا يلزم أي عمل إضافي من جانبك.

  1. للبدء، افتح جلسة PowerShell كمسؤول.
  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”، قم بنسخ مثال الكود التالي في جلسة PowerShell الخاصة بك:

$dir = 'C:\Share'

7. اضغط على Enter. لديك الآن مجلد فارغ وقد تم حفظ هذا المسار كمتغير.

عرض أذونات NTFS باستخدام “Get-Acl”

تسمح لك PowerShell بعرض أذونات NTFS بسرعة باستخدام cmdlet “Get-Acl”. في الأقسام التالية، ستتعلم كيفية استخدام هذا الأمر لعرض أذونات NTFS لملف أو مجلد.

قائمة تحكم في الوصول (ACL) هي قائمة من إدخالات تحكم في الوصول (ACE). يحدد كل ACE في ACL المستفيد ويحدد الحقوق المسموح بها أو المرفوضة أو المدققة. يمكن أن يحتوي الوصف الأمني لكائن قابل للتأمين على نوعين من ACLs: DACL و SACL.

عرض أذونات NTFS

تقليديًا ، يمكنك عرض ACL عن طريق النقر بزر الماوس الأيمن على المجلد C: \ Share ، والنقر فوق الخصائص ، وتحديد علامة التبويب الأمان ، والنقر فوق الزر المتقدمة . يمكنك رؤية مثال على كيفية عرض الواجهة الرسومية للأذونات أدناه.

Access Control List using Advanced Security Settings for Share

يحتوي المثال أعلاه على بعض إدخالات الأذونات والخصائص رقمية. فحصها عن كثب حيث سترى المقارنة في وقت لاحق في هذا القسم.

باستخدام الدليل الذي قمت بإنشائه سابقًا ، قم بعرض أذونات NTFS الحالية للدليل باستخدام Get-Acl.

Get-Acl -Path $dir

يجب أن ترى الآن تفاصيل المسار والمالك ومستوى الوصول في لقطة الشاشة التالية.

Access Control List

تحتوي خاصية Access الموضحة في لقطة الشاشة أعلاه على معلومات إضافية حول قائمة التحكم في الوصول، ولكنها تتجاوز حجم الشاشة كما هو موضح بنقاط الثلاث في نهاية FullControl أعلاه. هناك طريقة أفضل لعرض هذه الخاصية عن طريق وضع الأمر السابق بين قوسين لعرض خصائص كائن Access object properties. قم بتشغيل الكود التالي للبحث فقط عن خاصية 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

قم بفحص الخصائص ورقم العمود. لاحظ أن هذه هي نفس الخصائص التي رأيتها في واجهة المستخدم الرسومية في بداية البرنامج التعليمي.

Access Control List using Advanced Security Settings for Share

تصفية كائنات الوصول

في بعض الأحيان قد ترغب في أن تكون أكثر دقة عند اكتشاف أذونات NTFS. للقيام بذلك ، يمكنك تصفية ACE معين أو العثور على نتائج محددة تحتوي على أذونات NTFS الموروثة أو الصريحة داخل ACL باستخدام PowerShell. بدلاً من التمرير عبر نافذة الطرفية بعينيك سطرًا بسطر ، يمكنك استخدام cmdlet 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. يجعلك أمر Set-Acl قادرًا على ذلك. ستوضح الأقسام التالية كيفية استخدام هذا الأمر مع Get-Acl لنسخ وتعديل الإرث وإزالة أذونات NTFS من ملف أو مجلد.

نسخ أذونات NTFS

قد يكون لديك ملف أو مجلد يحتوي على مستوى مناسب من أذونات NTFS التي تحتاج إلى استخدامها لأذونة وصول جديدة. يمكنك توفير الوقت عن طريق نسخ الأذونات من ملف أو مجلد إلى آخر.

يمكن أن يقلل نسخ ACLs/ACEs الحالية من الأخطاء البشرية عند إعداد أذونات NTFS، فيما لو كان وصف الأمان الذي تقوم بنسخه مناسبًا وصحيحًا للوجهة في المقام الأول. كما يقال، “مع القوة الكبيرة تأتي المسؤولية الكبيرة.”. خذ ذلك في الاعتبار.

اعتبر اللقطة الشاشية التالية. هنا تلقي نظرة على قائمة التحكم في الوصول (ACL) لملف في المسار التالي: C:\Share ويسمى Client_List.txt. تحتوي قائمة التحكم في الوصول على مستوى الأذونات NTFS الصحيح الذي ترغب فيه:

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

الآن، اعتبر اللقطة الشاشية التالية. هذه المرة تلقي نظرة على قائمة التحكم في الوصول لملف آخر في المسار التالي: C:\Share ويسمى Client_Projects.txt. هذا الملف لا يحتوي على أذونات NTFS التي ترغب فيها:

Client Projects with no access for Bill.

تحتاج إلى نسخ أذونات NTFS من Client_List.txt إلى Client_Projects.txt. كيف يمكنك القيام بذلك؟ ستقوم بتعديل الأذونات عن طريق الحصول على قائمة التحكم في الوصول من Client_List.txt ثم استخدام cmdlet Set-Acl مع المعلمة -AclObject. عند تشغيل الشفرة أدناه، سيتم نسخ القائمة الكاملة للتحكم في الوصول من 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. الحصول على قائمة التحكم في الوصول الموجودة من ملف موجود.
  2. تعيين كائن القائمة المنسوخة للملف أو المجلد.
  3. التحقق من أن قائمة التحكم في الوصول تم نسخها بشكل صحيح إلى الملف أو المجلد.
NTFS Permissions Copied

ترى الآن أن قائمة التحكم في الوصول متطابقة لملف Client_Projects.txt كملف Client_List.txt في العمود IdentityReference مع AccessControlType المحدد إلى Allow. يمكنك استخدام نفس التقنية لتعيين أذونات NTFS للمجلدات أيضًا.

إضافة أذونات 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.Securit y.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

إدارة وتقرير Active Directory وExchange و Microsoft 365 باستخدام ManageEngine ADManager Plus. قم بتنزيل النسخة التجريبية المجانية!

ملخص

في هذه المقالة، تعرفت على كيفية إدارة أذونات NTFS باستخدام PowerShell. تعرفت على الأوامر المختصرة المستخدمة، Get-Acl و Set-Acl، وماذا يمكنهما فعله مع أذونات NTFS.

تعرفت أيضًا كيفية استخدام الفلاتر لاستهداف عنصر ACE محدد في ACL للاستخدام في الأوامر المذكورة أعلاه. مع التمرس القليل، ستتمكن بسهولة من إدارة طلبات أذونات NTFS أكثر مما كنت تفعل في السابق.

المزيد من القراءة

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