Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

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

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

Get-Acl &Set-Acl:PowerShell Cmdlets ในตัวเพื่อจัดการ NTFS ACL

ใน PowerShell v5 (Windows 10/Windows Server 2016) มี cmdlet ในตัวสองตัวที่แยกจากกันเพื่อจัดการ ACL (ส่วนหนึ่งของ Microsoft.PowerShell.Security โมดูล):

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

เราจะไม่พิจารณารายละเอียด cmdlet ในตัวเหล่านี้ เนื่องจากโดยส่วนใหญ่จะมีคุณสมบัติไม่เพียงพอสำหรับจัดการสิทธิ์ 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 string — เราดูสั้น ๆ ที่รูปแบบคำอธิบายการเข้าถึงนี้ในบทความการตั้งค่าการอนุญาตบริการของ Windows

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

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

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

คุณสามารถคัดลอกสิทธิ์ 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 ด้วย PowerShell

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

อย่างที่คุณเห็น การอนุญาตปัจจุบันจะแสดงในรูปแบบที่สะดวกยิ่งขึ้น

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

หากต้องการให้สิทธิ์การควบคุมแบบเต็มแก่ผู้ใช้หรือกลุ่มในโฟลเดอร์เฉพาะ ให้เรียกใช้คำสั่งนี้:
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 woshub\RShelby

จะดูการอนุญาตที่มีผลกับ NTFS ด้วย PowerShell ได้อย่างไร

คุณสามารถดูการอนุญาต NTFS ที่มีประสิทธิภาพ สำหรับไฟล์หรือโฟลเดอร์เฉพาะโดยใช้ Get-EffectiveAccess cmdlet สมมติว่าคุณให้สิทธิ์เข้าถึงบางโฟลเดอร์ไปยังกลุ่มความปลอดภัย 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

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

สิทธิ์ผู้ใช้ที่มีผลในปัจจุบันบนวัตถุระบบไฟล์ระบุไว้ใน AccessRights สนาม