Pro řízení přístupu k souborům a složkám ve Windows je každému objektu systému souborů NTFS (adresář nebo soubor) přiřazen speciální seznam ACL (Access Control List, Access Control List). Objekt ACL definuje dostupné operace (oprávnění), které může uživatel nebo skupiny s tímto objektem provádět. Ve většině případů správci oken používají ke správě oprávnění k souborům a složkám NFTS rozhraní grafického uživatelského rozhraní (vlastnosti složky / souboru -> karta Zabezpečení) nebo obslužný program konzoly icacls. V tomto článku se podíváme na způsoby správy oprávnění pro objekty systému souborů NTFS z prostředí PowerShell. Tyto příkazy můžete použít ve skriptech a automatizovat správu oprávnění NTFS na souborových serverech Windows.
Obsah:
- Vestavěné rutiny cmdlet pro správu ACL v NTFS: Get-Acl a Set-Acl
- Modul NTFSSecurity používáme ke správě oprávnění z prostředí PowerShell
- Kontrola efektivních oprávnění NTFS na objekty z prostředí PowerShell
Vestavěné rutiny cmdlet pro správu ACL v NTFS: Get-Acl a Set-Acl
V PowerShell v5 (Windows 10 / Windows Server 2016) existují dvě samostatné vestavěné rutiny cmdlet pro správu ACL (součástí modulu Microsoft.PowerShell.Security):
- Get-acl - umožňuje získat aktuální ACL pro konkrétní objekt v systému souborů NTFS;
- Set-acl - slouží k přidání / úpravě aktuálních ACL aktuálních objektů.
Nebudeme se podrobně zabývat těmito vestavěnými rutinami, jak jejich funkčnost ve většině případů nestačí ke správě oprávnění NTFS ve skutečných úkolech. Uvažujme jen několik typických příkladů jejich použití..
Seznam aktuálního vlastníka složky (souboru) a seznam oprávnění přiřazených NTFS:
get-acl C: \ Drivers \ | fl
Cesta: Microsoft.PowerShell.Core \ FileSystem :: C: \ Drivers \
Vlastník: WORKSTAT1 \ root
Skupina: WORKSTAT1 \ Missing
Přístup: NT AUTHORITY \ Authenticated Users Povolit úpravy, synchronizovat
NT AUTHORITY \ SYSTEM Povolit FullControl
BUILTIN \ Administrators Povolit FullControl
BUILTIN \ Users Povolit ReadAndExecute, Synchronize
WORKSTAT1 \ root Povolit úpravy, synchronizovat
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)
Oprávnění NTFS můžete uvést pouze ve srozumitelnějším formátu:
(get-acl C: \ Drivers \)
Pomocí následujícího příkazu můžete zkopírovat oprávnění NTFS z jedné složky a použít je do jiné složky:
Get-Acl C: \ Ovladače | Set-Acl C: \ Distr
Hlavním problémem při používání Set-ACL je to, že rutina se vždy pokusí změnit vlastníka prostředku, i když chcete změnit oprávnění NTFS. Výsledkem je, že pro přidání práv k objektu musíte použít následující konstrukci:
$ path = "c: \ drivers"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Read, ReadAndExecute, ListDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "None"
$ RuleType = "Povolit"
$ acl = Get-Acl $ cesta
$ perm = $ user, $ Rights, $ InheritSettings, $ PropogationSettings, $ RuleType
$ Rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule (pravidlo $)
$ acl | Set-Acl-Cesta $ cesta
Odebrání přístupu ke složce NTFS pro uživatele nebo skupinu:
$ 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 | Set-Acl-Cesta $ cesta
Zakázání dědičnosti složky z prostředí PowerShell:
$ path = 'C: \ dist'
$ acl = Get-ACL - Cesta $ cesta
$ acl.SetAccessRuleProtection ($ True, $ True) # první $ True označuje, zda je tento adresář chráněn, druhý $ True - zda zkopírovat aktuální oprávnění NTFS
Set-Acl-Cesta $ cesta -AclObject $ acl
Modul NTFSSecurity používáme ke správě oprávnění z prostředí PowerShell
Jak jsem řekl, vestavěný modul pro správu ACL na objektech v PowerShell není nejvhodnější. Ke správě práv k souborům a složkám NTFS ve Windows je lepší použít samostatný galerijní modul PowerShell - NTFSSecurity. Pomocí příkazu lze nainstalovat nejnovější verzi modulu NTFSSecurity (v současné době 4.2.4) Install-Module -Name NTFSSecurity
, nebo stáhnout ručně (odkaz). Pro ruční instalaci stačí rozbalit obsah archivu modulu do adresáře C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity (nezapomeňte stažené soubory odemknout).
Importujte modul NTFSSecurity do relace PowerShell:
Importový modul NTFSSecurity
Seznam příkazů dostupných v modulu (k dispozici je 36 cm):
Get-Command - Modul NTFSSecurity
Seznam aktuálních oprávnění adresáře NTFS:Get-Item 'c: \ distr' | Získejte-NTFSAccess
Jak vidíte, současná oprávnění jsou prezentována ve výhodnější formě..
Chcete-li udělit konkrétnímu uživateli a seskupit úplná práva skupiny ke složce, spusťte příkaz:Add-NTFSAccess -Path C: \ distr -Account 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrators' -AccessRights 'Fullcontrol' -PassThru
Chcete-li udělit práva pouze na nejvyšší úrovni a neměnit oprávnění pro vnořené objekty (pouze ve složce), použijte příkaz:
Přidat-NTFSAccess c: \ data \ public - účet Corp \ aaivanov -AccessRights Modify -AppliesTo thisFolderOnly
Odstranit oprávnění přiřazená NTFS:
Odebrat-NTFSAccess -Path C: \ distr -Account 'WORKSTAT1 \ confroom' -AccessRights FullControl -PassThru
Následující příkaz může připravená práva účtu zbavit všech vnořených objektů v zadané složce (zděděná oprávnění budou přeskočena):
Get-ChildItem -Path C: \ distr -Recurse | Získejte-NTFSAccess -Účet 'WORKSTAT1 \ confroom' -ExcludeInherited | Remove-NTFSAccess -PassThru
Následující příkaz může učinit účet správce jako vlastníka všech vnořených objektů v adresáři:
Get-ChildItem -Path C: \ distr -Recurse -Force | Set-NTFSOwner -Account 'Administrator'
Chcete-li ručně vymazat všechna oprávnění přiřazená k objektům adresáře (zděděná oprávnění nebudou odstraněna):
Get-ChildItem -Path C: \ distr -Recurse -Force | Vymazat-NTFSApřístup
Povolit dědičnost NTFS pro všechny objekty v adresáři:
Get-ChildItem -Path C: \ distr -Recurse -Force | Povolit-NTFSAccessInheritance
Chcete-li zobrazit všechna ručně přiřazená oprávnění, s výjimkou zděděných oprávnění:
směr C: \ distr | Získejte-NTFSAccess -ExcludeInherited
Můžete zobrazit oprávnění přiřazená ke konkrétnímu účtu (nezaměňujte se s účinnými oprávněními, budeme o nich mluvit níže):
směr C: \ distr | Získejte-NTFSAccess - účet Corp \ aaivanov
Kontrola efektivních oprávnění NTFS na objekty z prostředí PowerShell
Můžete to zkontrolovat efektivní oprávnění NTFS do konkrétního souboru nebo složky pomocí rutiny cmdlet Získejte efektivní efekt
. Předpokládejme, že jste udělili přístup k určité složce několika skupinám zabezpečení AD a nyní chcete pochopit, zda určitý účet (SID) má přístup k této složce nebo ne. Jak to provést bez uvedení reklamních skupin, které obsahují jeho účet? V této situaci pomůže kontrola účinných oprávnění NTFS. Řekněme, že je třeba zkontrolovat efektivní práva všech podsložek v adresáři pro uživatelské kongresové prostory.
Get-ChildItem -Path c: \ distr -Recurse -Directory | Získejte-NTFSEffectiveAccess - účet 'WORKSTAT1 \ confroom' | vyberte Účet, AccessControlType, AccessRights, FullName
Nebo můžete zkontrolovat účinná oprávnění pro konkrétní soubor:
Get-Item -Path 'C: \ distr \ mstsc.exe.manifest' | Získejte-NTFSEffectiveAccess - účet 'WORKSTAT1 \ confroom' | Formát-seznam