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