Beheer NTFS-machtigingen met PowerShell: Een Handleiding

Als u een IT-professional bent en moeite hebt met het instellen van bestandssysteemrechten voor uw organisaties, dan heeft u geluk. Het beheren van NTFS-machtigingen met een GUI kost veel tijd, vooral wanneer u met veel gebruikers of groepen werkt. Gelukkig hebben we PowerShell om alles beter te maken. Hoe? Met de module Microsoft.PowerShell.Security.

PowerShell heeft twee cmdlets specifiek voor het werken met ACL’s genaamd Get-ACL en Set-ACL. Met deze twee cmdlets kunt u een willekeurig aantal NTFS-machtigingen ophalen en toewijzen, waar u alles over leert in deze tutorial. Als u efficiënter wilt worden en direct bruikbaar wilt zijn in het beheren van NTFS-machtigingen, blijf dan lezen.

Geen tijd om te lezen? Geen probleem! Bekijk deze begeleidende video van TechSnips.io’s Anthony Howell hieronder:

Beheer en rapporteer Active Directory, Exchange en Microsoft 365 met ManageEngine ADManager Plus. Download de gratis proefversie!

Vereisten

Om de voorbeelden in deze tutorial te volgen, heeft u nodig:

Het aanmaken van bestanden/mappen om mee te testen

Deze tutorial zal worden opgebouwd rond een eenvoudige “lab” of een enkele map. Je leert hoe je met NTFS-rechten in PowerShell kunt werken vanaf de basis; geen extra werk nodig van jouw kant.

  1. Om te beginnen, open je een PowerShell-sessie als Administrator.
  2. Maak een lege map genaamd Share ergens op je bestandssysteem. In de volgende voorbeelden gaan we ervan uit dat deze map zich bevindt op C:\Share. Dit houdt de voorbeelden korter en makkelijker te volgen. Je kunt deze directory maken door de onderstaande code te kopiëren:
New-Item -ItemType Directory -Path 'C:\Share'

3. Maak een map genaamd C:\Share\Assets.

New-Item -ItemType Directory -Path 'C:\Share\Assets'

4. Maak een bestand genaamd client_list.txt in de C:\Share map.

New-Item -ItemType File -Path 'C:\Share\Client_list.txt'

5. Maak een bestand genaamd client_projects.txt in de C:\Share map.

New-Item -ItemType File -Path 'C:\Share\Client_projects.txt'

6. Vervolgens, ken een variabele toe voor het pad van de Share map. Variabelen maken vermindert het typen en maakt het pad makkelijker te hergebruiken. Uitgaande van dat je C:\Share gebruikt, kopieer het volgende codevoorbeeld in je PowerShell-sessie:

$dir = 'C:\Share'

7. Druk op Enter. Je hebt nu een lege directory en hebt dat pad als variabele opgeslagen.

NTFS-rechten bekijken met Get-Acl

PowerShell stelt je in staat om snel NTFS-rechten te bekijken met het Get-Acl cmdlet. In de volgende secties leer je hoe je het cmdlet gebruikt om NTFS-rechten voor een bestand of map te bekijken.

Een toegangscontrolelijst (ACL) is een lijst van toegangscontrolevermeldingen (ACE). Elke ACE in een ACL identificeert een trustee en specificeert de toegangsrechten die zijn toegestaan, geweigerd of gecontroleerd. De beveiligingsdescriptor voor een beveiligbaar object kan twee soorten ACL’s bevatten: een DACL en een SACL.

Weergave van NTFS-rechten

Traditioneel zou je een ACL bekijken door met de rechtermuisknop te klikken op de map C:\Share, te klikken op Eigenschappen, het tabblad Beveiliging te selecteren en te klikken op de knop Geavanceerd. Hieronder zie je een voorbeeld van hoe de GUI machtigingen weergeeft.

Access Control List using Advanced Security Settings for Share

Het bovenstaande voorbeeld heeft enkele machtigingsvermeldingen en genummerde eigenschappen. Bekijk ze nauwkeurig, want je zult later in dit gedeelte de vergelijking zien.

