Upravljanje dozvolama NTFS za mape i datoteke iz PowerShell-a

Za kontrolu pristupa datotekama i mapama u sustavu Windows poseban je ACL (popis kontrole pristupa, popis kontrole pristupa) dodijeljen svakom objektu sustava NTFS datotečni sustav (direktorij ili datoteka). Objekt ACL definira dostupne operacije (dozvole) koje korisnik i / ili grupe mogu obavljati s ovim objektom. U većini slučajeva administratori Windowsa koriste GUI File Explorer (svojstva mape / datoteke -> kartica Sigurnost) ili uslužni program konzole icacls za upravljanje dozvolama NFTS datoteka i mapa. U ovom ćemo članku pogledati načine upravljanja dozvolama za objekte datotečnog sustava NTFS iz PowerShell-a. Ove naredbe možete koristiti u skriptama i za automatizaciju upravljanja dozvolama NTFS na Windows datotečnim poslužiteljima.

sadržaj:

  • Ugrađeni cmdleti za upravljanje ACL-ovima u NTFS-u: Get-Acl i Set-Acl
  • Koristimo NTFSSsigurnosni modul za upravljanje dozvolama PowerShell-a
  • Provjera efektivnih NTFS dozvola na objektima iz PowerShell-a

Ugrađeni cmdleti za upravljanje ACL-ovima u NTFS-u: Get-Acl i Set-Acl

U PowerShell v5 (Windows 10 / Windows Server 2016) postoje dva odvojena ugrađena cmdleta za upravljanje ACL-ovima (uključena u Microsoft.PowerShell.Security modul):

  • Get-ACL - omogućuje vam da dobijete trenutni ACL za određeni objekt na datotečnom sustavu NTFS;
  • Set-ACL - koristi se za dodavanje / izmjenu trenutačnih ACL-ova objekta.

Nećemo se detaljno zadržavati na tim ugrađenim cmdletima kao njihova je funkcionalnost u većini slučajeva nedovoljna za upravljanje dozvolama NTFS-a u stvarnim zadacima. Razmotrimo samo nekoliko tipičnih primjera njihove uporabe..

Navedite trenutnog vlasnika mape (datoteke) i popis dozvola dodijeljenih NTFS:

get-acl C: \ Upravljački programi \ | fl

Put: Microsoft.PowerShell.Core \ FileSystem :: C: \ Drivers \
Vlasnik: WORKSTAT1 \ root
Grupa: WORKSTAT1 \ Nedostaje
Pristup: NT AUTHORITY \ Autentificirani korisnici dopuštaju izmjenu, sinkronizaciju
NT AUTHORITY \ SYSTEM Dopusti FullControl
BUILTIN \ Administratori omogućuju FullControl
BUILTIN \ Korisnici dopuštaju ReadAndExecute, Synchronise
WORKSTAT1 \ root Dopusti izmjenu, sinkronizaciju
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; -37664 51173-3310994491-1001)

Kao što vidite, trenutna dopuštenja prikazana su i kao nizovi SDDL - ukratko smo ispitali ovaj oblik opisa pristupa u članku Upravljanje pravima za Windows usluge.

Dozvole NTFS možete navesti samo u razumljivijem formatu:

(get-acl C: \ Drivers \) pristup

Pomoću sljedeće naredbe možete kopirati NTFS dozvole iz jedne mape i primijeniti ih u drugu:

Get-Acl C: \ Upravljački programi | Podesi-Acl C: \ Distr

Za obavljanje ove operacije, račun mora biti vlasnik resursa (Vlasnik) i imati prava preuzimanja vlasništva.

Glavni problem korištenja Set-ACL je taj što cmdlet uvijek pokušava promijeniti vlasnika resursa, čak i ako samo želite promijeniti NTFS dozvole. Kao rezultat, za dodavanje prava na objekt morate koristiti sljedeću konstrukciju:

$ path = "c: \ vozači"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Čitajte, čitajte i izvršavajte, popisDirektorija"
$ InheritSettings = "Kontejnerinit, ObjektInherit"
$ PropogationSettings = "Nema"
$ RuleType = "Dozvoli"
$ acl = Get-Acl $ staza
$ perm = $ korisnik, $ prava, $ InheritSettings, $ PropogationSettings, $ RuleType
$ rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule ($ pravilo)
$ acl | Set-Acl -Path $ putanja

Za uklanjanje pristupa mapi NTFS korisniku ili grupi:
$ path = "c: \ vozači"
$ acl = Get-Acl $ staza
$ pravila = $ acl.Access | gdje je IsInherited -eq $ false
$ targetrule = $ pravila | gdje je IdentityReference -eq "WORKSTAT1 \ user1"
$ acl.RemoveAccessRule ($ targetrule)
$ acl | Set-Acl -Path $ putanja

