Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

Để 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.

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

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

Làm thế nào để 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 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

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

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

Để làm điều đó, 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à 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

Ngoài ra, bằng cách sử dụng Get-Acl và Set-Acl, bạn có thể quản lý cài đặt kiểm tra NTFS cho các đối tượng (xem bài viết Theo dõi ai đã xóa tệp khỏi thư mục chia sẻ) hoặc về các quyền hiện tại được OU ủy quyền trong AD.

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

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

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.

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

Để 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

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

Để 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

Làm thế nào để Quản lý Quyền NTFS với PowerShell?

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.