Upravljanje dovoljenj NTFS za mape in datoteke iz PowerShell-a

Za nadzor dostopa do datotek in map v operacijskem sistemu Windows je vsakemu predmetu datotečnega sistema (imenik ali datoteka) dodeljen poseben ACL (seznam nadzora dostopa, seznam nadzora dostopa). Objekt ACL definira razpoložljive operacije (dovoljenja), ki jih lahko uporabnik in / ali skupine izvajajo s tem objektom. V večini primerov skrbniki oken uporabljajo GUI File Explorer (lastnosti mape / datoteke -> jeziček Varnost) ali pripomoček konzole icacls za upravljanje dovoljenj za datoteke in mape NFTS. V tem članku bomo pogledali načine upravljanja dovoljenj za objekte datotečnega sistema NTFS iz PowerShell-a. Te ukaze lahko uporabite v skripti in za avtomatizacijo upravljanja dovoljenj NTFS na datotečnih strežnikih Windows.

Vsebina:

  • Vgrajeni cmdleti za upravljanje ACL-jev v NTFS: Get-Acl in Set-Acl
  • Za upravljanje dovoljenj PowerShell uporabljamo modul varnosti NTFSS
  • Preverjanje učinkovitih dovoljenj NTFS na objektih iz PowerShell-a

Vgrajeni cmdleti za upravljanje ACL-jev v NTFS: Get-Acl in Set-Acl

V PowerShell v5 (Windows 10 / Windows Server 2016) obstajata dve ločeni vgrajeni cmdlet za upravljanje ACL (vključenih v modul Microsoft.PowerShell.Security):

  • Get-acl - omogoča pridobitev trenutnega ACL za določen objekt v datotečnem sistemu NTFS;
  • Set-acl - uporablja se za dodajanje / spreminjanje trenutnih ACL-jev objekta.

Na teh vgrajenih cmdletih se ne bomo podrobno podrobneje ukvarjali, kot njihova funkcionalnost v večini primerov ne zadostuje za upravljanje dovoljenj NTFS pri resničnih nalogah. Upoštevajmo le nekaj značilnih primerov njihove uporabe..

Seznam trenutnega lastnika mape (datoteke) in seznam dovoljenj, dodeljenih NTFS:

get-acl C: \ Gonilniki \ | fl

Pot: Microsoft.PowerShell.Core \ FileSystem :: C: \ Gonilniki \
Lastnik: WORKSTAT1 \ root
Skupina: WORKSTAT1 \ Manjka
Dostop: NT AUTHORITY \ Authentication Users Dovoli spreminjanje, sinhronizacijo
NT ORGAN \ SISTEM Dovoli FullControl
BUILTIN \ Administratorji dovolijo FullControl
BUILTIN \ Uporabniki dovolijo ReadAndExecute, Synchronise
WORKSTAT1 \ root Dovoli spreminjanje, sinhronizacijo
Revizija:
Sddl: O: S-1-5-21-3650440056-3766451173-3310994491-1001G: S-1-5-21-3650440056-766451173-3310994491-513D: PAI (A; OICI; 0x 1301bf ;;; 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)

Kot lahko vidite, so trenutna dovoljenja predstavljena tudi kot nizov SDDL - to obliko opisa opisa smo na kratko preučili v članku Upravljanje pravic za storitve Windows.

Dovoljenja NTFS lahko navedete le v bolj razumljivi obliki:

(get-acl C: \ Gonilniki \). dostop

Z naslednjim ukazom lahko kopirate dovoljenja NTFS iz ene mape in jih uporabite v drugo:

Get-Acl C: \ Gonilniki | Nastavi-Acl C: \ Distr

Za izvajanje te operacije mora biti račun lastnik vira (lastnik) in imeti pravice lastništva.

Glavna težava pri uporabi Set-ACL je, da cmdlet poskuša spremeniti lastnika vira, tudi če želite spremeniti dovoljenja NTFS. Zaradi tega morate za dodajanje pravic do predmeta uporabiti naslednjo konstrukcijo:

$ path = "c: \ gonilniki"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Preberite, preberite, in izvedite, seznamDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "Brez"
$ RuleType = "Dovoli"
$ acl = Get-Acl $ pot
$ perm = $ uporabnik, $ pravice, $ InheritSettings, $ PropogationSettings, $ RuleType
$ rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule ($ pravilo)
$ acl | Set-Acl -Path $ pot

Če želite odstraniti dostop do mape NTFS za uporabnika ali skupino:
$ path = "c: \ gonilniki"
$ acl = Get-Acl $ pot
$ rules = $ acl.Access | kjer je IsHedeno -eq $ false
$ targetrule = $ pravila | kjer je IdentityReference -eq "WORKSTAT1 \ user1"
$ acl.RemoveAccessRule ($ targetrule)
$ acl | Set-Acl -Path $ pot

Če želite onemogočiti dedovanje za mapo iz PowerShell:

