วิธีจัดการสิทธิ์ NTFS ด้วย PowerShell
เพื่อจัดการการเข้าถึงไฟล์หรือโฟลเดอร์ใน Windows ACL พิเศษ (รายการควบคุมการเข้าถึง) ถูกกำหนดให้กับวัตถุระบบไฟล์ NTFS (ไฟล์หรือโฟลเดอร์) ACL ของอ็อบเจ็กต์กำหนดการดำเนินการที่มีอยู่ (สิทธิ์) ที่ผู้ใช้หรือกลุ่มสามารถดำเนินการกับอ็อบเจ็กต์ระบบไฟล์ ในกรณีส่วนใหญ่ ผู้ดูแลระบบ Windows ใช้อินเทอร์เฟซกราฟิก File Explorer (คุณสมบัติไฟล์/โฟลเดอร์ -> แท็บความปลอดภัย) หรือเครื่องมือคอนโซล icacls เพื่อจัดการสิทธิ์ NTFS ในไฟล์หรือโฟลเดอร์ ในบทความนี้ เราจะดูวิธีจัดการสิทธิ์บนวัตถุ NTFS โดยใช้ PowerShell cmdlets คุณสามารถใช้คำสั่งเหล่านี้ในสคริปต์ของคุณหรือเพื่อทำให้การจัดการสิทธิ์การเข้าถึง NTFS เป็นไปโดยอัตโนมัติบนเซิร์ฟเวอร์ไฟล์และเวิร์กสเตชันของ Windows
Get-Acl & Set-Acl: PowerShell Cmdlets ในตัวเพื่อจัดการ NTFS ACL
ใน PowerShell v5 (Windows 10/Windows Server 2016) มี cmdlet ในตัวสองตัวที่แยกกันเพื่อจัดการ ACL (ส่วนหนึ่งของโมดูล Microsoft.PowerShell.Security):
Get-Acl — อนุญาตให้รับ ACL ปัจจุบันสำหรับวัตถุเฉพาะในระบบไฟล์ NTFS
Set-Acl - ใช้เพื่อเพิ่ม/เปลี่ยน ACL ของวัตถุปัจจุบัน
เราจะไม่พิจารณารายละเอียดเกี่ยวกับ cmdlet ในตัวเหล่านี้ เนื่องจากในกรณีส่วนใหญ่คุณสมบัติไม่เพียงพอที่จะจัดการสิทธิ์ NTFS ในงานจริง มาดูกรณีการใช้งานทั่วไปกันบ้าง
หากต้องการรับเจ้าของโฟลเดอร์ (ไฟล์) ปัจจุบันและรายการสิทธิ์ NTFS ที่กำหนด ให้รันคำสั่ง:
get-acl C:\docs\ |flPath : 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 ด้วย — เราได้ดูรูปแบบคำอธิบายการเข้าถึงนี้โดยสังเขปในบทความ การตั้งค่าการอนุญาตบริการ Windows
คุณสามารถแสดงรายการสิทธิ์ NTFS ในรูปแบบที่ชัดเจนขึ้นเท่านั้น:
(get-acl C:\docs\).accessคุณสามารถคัดลอกสิทธิ์ NTFS ปัจจุบันจากโฟลเดอร์ NTFS (วัตถุ) และนำไปใช้กับอีกโฟลเดอร์หนึ่งได้:
Get-Acl e:\old_docs | Set-Acl C:\docsในการดำเนินการดังกล่าว บัญชีต้องเป็นเจ้าของวัตถุและมีสิทธิ์รับความเป็นเจ้าของ
ปัญหาหลักของการใช้ 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) # the first $True shows if the folder is protected, the second $True specifies if the current NTFS permissions have to be copied
Set-Acl -Path $path -AclObject $aclนอกจากนี้ เมื่อใช้ Get-Acl และ Set-Acl คุณสามารถจัดการการตั้งค่าการตรวจสอบ NTFS สำหรับออบเจกต์ (ดูบทความการติดตามว่าใครลบไฟล์ออกจากโฟลเดอร์ที่ใช้ร่วมกัน) หรือเกี่ยวกับสิทธิ์ OU ที่ได้รับมอบหมายในปัจจุบันใน AD
การจัดการสิทธิ์ของไฟล์ด้วยโมดูล NTFSSecurity PowerShell
อย่างที่ฉันได้กล่าวไปแล้ว PowerShell cmdlets ในตัวเพื่อจัดการวัตถุระบบไฟล์นั้นไม่สะดวกนัก ในการจัดการสิทธิ์ NTFS สำหรับไฟล์และโฟลเดอร์ใน Windows คุณควรใช้โมดูลแยกต่างหากจากแกลเลอรี PowerShell - NTFSSecurity คุณสามารถติดตั้งโมดูล NTFSSecurity เวอร์ชันล่าสุด (4.2.6 ในปัจจุบัน) โดยใช้
Install-Module -Name NTFSSecurityสั่งหรือดาวน์โหลดด้วยตนเอง (ลิงค์) เมื่อทำการติดตั้งด้วยตนเอง คุณเพียงแค่แตกไฟล์เก็บถาวรของโมดูลไปที่
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity (อย่าลืมปลดบล็อกไฟล์ที่ดาวน์โหลดมา)
นำเข้าโมดูล NTFSSecurity ไปยังเซสชัน PowerShell ของคุณ:
Import-Module NTFSSecurityแสดงรายการคำสั่งที่มีอยู่ในโมดูล (36 cmdlets):
Get-Command -Module NTFSSecurityรายการสิทธิ์ NTFS ปัจจุบันของโฟลเดอร์:
Get-Item 'c:\docs' | Get-NTFSAccessอย่างที่คุณเห็น การอนุญาตปัจจุบันจะแสดงในรูปแบบที่สะดวกกว่า
ในการให้สิทธิ์การควบคุมทั้งหมดแก่ผู้ใช้หรือกลุ่มในโฟลเดอร์เฉพาะ ให้รันคำสั่งนี้:
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThruเคล็ดลับ ตามค่าเริ่มต้น cmdlet ของ NTFSSecurity จะไม่ส่งคืนข้อมูลใดๆ ใช้พารามิเตอร์ -PassThru เพื่อทำให้คำสั่งแสดง ACL ใหม่หลังจากดำเนินการ
ในการให้สิทธิ์เฉพาะที่ระดับโฟลเดอร์บนสุด และไม่เปลี่ยนสิทธิ์บนอ็อบเจ็กต์ที่ซ้อนกัน (เฉพาะโฟลเดอร์) ให้ใช้คำสั่งนี้:
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ด้วยคำสั่งต่อไปนี้ คุณสามารถทำให้บัญชีผู้ดูแลระบบเป็นเจ้าของออบเจกต์ที่ซ้อนกันทั้งหมดในโฟลเดอร์:
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คุณสามารถแสดงการอนุญาตที่กำหนดให้กับบัญชีใดบัญชีหนึ่ง (อย่าสับสนกับการอนุญาตที่มีผลบังคับใช้ เราจะหารือในภายหลัง):
dir C:\docs | Get-NTFSAccess -Account a-d\RShelbyวิธีดูการอนุญาตที่มีประสิทธิภาพของ NTFS ด้วย PowerShell
คุณสามารถดูสิทธิ์ NTFS ที่มีผลสำหรับไฟล์หรือโฟลเดอร์ที่ระบุโดยใช้
Get-EffectiveAccessซม. สมมติว่า คุณได้ให้สิทธิ์การเข้าถึงโฟลเดอร์บางโฟลเดอร์แก่กลุ่มความปลอดภัย AD หลายกลุ่ม และคุณต้องการทราบว่าบัญชีผู้ใช้เฉพาะ (หรือ SID) สามารถเข้าถึงโฟลเดอร์ไฟล์ได้หรือไม่ คุณจะทำอย่างไรโดยไม่แสดงรายการสมาชิกทั้งหมดของกลุ่มโฆษณาที่เป็นของบัญชีผู้ใช้ นี่เป็นกรณีที่การดูสิทธิ์ NTFS ที่มีประสิทธิภาพนั้นมีประโยชน์มาก ตัวอย่างเช่น คุณต้องดูสิทธิ์ที่มีผลบังคับใช้ในไดเร็กทอรีที่ซ้อนกันทั้งหมดในโฟลเดอร์สำหรับบัญชีโดเมน confroom
Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullNameหรือคุณสามารถดูสิทธิ์ที่มีผลบังคับใช้สำหรับไฟล์บางไฟล์:
Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-Listสิทธิ์ผู้ใช้ที่มีผลบังคับใช้ในปัจจุบันบนอ็อบเจ็กต์ระบบไฟล์ระบุไว้ในฟิลด์ AccessRights





