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)
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
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
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
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