$ path = 'C: \ dist'
$ acl = Get-ACL-Pot do $
$ acl.SetAccessRuleProtection ($ True, $ True) # prvi $ True kaže, ali je ta imenik zaščiten, drugi $ True - ali naj kopira trenutna dovoljenja NTFS
Set-Acl -Path $ path -AclObject $ acl

Z uporabo Get-acl in Set-Acl lahko nadzorujete parametre revizije predmetov NTFS (glejte članek Kdo je datoteko izbrisal na strežniku?) Ali informacije o trenutnih dovoljenjih OU v AD.

Za upravljanje dovoljenj PowerShell uporabljamo modul varnosti NTFSS

Kot sem že rekel, vgrajeni modul za upravljanje ACL-jev na objektih v PowerShellu ni najbolj priročen. Za upravljanje pravic datotek in map NTFS v sistemu Windows je bolje uporabiti ločen modul galerije PowerShell - NTFSS varnost. Z ukazom je mogoče namestiti zadnjo različico modula NTFSSe varnost (trenutno 4.2.4) Namestitev-modul -Name NTFSS varnost, ali prenesite ročno (povezava). Za ročno namestitev je dovolj, da razpakirate vsebino arhiva modula v imenik C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity (ne pozabite odkleniti prenesenih datotek).

Uvozite varnostni modul NTFSS v PowerShell sejo:

Uvozni modul NTFSS varnost

Navedimo ukaze, ki so na voljo v modulu (na voljo je 36 cmdletov):

Get-Command -Module NTFSS varnost

Seznam trenutnih dovoljenj imenika NTFS:
Get-Item 'c: \ distr' | Get-NTFSAccess

Kot vidite, so trenutna dovoljenja predstavljena v bolj priročni obliki..

Če želite dodeliti določenemu uporabniku in združiti skupino v celoti pravice do mape, zaženite ukaz:
Add-NTFSAccess -Path C: \ distr -Račun 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrators' -AccessRights 'Fullcontrol' -PassThru

Namig. Cmdleti NTFSS varnostnega modula ne vrnejo nobenih podatkov, tako da ukaz po izvedbi prikaže nove ACL, uporabite parameter Passthru.

Če želite dodeliti pravice samo na najvišji ravni in ne spremeniti dovoljenj za ugnezdene predmete (samo v mapi), uporabite ukaz:

Add-NTFSAccess c: \ data \ public -Account corp \ aaivanov -AccessRights Spremeni -PripraveZa toFolderOnly

Izbrišite dovoljenja, dodeljena NTFS:

Odstrani-NTFSAccess -Path C: \ distr -Račun 'WORKSTAT1 \ confroom' -AccessRights FullControl -PassThru

Naslednji ukaz lahko odvzame določene pravice računa za vse ugnezdene predmete v podani mapi (podedovana dovoljenja bodo preskočena):

Get-ChildItem -Path C: \ distr -Ponovite | Get-NTFSAccess -Account 'WORKSTAT1 \ confroom' -ExcludeInherited | Odstrani-NTFSAccess -PassThru

Z naslednjim ukazom lahko skrbniški račun postane lastnik vseh ugnezdenih predmetov v imeniku:

Get-ChildItem -Path C: \ distr -Recurse -Force | Set-NTFSOwner - Račun 'Administrator'

Ročno počistite vsa dovoljenja, dodeljena objektom imenika (podedovana dovoljenja ne bodo izbrisana):

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

Omogoči dedovanje NTFS za vse predmete v imeniku:

Get-ChildItem -Path C: \ distr -Recurse -Force | Omogoči-NTFSAccessInheritance

Če želite prikazati vsa dovoljenja, ki so ročno dodeljena, razen podedovanih dovoljenj:

dir C: \ distr | Get-NTFSAccess -ExcludeInherited

Lahko prikažete dovoljenja, dodeljena določenemu računu (ne zamenjujte z učinkovitimi dovoljenji, o njih bomo govorili spodaj):

dir C: \ distr | Get-NTFSAccess -Account corp \ aaivanov

Preverjanje učinkovitih dovoljenj NTFS na objektih iz PowerShell-a

Lahko preverite učinkovita dovoljenja NTFS v določeno datoteko ali mapo s pomočjo cmdlet-a Get-EffectAccess. Recimo, da ste do določene mape odobrili dostop do več varnostnih skupin AD in zdaj želite razumeti, ali ima določen račun (SID) dostop do te mape. Kako to storiti brez naštevanja skupin AD, ki vključujejo njegov račun? V tem primeru bo funkcija preverjanja učinkovitih dovoljenj NTFS pomagala. Recimo, da morate preveriti učinkovite pravice do vseh podmap v imeniku za uporabniško sobo.

Get-ChildItem -Path c: \ distr -Recurse -Directory | Get-NTFSEffectiveAccess -Račun 'WORKSTAT1 \ confroom' | izberite Račun, AccessControlType, AccessRights, Polno ime

Lahko pa preverite učinkovita dovoljenja za določeno datoteko:

Get-Item-Pot 'C: \ distr \ mstsc.exe.manifest' | Get-NTFSEffectiveAccess -Račun 'WORKSTAT1 \ confroom' | Oblika zapisa