Da biste onemogućili nasljeđivanje za mapu iz PowerShell-a:

$ path = 'C: \ dist'
$ acl = Get-ACL-Put $ puta
$ acl.SetAccessRuleProtection ($ True, $ True) # prvi $ True označava je li taj direktorij zaštićen, drugi $ True - da li kopirati trenutna dopuštenja NTFS
Set-Acl -Path $ path -AclObject $ acl

Također, pomoću Get-acl i Set-Acl možete kontrolirati parametre NTFS revizije objekata (pogledajte članak Tko je izbrisao datoteku na poslužitelju?) Ili informacije o trenutnim dozvolama OU u AD-u.

Koristimo NTFSSsigurnosni modul za upravljanje dozvolama PowerShell-a

Kao što rekoh, ugrađeni modul za upravljanje ACL-ovima na objektima u PowerShell-u nije najprikladniji. Za upravljanje pravima NTFS datoteka i mapa u sustavu Windows, bolje je koristiti zasebni modul galerije PowerShell - NTFSSecurity. Najnovija inačica NTFSS sigurnosnog modula (4.2.4 trenutno) može se instalirati pomoću naredbe Install-Module -Name NTFSSsigurnost, ili preuzmite ručno (link). Za ručnu instalaciju dovoljno je raspakirati sadržaj arhive modula u mapu C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity (ne zaboravite otključati preuzete datoteke).

Uvezite NTFSS sigurnosni modul u PowerShell sesiju:

Uvozni modul NTFSSsigurnost

Navedimo naredbe dostupne u modulu (dostupno je 36 cmdleta):

Get-Command - modul NTFSS sigurnosti

Navedite trenutna dopuštenja za NTFS direktorij:
Get-stavka 'c: \ distr' | Get-NTFSAccess

Kao što vidite, trenutna dopuštenja predstavljena su u prikladnijem obliku..

Da biste određenom korisniku dodijelili i grupirali kompletna prava na mapu, pokrenite naredbu:
Add-NTFSAccess -Path C: \ distr -Račun 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrators' -AccessRights 'Fullcontrol' -PassThru

vijeće. Po zadanom cmdleti NTFSS sigurnosnog modula ne vraćaju nikakve podatke, tako da naredba prikazuje nove ACL-ove nakon izvršenja, koristite parametar PassThru.

Da biste dodijelili prava samo na gornjoj razini i ne promijenili dopuštenja za ugniježđene objekte (samo u mapi), koristite naredbu:

Add-NTFSAccess c: \ data \ public -Account corp \ aaivanov -AccessRights Izmijeni -AppliesTo ThisFolderOnly

Izbrišite dopuštenja dodijeljena NTFS:

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

Sljedeća naredba može lišiti navedena prava računa za sve ugniježđene objekte u navedenoj mapi (naslijeđena dopuštenja preskočit će se):

Get-ChildItem-Put C: \ distr -Recurse | Get-NTFSAccess -Račun 'WORKSTAT1 \ confroom' -ExcludeInherited | Ukloni-NTFSAccess -PassThru

Sljedeća naredba može administratorski račun učiniti vlasnikom svih ugniježđenih objekata u direktoriju:

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

Da biste ručno izbrisali sva dopuštenja dodijeljena objektima direktorija (naslijeđena dopuštenja neće biti izbrisana):

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

Omogući NTFS nasljeđivanje za sve objekte u direktoriju:

Get-ChildItem -Path C: \ distr -Recurse -Force | Omogućiti-NTFSAccessInheritance

Da biste prikazali sva dopuštenja koja su dodijeljena ručno, isključujući naslijeđena dopuštenja:

dir C: \ distr | Get-NTFSAccess -ExcludeInherited

Možete prikazati dopuštenja dodijeljena određenom računu (nemojte mešati efektivne dozvole; o njima ćemo govoriti u nastavku):

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

Provjera efektivnih NTFS dozvola na objektima iz PowerShell-a

Možete provjeriti učinkovita dopuštenja NTFS u određenu datoteku ili mapu pomoću cmdleta Get-EffectiveAccess. Pretpostavimo da ste nekoliko sigurnosnih grupa AD-a odobrili pristup određenoj mapi i sada želite razumjeti ima li određeni račun (SID) pristup ovoj mapi ili ne. Kako to učiniti bez popisa grupa AD koje uključuju njegov račun? U toj će situaciji pomoći provjera efektivnih NTFS dozvola. Recimo da trebate provjeriti učinkovita prava na sve podmape u direktoriju za korisničku sobu.

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

Ili možete provjeriti učinkovita dopuštenja za određenu datoteku:

Get-Item-Put 'C: \ distr \ mstsc.exe.manifest' | Get-NTFSEffectiveAccess -Račun 'WORKSTAT1 \ confroom' | Format-List