Gebruik de eerder aangemaakte map en toon de huidige NTFS-rechten voor de map met behulp van Get-Acl.

Get-Acl -Path $dir

Je zou nu het pad, de eigenaar en details van het toegangsniveau moeten zien in de volgende schermafbeelding.

Access Control List

De eigenschap Access die wordt getoond in de bovenstaande schermafbeelding bevat aanvullende informatie over de ACL, maar het scrollt van het scherm zoals te zien is aan de driepuntjes aan het einde van FullControl hierboven. Er is een betere manier om deze eigenschap te bekijken door de vorige opdracht tussen ronde haken te plaatsen of haakjes om Access objecteigenschappen te bekijken. Zoek alleen naar de Access-eigenschap op dit object door de onderstaande code uit te voeren.

(Get-Acl -Path $dir).Access

De bovenstaande opdracht kan ook worden uitgedrukt met behulp van het Access-object en door de parameter -ExpandProperties te gebruiken: Get-Acl -Path $dir | Select-Object -ExpandProperty Access

Zoals te zien is in de onderstaande schermafbeelding, wordt de uitvoer omwikkeld om de opdracht gemakkelijker te maken om individuele Access-eigenschappen te zien:

Access Control Entities

Het bekijken van toegangseigenschappen op deze manier kan ervoor zorgen dat de terminaluitvoer snel over het scherm rolt als u veel Toegangscontrole-instanties (ACE) hebt. Elke instantie bevat FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags en PropagationFlags eigenschappen. Om dit allemaal wat leesbaarder te maken, leidt u de objecten naar Format-Table -AutoSize. Voer de volgende opdracht uit.

(Get-Acl -Path $dir).Access | Format-Table -AutoSize

Zoals u kunt zien in de onderstaande schermafbeelding, zijn de toegangseigenschappen schoner en georganiseerder wanneer u Format-Table -AutoSize gebruikt:

Cleaner output when piping to Format-Table

Bekijk de eigenschappen en het kolomnummer. Merk op dat dit dezelfde eigenschappen zijn die je zag in de GUI aan het begin van de tutorial.

Access Control List using Advanced Security Settings for Share

Filteren van Toegangsobjecten

Er zijn momenten waarop je preciezer wilt zijn bij het ontdekken van NTFS-machtigingen. Om dit te doen, kun je filteren op een specifieke ACE, of specifieke resultaten vinden die geërfde of expliciete NTFS-machtigingen bevatten binnen een ACL met behulp van PowerShell. In plaats van het terminalvenster regel voor regel door te scrollen met je ogen, kun je het Where-Object-cmdlet gebruiken om te filteren.

Het onderstaande voorbeeldcode filtert op objecten die geen NTFS-machtigingen erven. Dit wordt gedaan door Where-Object te gebruiken met de -Not-operator die kijkt naar het huidige object in de pijplijn $_. lidobjecteigenschap van IsInherited, wat aangeeft of de ACE het resultaat is van overerving en niet expliciet is ingesteld:

(Get-Acl -Path $dir).Access | Where-Object {$_.IsInherited -eq $true} | Format-Table -AutoSize

Vergeet niet om objecten door te sturen naar Format-Table -AutoSize anders zal de uitvoer het scherm naar beneden scrollen. Maak hier een nieuwe gewoonte van; je zult me later bedanken!

Gebruik de onderstaande code en vervang 'GEBRUIKERSNAAM' door een andere gebruikersnaam om specifieke resultaten te zien:

(Get-Acl -Path $dir).Access | Where-Object {$_.IdentityReference -like 'USERNAME'} | Format-Table -AutoSize

Hieronder staat een voorbeeld van hoe de resultaten eruit kunnen zien:

Sample output from the filtering

Het bovenstaande voorbeeld toont alle ACE’s waarvan de IdentityReference-eigenschap de gebruiker of beveiligingsgroep is die machtigingen heeft gekregen.

