Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

เพื่อจัดการการเข้าถึงไฟล์หรือโฟลเดอร์ใน Windows ACL (Access Control List) 特別 จะถูกกำหนดให้กับวัตถุระบบไฟล์ NTFS (ไฟล์หรือโฟลเดอร์) ACL ของวัตถุนิยามการดำเนินการที่มีอยู่ (สิทธิ์) ที่ผู้ใช้หรือกลุ่มสามารถดำเนินการกับวัตถุระบบไฟล์ได้ ในส่วนใหญ่ ผู้ดูแลระบบ Windows ใช้ graphic interface ของ File Explorer (คุณสมบัติไฟล์/โฟลเดอร์ → แท็บ Security) หรือเครื่องมือคอนโซล icacls เพื่อจัดการสิทธิ์ NTFS บนไฟล์หรือโฟลเดอร์ ในบทความนี้ เราจะดูวิธาจัดการสิทธิ์บนวัตถุ NTFS โดยใช้ PowerShell cmdlets คุณสามารถใช้คำสั่งเหล่านี้ในสคริปต์ของคุณหรือทำให้การจัดการสิทธิ์การเข้าถึง NTFS บนไฟล์เซิร์ฟเวอร์และเวิร์กสเตชัน Windows เป็นอัตโนมัติ

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

Get-Acl & Set-Acl: PowerShell Cmdlets สำเร็จรูปสำหรับจัดการ NTFS ACLs

ใน PowerShell v5 (Windows 10/Windows Server 2016) มี built-in cmdlets สองตัวสำหรับจัดการ ACL (ส่วนหนึ่งของโมดูล Microsoft.PowerShell.Security):

  • Get-Acl — ช่วยให้ได้ ACL ปัจจุบันสำหรับวัตถุเฉพาะบนระบบไฟล์ NTFS;
  • Set-Acl – ใช้เพิ่ม/เปลี่ยน ACL ของวัตถุปัจจุบัน

เราจะไม่พิจารณา built-in cmdlets เหล่านี้อย่างละเอียด เนื่องจากคุณสมบัติของพวกเขาในกรณีส่วนใหญ่ไม่เพียงพอสำหรับจัดการสิทธิ์ NTFS ในงานจริง มาพิจารณากรณีใช้งานทั่วไปบ้าง

เพื่อรับเจ้าของปัจจุบันของโฟลเดอร์ (ไฟล์) และรายการสิทธิ์ NTFS ที่กำหนด ให้รันคำสั่ง:

get-acl C:\docs\ |fl

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

Path : Microsoft.PowerShell.Core\FileSystem::C:\docs\ Owner : CORP\asmith Group : CORP\Domain Users Access : PC-7L7JAK6\root Allow ReadAndExecute, Synchronize BUILTIN\Administrators Allow FullControl NT AUTHORITY\SYSTEM Allow FullControl BUILTIN\Users Allow ReadAndExecute, Synchronize NT AUTHORITY\Authenticated Users Allow Modify, Synchronize NT AUTHORITY\Authenticated Users Allow -536805376 Audit : Sddl : O:S-1-5-21-2950832418-2342342341-4040681116-234234G:DUD:AI(A;OICI;0x1200a9;;;S-1-5-21-2601781602-2342342341-6543210895-1001)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)

какคุณเห็น สิทธิ์ปัจจุบันยังแสดงเป็นสตริง SDDl — เราได้ดูรูปแบบคำอธิบายการเข้าถึงนี้สั้นๆ ในบทความ Setting Windows Service Permissions

คุณสามารถแสดงรายการสิทธิ์ NTFS เท่านั้นในรูปแบบที่ชัดเจนกว่า:

(get-acl C:\docs\).access

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

คุณสามารถคัดลอกสิทธิ์ NTFS ปัจจุบันจากโฟลเดอร์ NTFS หนึ่ง (วัตถุ) และนำไปใช้กับอีกตัวหนึ่ง:

Get-Acl e:\old_docs | Set-Acl C:\docs

เพื่อทำเช่นนี้ บัญชีต้องเป็นเจ้าของวัตถุและมีสิทธิ์ Take Ownership

ปัญหาหลักของการใช้ Set-ACL คือ cmdlet จะพยายามเปลี่ยนเจ้าของทรัพยากรเสมอ แม้คุณจะเพียงต้องการเปลี่ยนสิทธิ์ NTFS เท่านั้น ดังนั้นเพื่อเพิ่มสิทธิ์บนวัตถุ คุณต้องใช้สคริปต์ที่ซับซ้อนดังนี้:

$path = "c:\docs "
$user = "corp\DSullivan"
$Permiss = "Read, ReadAndExecute, ListDirectory"
$InheritSettings = "Containerinherit, ObjectInherit"
$PropogationSettings = "None"
$RuleType = "Allow"
$acl = Get-Acl $path
$perm = $user, $Permiss, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path

เพื่อลบสิทธิ์ NTFS ในการเข้าถึงโฟลเดอร์สำหรับผู้ใช้หรือกลุ่ม:
$path = "c:\docs"
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq "corp\DSullivan"
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path

เพื่อปิดใช้งานการสืบทอดของโฟลเดอร์จาก PowerShell:

$path = 'C:\docs
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # $True แรกแสดงว่าโฟลเดอร์ได้รับการป้องกัน $True ที่สองระบุว่าต้องคัดลอกสิทธิ์ NTFS ปัจจุบันหรือไม่
Set-Acl -Path $path -AclObject $acl

นอกจากนี้ การใช้ Get-Acl และ Set-Acl คุณสามารถจัดการการตั้งค่า NTFS audit สำหรับวัตถุ (ดูบทความ Tracking down who removed files from shared folder) หรือเกี่ยวกับสิทธิ์ OU Delegated ปัจจุบันใน AD

การจัดการสิทธิ์ไฟล์ด้วยโมดูล PowerShell NTFSSecurity

เช่นที่ผมบอกแล้ว built-in PowerShell cmdlets สำหรับจัดการวัตถุระบบไฟล์ไม่สะดวก במיוחד เพื่อจัดการสิทธิ์ NTFS บนไฟล์และโฟลเดอร์ใน Windows คุณควรใช้โมดูลแยกต่างหากจาก PowerShell gallery – NTFSSecurity คุณสามารถติดตั้งเวอร์ชันล่าสุดของโมดูล NTFSSecurity (4.2.6 ปัจจุบัน) โดยใช้คำสั่ง Install-Module -Name NTFSSecurity หรือดาวน์โหลดด้วยตนเอง (ลิงก์) เมื่อติดตั้งด้วยตนเอง คุณเพียงแค่ต้องแยกไฟล์โมดูลไปที่ C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity (อย่าลืม unblock ไฟล์ที่ดาวน์โหลด)

นำเข้าโมดูล NTFSSecurity เข้าสู่เซสชัน PowerShell ของคุณ:

Import-Module NTFSSecurity

แสดงรายการคำสั่งที่มีอยู่ในโมดูล (36 cmdlets):

Get-Command -Module NTFSSecurity

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

แสดงรายการสิทธิ์ NTFS ปัจจุบันของโฟลเดอร์:
Get-Item 'c:\docs' | Get-NTFSAccess

如你所見 สิทธิ์ปัจจุบันแสดงในรูปแบบที่สะดวกกว่า

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

เพื่อให้สิทธิ์ควบคุมเต็มรูปแบบแก่ผู้ใช้หรือกลุ่มบนโฟลเดอร์เฉพาะ ให้รันคำสั่งนี้:
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru

Tip โดยค่าเริ่มต้น NTFSSecurity cmdlets ไม่ส่งคืนข้อมูลใดๆ ใช้พารามิเตอร์ -PassThru เพื่อให้คำสั่งแสดง ACLs ใหม่หลังจากดำเนินการ

