Správa povolení NTFS na priečinky a súbory z prostredia PowerShell

Na riadenie prístupu k súborom a priečinkom v systéme Windows je každému objektu súborového systému (adresár alebo súbor) NTFS priradený špeciálny zoznam ACL (Access Control List, Access Control List). Objekt ACL definuje dostupné operácie (oprávnenia), ktoré môže užívateľ alebo skupiny s týmto objektom vykonávať. Vo väčšine prípadov správcovia okien používajú GUI Prieskumníka súborov (vlastnosti priečinka / súboru -> karta Zabezpečenie) alebo pomocný program konzoly icacls na správu povolení súborov a priečinkov NFTS. V tomto článku sa pozrieme na spôsoby spravovania povolení pre objekty systému súborov NTFS z prostredia PowerShell. Tieto príkazy môžete použiť v skriptoch a automatizovať správu povolení NTFS na súborových serveroch Windows.

obsah:

  • Vstavané rutiny cmdlet pre správu ACL v NTFS: Get-Acl a Set-Acl
  • Na správu povolení z prostredia PowerShell používame modul NTFSSecurity
  • Kontrola efektívnych povolení NTFS na objekty z PowerShell

Vstavané rutiny cmdlet pre správu ACL v NTFS: Get-Acl a Set-Acl

V PowerShell v5 (Windows 10 / Windows Server 2016) existujú dve samostatné vstavané rutiny cmdlet pre správu ACL (zahrnuté v module Microsoft.PowerShell.Security):

  • Get-ACL - umožňuje získať aktuálny zoznam prístupových práv pre konkrétny objekt v systéme súborov NTFS;
  • Set-ACL - Používa sa na pridanie / úpravu aktuálnych ACL aktuálnych objektov.

Nebudeme sa podrobne zaoberať týmito vstavanými cmdletmi, as ich funkčnosť vo väčšine prípadov nepostačuje na správu povolení NTFS v skutočných úlohách. Zoberme si iba niekoľko typických príkladov ich použitia..

Zoznam aktuálneho vlastníka priečinka (súboru) a zoznam oprávnení priradených NTFS:

get-acl C: \ Drivers \ | fl

Cesta: Microsoft.PowerShell.Core \ FileSystem :: C: \ Drivers \
Vlastník: WORKSTAT1 \ root
Skupina: WORKSTAT1 \ Chýba
Prístup: NT AUTHORITY \ Overení používatelia umožňujú úpravy, synchronizáciu
NT AUTHORITY \ SYSTEM Povoliť FullControl
BUILTIN \ Administrators Povoliť FullControl
BUILTIN \ Users umožňujú čítanie a vykonávanie exekúcií, synchronizáciu
WORKSTAT1 \ root Povoliť úpravy, synchronizovať
audit:
Sddl: O: S-1-5-21-3650440056-3766451173-3310994491-1001G: S-1-5-21-3650440056-766451173-3310994491-513D: PAI (A; OICI; 0x 1301bf ;;; AU) (AU) (); A; OICI; FA ;;; SY) (A; OICI; FA;;; BA) (A; OICI; 0x1200a9 ;;; BU) (A; OICI; 0x1301bf ;;;; S-1-5-21-3650440056 -37664 51173-3310994491-1001)

Ako vidíte, súčasné povolenia sa tiež predstavujú ako reťazce SDDL - tento formát popisu prístupu sme stručne preskúmali v článku Správa práv pre služby Windows Services.

Povolenia NTFS môžete uviesť iba v zrozumiteľnejšom formáte:

(get-acl C: \ Drivers \)

Pomocou nasledujúceho príkazu môžete skopírovať povolenia NTFS z jedného priečinka a použiť ich do iného priečinka:

Get-Acl C: \ Ovládače | Set-Acl C: \ Distr

Na vykonanie tejto operácie musí byť účet vlastníkom zdroja (vlastník) a musí mať vlastnícke práva.

Hlavným problémom pri používaní Set-ACL je to, že cmdlet sa vždy pokúša zmeniť vlastníka prostriedku, aj keď chcete zmeniť povolenia NTFS. V dôsledku toho musíte na pridanie práv k objektu použiť nasledujúcu konštrukciu:

$ path = "c: \ drivers"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Read, ReadAndExecute, ListDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "None"
$ RuleType = "Povoliť"
$ acl = Get-Acl $ cesta
$ perm = $ user, $ Rights, $ InheritSettings, $ PropogationSettings, $ RuleType
$ Rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule (pravidlo $)
$ acl | Cesta Set-Acl-Cesta $

Ak chcete používateľovi alebo skupine odstrániť prístup k priečinkom NTFS:
$ path = "c: \ drivers"
$ acl = Get-Acl $ cesta
$ rules = $ acl.Access | kde IsInherited -eq $ false
$ targetrule = $ rules | kde IdentityReference -eq "WORKSTAT1 \ user1"
$ acl.RemoveAccessRule ($ targetrule)
$ acl | Cesta Set-Acl-Cesta $

Ak chcete zakázať dedenie pre priečinok z prostredia PowerShell:

$ path = 'C: \ dist'
$ acl = Get-ACL - Cesta $ cesta
$ acl.SetAccessRuleProtection ($ True, $ True) # prvý $ True označuje, či je tento adresár chránený, druhý $ True - či chcete skopírovať aktuálne povolenia NTFS
Set-Acl-Cesta $ cesta -AclObject $ acl

Pomocou Get-acl a Set-Acl môžete tiež kontrolovať parametre auditu NTFS objektov (pozri článok Kto vymazal súbor na serveri?), Alebo informácie o aktuálnych oprávneniach OU v AD.

Na správu povolení z prostredia PowerShell používame modul NTFSSecurity

Ako som už povedal, vstavaný modul na správu zoznamov ACL na objektoch v PowerShell nie je najvhodnejší. Na správu práv súborov NTFS na súbory a priečinky v systéme Windows je lepšie použiť samostatný modul galérie PowerShell - NTFSSecurity. Najnovšia verzia modulu NTFSSecurity (momentálne 4.2.4) sa dá nainštalovať pomocou príkazu Install-Module -Name NTFSSecurity, alebo stiahnuť ručne (odkaz). Pre manuálnu inštaláciu stačí rozbaliť obsah archívu modulov do adresára C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity (nezabudnite odomknúť stiahnuté súbory).

Importujte modul NTFSSecurity do relácie PowerShell:

Importový modul NTFSSecurity

Zoznam príkazov dostupných v module (k dispozícii je 36 cm):

Get-Command - Modul NTFSSecurity

Zoznam aktuálnych povolení adresárov NTFS:
Get-Item 'c: \ distr' | Get-NTFSAccess

Ako vidíte, súčasné povolenia sa poskytujú vo výhodnejšej forme..

Ak chcete konkrétnemu používateľovi udeliť a zoskupiť úplné práva skupiny na priečinok, spustite príkaz:
Add-NTFSAccess -Path C: \ distr -Account 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrators' -AccessRights 'Fullcontrol' -PassThru

rada. Štandardne cmdlets NTFSSecurity nevracia žiadne dáta, takže príkaz zobrazí po spustení nové ACL, použite parameter passthru.

Ak chcete udeliť práva iba na najvyššej úrovni a nemeniť povolenia pre vnorené objekty (iba pre priečinok), použite príkaz:

Add-NTFSAccess c: \ data \ public -Cpcount \ aaivanov -AccessRights Modify -AppliesTo thisFolderOnly

Odstráňte povolenia priradené k NTFS:

Odstrániť-NTFSAccess -Cesta C: \ distr -Account 'WORKSTAT1 \ confroom' -AccessRights FullControl -PassThru

Nasledujúci príkaz môže pozbaviť práva zadaného účtu na všetky vnorené objekty v zadanom priečinku (zdedené povolenia sa preskočia):

Get-ChildItem -Path C: \ distr -Recurse | Získajte-NTFSAccess - účet 'WORKSTAT1 \ confroom' -ExcludeInherited | Remove-NTFSAccess -PassThru

Nasledujúci príkaz môže z účtu správcu urobiť vlastníka všetkých vnorených objektov v adresári:

Get-ChildItem -Path C: \ distr -Recurse -Force | Set-NTFSOwner -Account 'Administrator'

Ak chcete manuálne vymazať všetky povolenia priradené k objektom adresára (zdedené povolenia sa neodstránia):

Get-ChildItem -Path C: \ distr -Recurse -Force | Clear-NTFSAccess

Povoliť dedenie NTFS pre všetky objekty v adresári:

Get-ChildItem -Path C: \ distr -Recurse -Force | Enable-NTFSAccessInheritance

Postup zobrazenia všetkých manuálne priradených povolení s výnimkou dedičných oprávnení:

smer C: \ distr | Získajte-NTFSAccess -ExcludeInherited

Môžete zobraziť oprávnenia priradené konkrétnemu účtu (nemýľte sa s účinnými povoleniami, o nich sa budeme baviť nižšie):

smer C: \ distr | Získajte-NTFSAccess - účet spoločnosti \ aaivanov

Kontrola efektívnych povolení NTFS na objekty z PowerShell

Môžete skontrolovať efektívne povolenia NTFS do konkrétneho súboru alebo priečinka pomocou rutiny cmdlet Get-EffectiveAccess. Predpokladajme, že ste povolili prístup k určitému priečinku viacerým skupinám zabezpečenia AD a teraz chcete pochopiť, či konkrétny účet (SID) má alebo nemá prístup k tomuto priečinku. Ako to urobiť bez uvedenia AD skupín, ktoré zahŕňajú jeho účet? V tejto situácii pomôže kontrola účinných povolení NTFS. Povedzme, že musíte skontrolovať efektívne práva všetkých podpriečinkov v adresári pre užívateľskú miestnosť.

Get-ChildItem -Path c: \ distr -Recurse -Directory | Získajte-NTFSEffectiveAccess - účet 'WORKSTAT1 \ confroom' |. vyberte Účet, AccessControlType, AccessRights, FullName

Alebo môžete skontrolovať účinné povolenia pre konkrétny súbor:

Get-Item -Path 'C: \ distr \ mstsc.exe.manifest' | Získajte-NTFSEffectiveAccess - účet 'WORKSTAT1 \ confroom' |. Format-List