Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách Quản Lý Quyền NTFS với PowerShell?

Để quản lý quyền truy cập vào file hoặc thư mục trong Windows, một ACL (Access Control List) đặc biệt được gán cho đối tượng hệ thống file NTFS (một file hoặc thư mục). ACL của đối tượng xác định các thao tác có sẵn (quyền) mà người dùng hoặc nhóm có thể thực hiện với đối tượng hệ thống file. 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 file/thư mục → tab Security) hoặc công cụ console icacls để quản lý quyền NTFS trên file hoặc thư mục. Trong bài viết này, chúng ta sẽ xem cách quản lý quyền trên các đối tượng NTFS bằng các cmdlet PowerShell. Bạn có thể sử dụng các lệnh này trong script của mình hoặc để tự động hóa việc quản lý quyền truy cập NTFS trên file server và trạm làm việc Windows.

Cách Quản Lý Quyền NTFS với PowerShell?

Get-Acl & Set-Acl: Cmdlet PowerShell Tích Hợp để Quản Lý NTFS ACL

Trong PowerShell v5 (Windows 10/Windows Server 2016), có hai cmdlet tích hợp riêng biệt để quản lý ACL (một phần của mô-đun Microsoft.PowerShell.Security):

  • Get-Acl — cho phép lấy ACL hiện tại cho đối tượng cụ thể trên hệ thống file NTFS;
  • Set-Acl – được dùng để thêm/thay đổi ACL đối tượng hiện tại.

Chúng ta sẽ không xem xét chi tiết các cmdlet tích hợp này, vì 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 dừng lại ở một số trường hợp sử dụng điển hình.

Để lấy chủ sở hữu hiện tại của thư mục (file) và danh sách quyền NTFS được gán, hãy chạy lệnh:

get-acl C:\docs\ |fl

Cách Quản Lý Quyền NTFS với 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)

Như bạn thấy, quyền hiện tại cũng được hiển thị dưới dạng chuỗi SDDl — chúng ta đã nhìn sơ qua định dạng mô tả truy cập này trong bài viết Thiết Lập Quyền Dịch Vụ Windows.

Bạn có thể hiển thị danh sách quyền NTFS chỉ ở định dạng rõ ràng hơn:

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

Cách Quản Lý Quyền NTFS với PowerShell?

Bạn có thể sao chép quyền NTFS hiện tại từ một thư mục NTFS (đối tượng) và áp dụng chúng cho một thư mục khác:

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

Để làm được điều này, tài khoản phải là chủ sở hữu của đối tượng và có đặc quyền Take Ownership.

Vấn đề chính của việc sử dụng Set-ACL là cmdlet 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 quyền trên một đối tượng, bạn phải sử dụng script 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 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

Để vô hiệu hóa kế thừa thư mục từ PowerShell:

$path = 'C:\docs
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # $True đầu tiên cho thấy thư mục có được bảo vệ không, $True thứ hai chỉ định nếu quyền NTFS hiện tại phải được sao chép
Set-Acl -Path $path -AclObject $acl

Cũng, sử dụng Get-Acl và Set-Acl bạn có thể quản lý cài đặt kiểm toán NTFS cho các đối tượng (xem bài viết Theo dõi ai xóa file từ thư mục chia sẻ) hoặc về quyền OU Delegated hiện tại trong AD.

Quản Lý Quyền File với Mô-đun PowerShell NTFSSecurity

Như tôi đã nói, các cmdlet PowerShell tích hợp để quản lý đối tượng hệ thống file không quá tiện lợi. Để quản lý quyền NTFS trên file và thư mục trong Windows, bạn nên sử dụng một mô-đun riêng từ PowerShell gallery – NTFSSecurity. Bạn có thể cài đặt phiên bản mới nhất của mô-đun NTFSSecurity (4.2.6, hiện tại) bằng lệnh Install-Module -Name NTFSSecurity hoặc tải xuống thủ công (liên kết). Khi cài đặt thủ công, bạn chỉ cần giải nén lưu trữ mô-đun vào C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity (đừng quên unblock file đã 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 cmdlet):

Get-Command -Module NTFSSecurity

Cách Quản Lý Quyền NTFS với PowerShell?

Liệt kê quyền NTFS hiện tại của thư mục:
Get-Item 'c:\docs' | Get-NTFSAccess

Như bạn thấy, quyền hiện tại được hiển thị ở dạng thuận tiện hơn.

Cách Quản Lý Quyền NTFS với PowerShell?

Để cấp quyền điều khiển đầy đủ cho người dùng hoặc nhóm trên một thư mục cụ thể, hãy chạy lệnh này:
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru

Mẹo. Theo mặc định, các cmdlet NTFSSecurity không trả về bất kỳ dữ liệu nào. Sử dụng tham số -PassThru để làm cho lệnh hiển thị ACL mới sau khi nó được thực thi.

Để cấp quyền chỉ ở cấp thư mục gốc và không thay đổi quyền trên các đối tượng lồng nhau (chỉ thư mục), sử dụng lệnh này:

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

Để xóa quyền NTFS đã gán:

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

Lệnh tiếp theo sẽ xóa quyền cho tất cả các đối tượng lồng nhau trong thư mục cho tài khoản đã cho (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ể làm cho tài khoản Administrator trở thành 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ả quyền được gán cho đối tượng thư mục thủ công (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 gán thủ công trừ các quyền kế thừa:

dir C:\docs | Get-NTFSAccess –ExcludeInherited

Bạn có thể hiển thị quyền được gán cho tài khoản cụ thể (đừng nhầm lẫn với quyền hiệu lực, chúng ta sẽ thảo luận sau):

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

Cách Xem Quyền NTFS Hiệu Lực với PowerShell?

Bạn có thể xem quyền NTFS hiệu lực cho một file hoặc thư mục cụ thể bằng cmdlet Get-EffectiveAccess. Giả sử bạn đã cấp quyền truy cập vào thư mục nhất định cho một vài nhóm bảo mật AD và bạn muốn biết xem tài khoản người dùng cụ thể (hoặc SID) có thể truy cập thư mục file hay không. Làm thế nào để làm điều đó mà không cần liệt kê tất cả các thành viên của các nhóm AD mà tài khoản người dùng thuộc về? Đây là trường hợp xem quyền NTFS hiệu lực rất hữu ích. Ví dụ: bạn cần xem quyền hiệu lực trên tất cả thư mục con 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 quyền hiệu lực cho một file cụ thể:

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

Cách Quản Lý Quyền NTFS với PowerShell?

Quyền hiệu lực hiện tại của người dùng trên đối tượng hệ thống file được chỉ định trong trường AccessRights.