Để quản lý quyền truy cập vào tệp hoặc thư mục trong Windows, một ACL đặc biệt (Danh sách điều khiển truy cập) được gán cho đối tượng hệ thống tệp NTFS (tệp hoặc thư mục). ACL của đối tượng xác định các hoạt động có sẵn (quyền) mà người dùng hoặc các nhóm có thể thực hiện với đối tượng hệ thống tệp. Trong hầu hết các trường hợp, quản trị viên Windows sử dụng giao diện đồ họa File Explorer (thuộc tính tệp / thư mục -> tab Bảo mật) hoặc công cụ bảng điều khiển icacls để quản lý quyền NTFS trên tệp hoặc thư mục. Trong bài viết này, chúng ta sẽ xem xét cách quản lý quyền trên các đối tượng NTFS bằng cách sử dụng lệnh ghép ngắn PowerShell. Bạn có thể sử dụng các lệnh này trong tập lệnh của mình hoặc để tự động hóa việc quản lý các quyền truy cập NTFS trên máy chủ tệp Windows và máy trạm.
Get-Acl &Set-Acl:PowerShell Cmdlets tích hợp để quản lý ACL NTFS
Trong PowerShell v5 (Windows 10 / Windows Server 2016), có hai lệnh ghép ngắn tích hợp riêng biệt để quản lý ACL (một phần của Microsoft.PowerShell.Security mô-đun):
- Get-Acl - cho phép lấy ACL hiện tại cho đối tượng cụ thể trên hệ thống tệp NTFS;
- Set-Acl - được sử dụng để thêm / thay đổi ACL đối tượng hiện tại.
Chúng tôi sẽ không xem xét chi tiết các lệnh ghép ngắn tích hợp này, vì các tính năng của chúng trong hầu hết các trường hợp không đủ để quản lý quyền NTFS trong các tác vụ thực tế. Hãy xem xét một số trường hợp sử dụng điển hình.
Để nhận chủ sở hữu hiện tại của một thư mục (tệp) và danh sách các quyền NTFS được chỉ định, hãy chạy lệnh:
get-acl C:\docs\ |fl
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)Như bạn có thể thấy, các quyền hiện tại cũng được hiển thị dưới dạng SDDl string - chúng tôi đã xem xét ngắn gọn định dạng mô tả quyền truy cập này trong bài viết Đặt quyền dịch vụ của Windows.
Bạn chỉ có thể hiển thị danh sách các quyền NTFS ở định dạng rõ ràng hơn:
(get-acl C:\docs\).access
Bạn có thể sao chép các quyền NTFS hiện tại từ một thư mục (đối tượng) NTFS và áp dụng chúng cho một thư mục khác:
Get-Acl e:\old_docs | Set-Acl C:\docs
Vấn đề chính của việc sử dụng Set-ACL là lệnh ghép ngắn luôn cố gắng thay đổi chủ sở hữu tài nguyên, ngay cả khi bạn chỉ cần thay đổi quyền NTFS. Vì vậy, để thêm các quyền trên một đối tượng, bạn phải sử dụng tập lệnh phức tạp sau:
$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
Để xóa quyền NTFS để truy cập thư mục cho người dùng hoặc một nhóm:
$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
Để tắt tính năng kế thừa thư mục từ 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
Quản lý Quyền đối với Tệp bằng Mô-đun NTFSSecurity PowerShell
Như tôi đã nói, các lệnh ghép ngắn PowerShell tích hợp để quản lý đối tượng hệ thống tệp không thuận tiện lắm. Để quản lý quyền NTFS trên các tệp và thư mục trong Windows, tốt hơn bạn nên sử dụng một mô-đun riêng biệt từ thư viện PowerShell - NTFSSecurity . Bạn có thể cài đặt phiên bản mới nhất của mô-đun NTFSSecurity (hiện tại là 4.2.6) bằng cách sử dụng Install-Module -Name NTFSSecurity
lệnh hoặc tải xuống theo cách thủ công (liên kết). Khi cài đặt nó theo cách thủ công, bạn chỉ cần giải nén kho lưu trữ mô-đun sang C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity
(đừng quên bỏ chặn tệp đã tải xuống).
Nhập mô-đun NTFSSecurity vào phiên PowerShell của bạn:
Import-Module NTFSSecurity
Hiển thị danh sách các lệnh có sẵn trong mô-đun (36 lệnh ghép ngắn):
Get-Command -Module NTFSSecurity
Liệt kê các quyền NTFS hiện tại của thư mục:
Get-Item 'c:\docs' | Get-NTFSAccess
Như bạn có thể thấy, các quyền hiện tại được hiển thị ở dạng thuận tiện hơn.
Để cấp cho người dùng hoặc một nhóm quyền toàn quyền kiểm soát trên một thư mục cụ thể, hãy chạy lệnh sau:
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru
Để chỉ cấp quyền ở cấp thư mục cao nhất và không thay đổi quyền đối với các đối tượng lồng nhau (chỉ thư mục), hãy sử dụng lệnh sau:
Add-NTFSAccess c:\docs\public -Account corp\LMurkowski -AccessRights Modify -AppliesTo ThisFolderOnly
Để xóa các quyền NTFS được chỉ định:
Remove-NTFSAccess -Path C:\DOCS -Account 'corp\LMurkowski' -AccessRights FullControl -PassThru
Lệnh tiếp theo sẽ xóa các quyền cho tất cả các đối tượng lồng nhau trong thư mục cho tài khoản đã cho (các quyền kế thừa sẽ bị bỏ qua):
Get-ChildItem -Path C:\docs -Recurse | Get-NTFSAccess -Account 'corp\LMurkowski' -ExcludeInherited |Remove-NTFSAccess -PassThru
Với lệnh sau, bạn có thể đặt tài khoản Quản trị viên làm chủ sở hữu của tất cả các đối tượng lồng nhau trong thư mục:
Get-ChildItem -Path C:\docs -Recurse -Force | Set-NTFSOwner -Account 'Administrator'
Để xóa tất cả các quyền được gán cho các đối tượng thư mục theo cách thủ công (các quyền kế thừa sẽ không bị xóa):
Get-ChildItem -Path C:\docs -Recurse -Force | Clear-NTFSAccess
Để bật kế thừa NTFS cho tất cả các đối tượng trong một thư mục:
Get-ChildItem -Path C:\docs -Recurse -Force | Enable-NTFSAccessInheritance
Để hiển thị tất cả các quyền được chỉ định theo cách thủ công ngoại trừ các quyền được kế thừa:
dir C:\docs | Get-NTFSAccess –ExcludeInherited
Bạn có thể hiển thị các quyền được chỉ định cho tài khoản cụ thể (đừng nhầm lẫn nó với các quyền hiệu quả, chúng ta sẽ thảo luận về chúng sau):
dir C:\docs | Get-NTFSAccess -Account woshub\RShelby
Làm thế nào để Xem Quyền Hiệu quả NTFS với PowerShell?
Bạn có thể xem các quyền NTFS hiệu quả cho một tệp hoặc một thư mục cụ thể bằng cách sử dụng Get-EffectiveAccess
cmdlet. Giả sử, bạn đã cấp quyền truy cập vào thư mục nhất định cho một số nhóm bảo mật AD và bạn muốn biết liệu tài khoản người dùng cụ thể (hoặc SID) có thể truy cập vào thư mục tệp hay không. Làm thế nào bạn có thể làm điều đó mà không liệt kê tất cả các thành viên của nhóm QUẢNG CÁO mà tài khoản người dùng thuộc về? Đây là trường hợp khi xem các quyền NTFS hiệu quả rất hữu ích. Ví dụ:bạn cần xem các quyền có hiệu lực trên tất cả các thư mục lồng nhau trong một thư mục cho tài khoản miền confroom .
Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullName
Hoặc bạn có thể xem các quyền có hiệu lực cho một tệp nhất định:
Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-List
Quyền của người dùng hiệu quả hiện tại trên đối tượng hệ thống tệp được chỉ định trong AccessRights trường.