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