Ga verder en oefen met wat je tot nu toe hebt geleerd over Get-Acl. Onderzoek verschillende bestanden en mappen op je systeem. Dit zal je verschillende beveiligingsbeschrijvingen laten zien voor verschillende contexten. Dit zal ook helpen om wat spiergeheugen op te bouwen.

Latenn we de zaken wat intensiever maken en NTFS-machtigingen toewijzen.

NTFS-machtigingen aanpassen met Set-Acl

Nu je NTFS-machtigingen kunt bekijken, is het tijd om NTFS-machtigingen toe te wijzen en aan te passen met PowerShell. De cmdlet Set-Acl maakt dat mogelijk. De volgende secties zullen demonstreren hoe je deze cmdlet kunt gebruiken in combinatie met Get-Acl om NTFS-machtigingen te kopiëren, overerving te wijzigen en NTFS-machtigingen van een bestand of map te verwijderen.

NTFS-machtigingen kopiëren

Je kunt een bestand of map hebben met het juiste niveau van NTFS-machtigingen dat je nodig hebt voor een nieuwe ACL. Je kunt tijd besparen door machtigingen te kopiëren van het ene bestand of de ene map naar het andere.

Het kopiëren van bestaande ACL’s/ACE’s kan menselijke fouten verminderen bij het instellen van NTFS-machtigingen, mits de beveiligingsbeschrijving waarvan je kopieert correct en geschikt is voor de bestemming in de eerste plaats. Zoals het gezegde gaat: “Met grote kracht komt grote verantwoordelijkheid”. Houd dat in gedachten.

Overweeg de volgende schermafbeelding. Hier bekijkt u de ACL voor een bestand in C:\Share genaamd Client_List.txt. De ACL heeft het juiste niveau van NTFS-machtigingen dat u wilt:

Client list with appropriate NTFS permissions for Bill, the new employee.

Overweeg nu de volgende schermafbeelding. Deze keer bekijkt u de ACL voor een ander bestand in C:\Share genaamd Client_Projects.txt. Dit bestand heeft niet de gewenste NTFS-machtigingen:

Client Projects with no access for Bill.

U moet de NTFS-machtigingen van Client_List.txt naar Client_Projects.txt kopiëren. Hoe kunt u dit doen? U zult machtigingen aanpassen door de ACL van Client_List.txt te krijgen en vervolgens de Set-Acl cmdlet te gebruiken met de -AclObject parameter. Wanneer u de onderstaande code uitvoert, wordt de volledige ACL van Client_List.txt gekopieerd naar Client_Projects.txt :

# Kopieer Beveiligingsdescriptoren van Client_list.txt naar Client_Projects.txt
$Acl = Get-Acl -Path 'C:\Share\Client_list.txt'
Set-Acl -AclObject $Acl -Path 'C:\Share\Client_Projects.txt'

Zoals u kunt zien in de genummerde schermafbeelding hieronder, heeft het bestand Client_Projects.txt nu dezelfde beveiligingsdescriptoren als Client_list.txt.

  1. Krijg een bestaande ACL van een bestaand bestand.
  2. Stel de gekopieerde ACL-object in op het bestand of de map.
  3. Controleer of de ACL correct is gekopieerd naar het bestand of de map.
NTFS Permissions Copied

U ziet nu dat de ACL identiek is voor het bestand Client_Projects.txt als het bestand Client_List.txt in de kolom IdentityReference met AccessControlType ingesteld op Allow. U gebruikt dezelfde techniek ook voor het toewijzen van NTFS-machtigingen aan mappen.

Toevoegen van NTFS-machtigingen

In de laatste sectie heb je bestaande NTFS-machtigingen van het ene bestandobject naar het andere gekopieerd. Deze keer ga je NTFS-machtigingen vanaf nul maken. Dit stelt je in staat om NTFS-machtigingen toe te wijzen die zullen worden toegewezen aan een bestand of map.