เพื่อให้สิทธิ์เฉพาะระดับโฟลเดอร์บนสุดและไม่เปลี่ยนสิทธิ์บนวัตถุซ้อน (โฟลเดอร์อย่างเดียว) ให้ใช้คำสั่งนี้:

Add-NTFSAccess c:\docs\public -Account corp\LMurkowski -AccessRights Modify -AppliesTo ThisFolderOnly

เพื่อลบสิทธิ์ NTFS ที่กำหนด:

Remove-NTFSAccess -Path C:\DOCS -Account 'corp\LMurkowski' -AccessRights FullControl -PassThru

คำสั่งถัดไปจะลบสิทธิ์สำหรับวัตถุซ้อนทั้งหมดในโฟลเดอร์สำหรับบัญชีที่กำหนด (สิทธิ์ที่สืบทอดจะถูกข้าม):

Get-ChildItem -Path C:\docs -Recurse | Get-NTFSAccess -Account 'corp\LMurkowski' -ExcludeInherited |Remove-NTFSAccess -PassThru

ด้วยคำสั่งต่อไปนี้ คุณสามารถทำให้บัญชี Administrator เป็นเจ้าของวัตถุซ้อนทั้งหมดในโฟลเดอร์:

Get-ChildItem -Path C:\docs -Recurse -Force | Set-NTFSOwner -Account 'Administrator'

เพื่อล้างสิทธิ์ทั้งหมดที่กำหนดให้กับวัตถุโฟลเดอร์ด้วยตนเอง (สิทธิ์ที่สืบทอดจะไม่ถูกลบ):

Get-ChildItem -Path C:\docs -Recurse -Force | Clear-NTFSAccess

เพื่อเปิดใช้งานการสืบทอด NTFS สำหรับวัตถุทั้งหมดในโฟลเดอร์:

Get-ChildItem -Path C:\docs -Recurse -Force | Enable-NTFSAccessInheritance

เพื่อแสดงสิทธิ์ที่กำหนดด้วยตนเองทั้งหมดยกเว้นสิทธิ์ที่สืบทอด:

dir C:\docs | Get-NTFSAccess –ExcludeInherited

คุณสามารถแสดงสิทธิ์ที่กำหนดให้กับบัญชีเฉพาะได้ (อย่าสับสนกับ effective permissions เราจะพูดถึงภายหลัง):

dir C:\docs | Get-NTFSAccess -Account woshub\RShelby

วิธีดู NTFS Effective Permissions ด้วย PowerShell

คุณสามารถดู effective NTFS permissions สำหรับไฟล์หรือโฟลเดอร์เฉพาะโดยใช้ cmdlet Get-EffectiveAccess สมมติว่าคุณได้ให้สิทธิ์เข้าถึงโฟลเดอร์เฉพาะแก่กลุ่มความปลอดภัย AD หลายกลุ่ม และคุณต้องการทราบว่าบัญชีผู้ใช้เฉพาะ (หรือ SID) สามารถเข้าถึงโฟลเดอร์ไฟล์ได้หรือไม่ คุณจะทำอย่างไรโดยไม่ต้องแสดงรายการสมาชิกทั้งหมดของกลุ่ม AD ที่บัญชีผู้ใช้เป็นสมาชิก? นี่คือกรณีที่การดู effective NTFS permissions มีประโยชน์มาก ตัวอย่างเช่น คุณต้องการดู effective permissions บนไดเรกทอรีซ้อนทั้งหมดในโฟลเดอร์สำหรับบัญชีโดเมน confroom

Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullName

หรือคุณสามารถดู effective permissions สำหรับไฟล์เฉพาะ:

Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-List

วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell

สิทธิ์ผู้ใช้ effective ปัจจุบันบนวัตถุระบบไฟล์ระบุอยู่ในฟิลด์ AccessRights