Aby kontrolować dostęp do plików i folderów w systemie Windows, specjalna lista kontroli dostępu (lista kontroli dostępu, lista kontroli dostępu) jest przypisana do każdego obiektu systemu plików NTFS (katalogu lub pliku). Obiekt ACL definiuje dostępne operacje (uprawnienia), które użytkownik i / lub grupy mogą wykonywać z tym obiektem. W większości przypadków administratorzy systemu Windows używają interfejsu GUI Eksploratora plików (właściwości folderu / pliku -> karta Zabezpieczenia) lub narzędzia konsoli icacls do zarządzania uprawnieniami do plików NFTS i folderów. W tym artykule przyjrzymy się sposobom zarządzania uprawnieniami do obiektów systemu plików NTFS z PowerShell. Możesz użyć tych poleceń w skryptach i zautomatyzować zarządzanie uprawnieniami NTFS na serwerach plików Windows.
Treść
- Wbudowane polecenia cmdlet do zarządzania listami ACL w systemie plików NTFS: Get-Acl i Set-Acl
- Używamy modułu NTFSSecurity do zarządzania uprawnieniami z PowerShell
- Sprawdzanie efektywnych uprawnień NTFS do obiektów z PowerShell
Wbudowane polecenia cmdlet do zarządzania listami ACL w systemie plików NTFS: Get-Acl i Set-Acl
W programie PowerShell v5 (Windows 10 / Windows Server 2016) istnieją dwa osobne wbudowane polecenia cmdlet do zarządzania listami ACL (zawarte w module Microsoft.PowerShell.Security):
- Get-acl - pozwala uzyskać bieżącą listę ACL dla określonego obiektu w systemie plików NTFS;
- Zestaw acl - służy do dodawania / modyfikowania bieżących list ACL obiektów.
Nie będziemy omawiać szczegółowo tych wbudowanych poleceń cmdlet, jak ich funkcjonalność w większości przypadków jest niewystarczająca do zarządzania uprawnieniami NTFS w rzeczywistych zadaniach. Rozważmy tylko kilka typowych przykładów ich użycia..
Wyświetl aktualnego właściciela folderu (pliku) i listę uprawnień przypisanych do NTFS:
get-acl C: \ Drivers \ | fl
Ścieżka: Microsoft.PowerShell.Core \ FileSystem :: C: \ Drivers \
Właściciel: WORKSTAT1 \ root
Grupa: WORKSTAT1 \ Missing
Dostęp: NT AUTHORITY \ Authentified Users Allow Modyfikuj, synchronizuj
NT AUTHORITY \ SYSTEM Zezwól na FullControl
BUILTIN \ Administrators Allow FullControl
BUILTIN \ Users Allow ReadAndExecute, Synchronize
WORKSTAT1 \ root Zezwól na modyfikację, synchronizację
Audyt:
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)
Możesz wymienić uprawnienia NTFS tylko w bardziej zrozumiałym formacie:
(get-acl C: \ Drivers \). dostęp
Za pomocą następującego polecenia możesz skopiować uprawnienia NTFS z jednego folderu i zastosować je do innego:
Get-Acl C: \ Drivers | Set-Acl C: \ Distr
Główny problem z używaniem Set-ACL polega na tym, że cmdlet zawsze próbuje zmienić właściciela zasobu, nawet jeśli chcesz tylko zmienić uprawnienia NTFS. W związku z tym, aby dodać prawa do obiektu, musisz użyć następującej konstrukcji:
$ path = "c: \ drivers"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Read, ReadAndExecute, ListDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "Brak"
$ RuleType = "Zezwól"
$ acl = ścieżka Get-Acl $
$ perm = $ user, $ Rights, $ InheritSettings, $ PropogationSettings, $ RuleType
$ rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule ($ rule)
$ acl | Ścieżka Set-Acl -Path $
Aby usunąć dostęp do folderu NTFS dla użytkownika lub grupy:
$ path = "c: \ drivers"
$ acl = ścieżka Get-Acl $
$ rules = $ acl.Access | gdzie IsInherited -eq $ false
$ targetrule = $ rules | gdzie IdentityReference -eq „WORKSTAT1 \ użytkownik1”
$ acl.RemoveAccessRule ($ targetrule)
$ acl | Ścieżka Set-Acl -Path $
Aby wyłączyć dziedziczenie folderu z PowerShell:
$ path = 'C: \ dist'
$ acl = Get-ACL -Path $ ścieżka
$ acl.SetAccessRuleProtection ($ True, $ True) # pierwsze $ True wskazuje, czy ten katalog jest chroniony, drugie $ True - czy skopiować bieżące uprawnienia NTFS
Set-Acl -Path $ path -AclObject $ acl
Używamy modułu NTFSSecurity do zarządzania uprawnieniami z PowerShell
Jak powiedziałem, wbudowany moduł do zarządzania listami ACL obiektów w programie PowerShell nie jest najwygodniejszy. Aby zarządzać prawami do plików i folderów NTFS w systemie Windows, lepiej jest użyć osobnego modułu galerii PowerShell - NTFSSecurity. Najnowszą wersję modułu NTFSSecurity (obecnie 4.2.4) można zainstalować za pomocą polecenia Install-Module -Name NTFSSecurity
, lub pobierz ręcznie (link). Do ręcznej instalacji wystarczy rozpakować zawartość archiwum modułu do katalogu C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity (nie zapomnij odblokować pobranych plików).
Zaimportuj moduł NTFSSecurity do sesji PowerShell:
Moduł importu NTFSSecurity
Wymieńmy polecenia dostępne w module (dostępnych jest 36 cmdletów):
Get-Command -Moduł NTFSSecurity
Wyświetl aktualne uprawnienia do katalogu NTFS:Pobierz element „c: \ distr” | Get-NTFSAccess
Jak widać, bieżące uprawnienia są przedstawione w wygodniejszej formie..
Aby nadać określonemu użytkownikowi i zgrupować grupę pełne prawa do folderu, uruchom polecenie:Dodaj-NTFSAccess -Path C: \ distr -Account „WORKSTAT1 \ confroom”, „BUILTIN \ Administrators” -AccessRights „Fullcontrol” -PassThru
Aby przyznać uprawnienia tylko na najwyższym poziomie i nie zmieniać uprawnień do obiektów zagnieżdżonych (tylko do folderu), użyj polecenia:
Dodaj-NTFSAccess c: \ data \ public -Account corp \ aaivanov -AccessRights Modify -AppliesTo ThisFolderOnly
Usuń uprawnienia przypisane do NTFS:
Usuń-NTFSAccess -Path C: \ distr -Account 'WORKSTAT1 \ confroom' -AccessRights FullControl -PassThru
Następujące polecenie może pozbawić określone prawa konta wszystkich zagnieżdżonych obiektów w określonym folderze (uprawnienia dziedziczone zostaną pominięte):
Get-ChildItem -Path C: \ distr -Recurse | Uzyskaj-NTFSAccess -Konto „WORKSTAT1 \ confroom” -ExcludeInherited | Usuń-NTFSAccess -PassThru
Następujące polecenie może uczynić konto administratora właścicielem wszystkich zagnieżdżonych obiektów w katalogu:
Get-ChildItem -Path C: \ distr -Recurse -Force | Ustaw-NTFSOwner - konto „Administrator”
Aby ręcznie wyczyścić wszystkie uprawnienia przypisane do obiektów katalogu (uprawnienia odziedziczone nie zostaną usunięte):
Get-ChildItem -Path C: \ distr -Recurse -Force | Wyczyść-NTFSAccess
Włącz dziedziczenie NTFS dla wszystkich obiektów w katalogu:
Get-ChildItem -Path C: \ distr -Recurse -Force | Włącz-NTFSAccessInheritance
Aby wyświetlić wszystkie uprawnienia przypisane ręcznie, z wyjątkiem uprawnień odziedziczonych:
reż C: \ distr | Get-NTFSAccess -ExcludeInherited
Możesz wyświetlić uprawnienia przypisane do konkretnego konta (nie mylić ze skutecznymi uprawnieniami, omówimy je poniżej):
reż C: \ distr | Get-NTFSAccess -Account corp \ aaivanov
Sprawdzanie efektywnych uprawnień NTFS do obiektów z PowerShell
Możesz sprawdzić skuteczne uprawnienia NTFS do określonego pliku lub folderu za pomocą polecenia cmdlet Get-EffectiveAccess
. Załóżmy, że przyznałeś dostęp do określonego folderu kilku grupom zabezpieczeń AD, a teraz chcesz zrozumieć, czy dane konto (SID) ma dostęp do tego folderu, czy nie. Jak to zrobić, nie wymieniając grup AD, które zawierają jego konto? W tej sytuacji pomoże sprawdzenie efektywnych uprawnień NTFS. Powiedzmy, że musisz sprawdzić efektywne prawa do wszystkich podfolderów w katalogu dla konfesjonału użytkownika.
Get-ChildItem -Path c: \ distr -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'WORKSTAT1 \ confroom' | wybierz Konto, AccessControlType, AccessRights, FullName
Lub możesz sprawdzić efektywne uprawnienia do określonego pliku:
Get-Item -Path 'C: \ distr \ mstsc.exe.manifest' | Get-NTFSEffectiveAccess -Account 'WORKSTAT1 \ confroom' | Lista formatów