Eerst, begin met het toewijzen van enkele variabelen om te gebruiken voor het maken van een nieuw object dat wordt gebruikt door Set-Acl. Op deze manier wordt het een beetje makkelijker wanneer het tijd is om de opdracht uit te voeren. De onderstaande code bouwt de eigenschappen van een ACE die de NTFS-machtigingen zullen worden die aan een bestand of map zijn toegewezen:

# Maak de ACE aan
$identity = 'domain\user'
$rights = 'FullControl' #Andere opties: [enum]::GetValues('System.Security.AccessControl.FileSystemRights')
$inheritance = 'ContainerInherit, ObjectInherit' #Andere opties: [enum]::GetValues('System.Security.AccessControl.Inheritance')
$propagation = 'None' #Andere opties: [enum]::GetValues('System.Security.AccessControl.PropagationFlags')
$type = 'Allow' #Andere opties: [enum]::GetValues('System.Securit y.AccessControl.AccessControlType')
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)

Vervolgens wijs je nog een variabele toe die de initiële ACL voor de map Assets zal ophalen. Gebruik vervolgens de methode AddAccessRule-lidtype met behulp van de variabele $ACE om een toegangsregel toe te voegen:

$Acl = Get-Acl -Path "$dir\Assets"
$Acl.AddAccessRule($ACE)

Je bent nu klaar om de zojuist aangemaakte ACE toe te voegen aan de ACL van C:\Share\Assets. Gebruik nu Set-Acl om deze nieuwe ACE toe te passen op de juiste map:

Set-Acl -Path "$dir\Assets" -AclObject $Acl

Controleer vervolgens met behulp van de onderstaande code of de door jou gekozen gebruiker de benodigde machtigingen heeft om de map te bekijken:

(Get-Acl -Path "$dir\Assets").Access | Format-Table -Autosize

Het verwijderen van NTFS-machtigingen

Er komt een moment waarop je NTFS-machtigingen moet verwijderen van een bron.

Om NTFS-machtigingen te verwijderen, begin je met het ophalen van de huidige ACL voor het bestand of de map. In dit voorbeeld is dat bestand Client_Projects.txt:

$Acl = Get-Acl -Path "$dir\Client_Projects.txt"

Filter nu voor de specifieke ACE die je wilt verwijderen. Doe dit door de $Acl-lidobjecten aan te roepen en die resultaten door te sturen naar Where-Object en een paar operanden:

$Ace = $Acl.Access | Where-Object {($_.IdentityReference -eq 'domain\user') -and -not ($_.IsInherited)}

Gebruik vervolgens de $Acl-variabele die de huidige ACL-beveiligingsbeschrijvingen bevat, roep de methode RemoveAccessRule aan en geef het ACE-object door dat hierboven is gemaakt met behulp van de New-Object-cmdlet aan de RemoveAccessRule()-methode. Dit zal de invoer verwijderen:

$Acl.RemoveAccessRule($Ace)

Het is belangrijk om te onthouden dat je hier een bestaande ACL hebt gewijzigd en de wijzigingen nog niet hebt toegepast.

Om deze wijzigingen door te voeren, voer je de Set-Acl-cmdlet uit, waarbij je de parameters -Path en -AclObject voorziet van de juiste waarden van "$dir\Client_Projects.txt" en $Acl. Zodra je de onderstaande opdracht hebt ingevoerd, druk je op Enter:

Set-Acl -Path "$dir\Client_Projects.txt" -AclObject $Acl

Beheer en rapporteer over Active Directory, Exchange en Microsoft 365 met ManageEngine ADManager Plus. Download de gratis proefversie!

Samenvatting

In dit artikel heb je geleerd over het beheren van NTFS-machtigingen met PowerShell. Je hebt geleerd over de twee cmdlets, Get-Acl en Set-Acl, en wat ze doen met NTFS-machtigingen.

Je hebt ook geleerd hoe je filters kunt gebruiken om een specifieke ACE in een ACL te targeten voor gebruik in de bovenstaande cmdlets. Met een beetje oefening zul je meer NTFS-machtigingsverzoeken dan ooit tevoren gemakkelijk beheren.

Verder Lezen

Source:
https://adamtheautomator.com/ntfs-permissions/