NTFS-Berechtigungen mit PowerShell verwalten: Ein Tutorial

Wenn Sie ein IT-Experte sind und Schwierigkeiten haben, die Dateisystemberechtigungen für Ihre Organisationen festzulegen, haben Sie Glück. Die Verwaltung von NTFS-Berechtigungen mit einer grafischen Benutzeroberfläche ist zeitaufwändig, insbesondere wenn Sie mit vielen Benutzern oder Gruppen arbeiten. Glücklicherweise haben wir PowerShell, um alles besser zu machen. Wie? Das Microsoft.PowerShell.Security Modul.

PowerShell verfügt über zwei Cmdlets, die speziell für die Arbeit mit ACLs entwickelt wurden: Get-ACL und Set-ACL. Mit diesen beiden Cmdlets können Sie beliebig viele NTFS-Berechtigungen abrufen und zuweisen, worüber Sie in diesem Tutorial alles erfahren werden. Wenn Sie effizienter werden und sofort nützlich bei der Verwaltung von NTFS-Berechtigungen sein möchten, lesen Sie weiter.

Keine Zeit zum Lesen? Kein Problem! Schauen Sie sich das Begleitvideo von TechSnips.io’s Anthony Howell unten an:

Verwalten und Berichten Sie über Active Directory, Exchange und Microsoft 365 mit ManageEngine ADManager Plus. Laden Sie die kostenlose Testversion herunter!

Voraussetzungen

Um den Beispielen in diesem Tutorial folgen zu können, benötigen Sie:

Erstellen von Dateien/Ordnern zum Testen

Dieses Tutorial wird um ein einfaches „Labor“ oder einen einzelnen Ordner herum aufgebaut sein. Sie lernen, wie Sie mit NTFS-Berechtigungen in PowerShell von Grund auf arbeiten können; es ist keine zusätzliche Arbeit Ihrerseits erforderlich.

  1. Um zu beginnen, öffnen Sie eine PowerShell-Sitzung als Administrator.
  2. Erstellen Sie einen leeren Ordner namens Freigabe irgendwo auf Ihrem Dateisystem. In den folgenden Beispielen nehmen wir an, dass sich dieser Ordner unter C:\Freigabe befindet. Dadurch werden die Beispiele kürzer und leichter verständlich. Sie können dieses Verzeichnis erstellen, indem Sie den folgenden Code kopieren:
New-Item -ItemType Directory -Path 'C:\Share'

3. Erstellen Sie einen Ordner namens C:\Freigabe\Assets.

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

4. Erstellen Sie eine Datei namens client_list.txt im Ordner C:\Freigabe.

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

5. Erstellen Sie eine Datei namens client_projects.txt im Ordner C:\Freigabe.

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

6. Weisen Sie anschließend eine Variable für den Pfad des Ordners Freigabe zu. Das Erstellen von Variablen reduziert die Eingabe und erleichtert die Wiederverwendung des Pfads. Nehmen wir an, Sie verwenden C:\Freigabe, kopieren Sie das folgende Codebeispiel in Ihre PowerShell-Sitzung:

$dir = 'C:\Share'

7. Drücken Sie die Eingabetaste. Sie haben nun ein leeres Verzeichnis und den Pfad als Variable gespeichert.

NTFS-Berechtigungen mit Get-Acl anzeigen

In PowerShell können Sie NTFS-Berechtigungen schnell mit dem Befehl Get-Acl anzeigen. In den folgenden Abschnitten lernen Sie, wie Sie den Befehl verwenden, um NTFS-Berechtigungen für eine Datei oder einen Ordner anzuzeigen.

Eine Zugriffssteuerungsliste (ACL ist eine Liste von Zugriffssteuereinträgen (ACE). Jeder ACE in einer ACL identifiziert einen Treuhänder und gibt die erlaubten, verweigerten oder überwachten Zugriffsrechte an. Der Sicherheitsdeskriptor für ein sicherbares Objekt kann zwei Arten von ACLs enthalten: eine DACL und eine SACL.

Anzeige von NTFS-Berechtigungen

Traditionell würden Sie eine ACL anzeigen, indem Sie mit der rechten Maustaste auf den Ordner C:\Freigabe klicken, auf Eigenschaften klicken, den Reiter Sicherheit auswählen und auf die Schaltfläche Erweitert klicken. Ein Beispiel dafür, wie die GUI Berechtigungen anzeigt, können Sie unten sehen.

Access Control List using Advanced Security Settings for Share

Das obige Beispiel enthält einige nummerierte Berechtigungseinträge und Eigenschaften. Untersuchen Sie sie genau, da Sie später in diesem Abschnitt einen Vergleich sehen werden.

Verwenden Sie das zuvor erstellte Verzeichnis und zeigen Sie die aktuellen NTFS-Berechtigungen für das Verzeichnis mit Get-Acl an.

Get-Acl -Path $dir

Sie sollten nun den Pfad, den Besitzer und die Zugriffsebene-Details in dem folgenden Screenshot sehen.

Access Control List

Die oben angezeigte Access-Eigenschaft enthält weitere Informationen zu den ACLs, aber sie scrollt über den Bildschirm hinaus, wie durch die drei Punkte am Ende von FullControl angezeigt. Es gibt eine bessere Möglichkeit, diese Eigenschaft anzuzeigen, indem der vorherige Befehl in runden Klammern eingeschlossen wird, um die Access Objekteigenschaften anzuzeigen. Suchen Sie nur nach der Access-Eigenschaft auf diesem Objekt, indem Sie den folgenden Code ausführen.

(Get-Acl -Path $dir).Access

Der obige Befehl kann auch mit dem Access-Objekt und dem -ExpandProperties-Parameter ausgedrückt werden: Get-Acl -Path $dir | Select-Object -ExpandProperty Access

Wie im folgenden Screenshot dargestellt, ist die Ausgabe umgebrochen, um die einzelnen Access-Eigenschaften besser erkennen zu können:

Access Control Entities

Wenn Sie die Zugriffseigenschaften auf diese Weise anzeigen, kann die Terminalausgabe schnell über den Bildschirm scrollen, wenn Sie viele Zugriffskontrollelemente (ACE) haben. Jedes Element enthält die FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags und PropagationFlags Eigenschaften. Um dies etwas lesbarer zu gestalten, leiten Sie die Objekte an Format-Table -AutoSize. Führen Sie den folgenden Befehl aus.

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

Wie Sie im untenstehenden Screenshot sehen können, sind die Zugriffseigenschaften sauberer und besser organisiert, wenn Sie Format-Table -AutoSize verwenden:

Cleaner output when piping to Format-Table

Untersuchen Sie die Eigenschaften und die Spaltennummer. Beachten Sie, dass es sich um dieselben Eigenschaften handelt, die Sie zu Beginn des Tutorials in der GUI gesehen haben.

Access Control List using Advanced Security Settings for Share

Filtern von Zugriffsobjekten

Es gibt Zeiten, in denen Sie genauer bestimmen möchten, wenn Sie NTFS-Berechtigungen herausfinden. Sie können dies tun, indem Sie nach einem bestimmten ACE filtern oder nach bestimmten Ergebnissen suchen, die vererbte oder explizite NTFS-Berechtigungen in einer ACL mit PowerShell haben. Anstatt das Terminalfenster zeilenweise zu scrollen, können Sie das Where-Object-Cmdlet verwenden, um eine Filterung durchzuführen.

Das folgende Codebeispiel filtert nach Objekten, die keine NTFS-Berechtigungen erben. Dies geschieht durch Verwendung von Where-Object mit dem -Not-Operanden, der das aktuelle Objekt in der Pipeline $_. auf das Eigenschaftsobjekt IsInherited untersucht, das angibt, ob der ACE das Ergebnis der Vererbung ist und nicht explizit festgelegt wurde:

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

Vergessen Sie nicht, Objekte an Format-Table -AutoSize weiterzuleiten, sonst scrollt die Ausgabe über den Bildschirm. Machen Sie das zu einer neuen Gewohnheit; Sie werden mir später dafür danken!

Verwenden Sie den folgenden Code und ersetzen Sie 'BENUTZERNAME' durch einen anderen Benutzernamen, um spezifische Ergebnisse zu sehen:

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

Im Folgenden sehen Sie ein Beispiel, wie die Ergebnisse aussehen könnten:

Sample output from the filtering

Das obige Beispiel zeigt alle ACEs, bei denen die Eigenschaft IdentityReference dem Benutzer oder der Sicherheitsgruppe Berechtigungen zugewiesen hat.

Gehen Sie weiter und üben Sie das, was Sie bisher über Get-Acl gelernt haben. Untersuchen Sie verschiedene Dateien und Ordner auf Ihrem System. Dadurch sehen Sie viele verschiedene Sicherheitsdeskriptoren für verschiedene Kontexte. Dadurch können Sie auch etwas Muskelgedächtnis aufbauen.

Lassen Sie uns einen Schritt weiter gehen und NTFS-Berechtigungen zuweisen.

Ändern von NTFS-Berechtigungen mit Set-Acl

Jetzt, da Sie NTFS-Berechtigungen anzeigen können, ist es an der Zeit, NTFS-Berechtigungen mit PowerShell zuzuweisen und zu ändern. Der Befehl Set-Acl macht dies möglich. Die folgenden Abschnitte zeigen, wie Sie diesen Befehl in Verbindung mit Get-Acl verwenden können, um NTFS-Berechtigungen von einer Datei oder einem Ordner zu kopieren, Vererbung zu ändern und NTFS-Berechtigungen zu entfernen.

Kopieren von NTFS-Berechtigungen

Sie haben möglicherweise eine Datei oder einen Ordner, der die erforderliche Ebene der NTFS-Berechtigungen enthält, die Sie für eine neue ACL verwenden möchten. Sie können Zeit sparen, indem Sie Berechtigungen von einer Datei oder einem Ordner auf eine andere kopieren.

Das Kopieren vorhandener ACLs/ACEs kann menschliche Fehler bei der Einrichtung von NTFS-Berechtigungen reduzieren, vorausgesetzt, der Sicherheitsdeskriptor, von dem Sie kopieren, ist korrekt und für das Ziel in erster Linie geeignet. Wie es so schön heißt: „Mit großer Macht kommt große Verantwortung.“. Behalten Sie das im Hinterkopf.

Betrachten Sie den folgenden Screenshot. Hier sehen Sie sich die ACL für eine Datei in C:\Share mit dem Namen „Client_List.txt“ an. Die ACL hat die gewünschten NTFS-Berechtigungen:

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

Nun betrachten Sie den nächsten Screenshot. Dieses Mal sehen Sie sich die ACL für eine andere Datei in C:\Share mit dem Namen „Client_Projects.txt“ an. Diese Datei hat nicht die gewünschten NTFS-Berechtigungen:

Client Projects with no access for Bill.

Sie müssen die NTFS-Berechtigungen von „Client_List.txt“ auf „Client_Projects.txt“ kopieren. Wie können Sie das tun? Sie werden die Berechtigungen ändern, indem Sie die ACL von „Client_List.txt“ abrufen und dann das Cmdlet „Set-Acl“ mit dem Parameter „-AclObject“ verwenden. Wenn Sie den folgenden Code ausführen, wird die gesamte ACL von „Client_List.txt“ auf „Client_Projects.txt“ kopiert:

# Kopieren der Sicherheitsdeskriptoren von Client_List.txt nach Client_Projects.txt
$Acl = Get-Acl -Path 'C:\Share\Client_list.txt'
Set-Acl -AclObject $Acl -Path 'C:\Share\Client_Projects.txt'

Wie Sie im nummerierten Screenshot unten sehen können, hat die Datei „Client_Projects.txt“ jetzt die gleichen Sicherheitsdeskriptoren wie „Client_List.txt“.

  1. Erhalten Sie eine vorhandene ACL von einer vorhandenen Datei.
  2. Weisen Sie die kopierte ACL-Objekt der Datei oder dem Ordner zu.
  3. Überprüfen Sie, ob die ACL korrekt auf die Datei oder den Ordner kopiert wurde.
NTFS Permissions Copied

Sie sehen nun, dass die ACL für die Datei „Client_Projects.txt“ identisch ist mit der Datei „Client_List.txt“ in der Spalte „IdentityReference“ mit „AccessControlType“ auf „Allow“ gesetzt. Sie verwenden die gleiche Technik auch zum Zuweisen von NTFS-Berechtigungen für Ordner.

Hinzufügen von NTFS-Berechtigungen

Im letzten Abschnitt haben Sie bestehende NTFS-Berechtigungen von einem Dateiobjekt auf ein anderes kopiert. Dieses Mal werden Sie NTFS-Berechtigungen von Grund auf erstellen. Dadurch können Sie NTFS-Berechtigungen zuweisen, die einer Datei oder einem Ordner zugewiesen werden.

Beginnen Sie zunächst damit, einigen Variablen zuzuweisen, die zur Erstellung eines neuen Objekts verwendet werden, das von Set-Acl verwendet wird. Auf diese Weise wird es etwas einfacher, wenn es an der Zeit ist, den Befehl auszuführen. Der folgende Code erstellt die Eigenschaften einer ACE, die zu den NTFS-Berechtigungen werden, die einer Datei oder einem Ordner zugewiesen werden:

# Erstellen Sie die ACE
$identity = 'domain\user'
$rights = 'FullControl' #Andere Optionen: [enum]::GetValues('System.Security.AccessControl.FileSystemRights')
$inheritance = 'ContainerInherit, ObjectInherit' #Andere Optionen: [enum]::GetValues('System.Security.AccessControl.Inheritance')
$propagation = 'None' #Andere Optionen: [enum]::GetValues('System.Security.AccessControl.PropagationFlags')
$type = 'Allow' #Andere Optionen: [enum]::GetValues('System.Security.AccessControl.AccessControlType')
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)

Weisen Sie als nächstes eine weitere Variable zu, die die ursprüngliche ACL für den Ordner Assets erhält. Verwenden Sie dann den Member-Typ AddAccessRule der Methode, um eine Zugriffsregel unter Verwendung der Variable $ACE hinzuzufügen:

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

Jetzt können Sie die neu erstellte ACE der ACL von C:\Share\Assets hinzufügen. Verwenden Sie nun Set-Acl, um diese neue ACE auf das richtige Verzeichnis anzuwenden:

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

Überprüfen Sie anschließend mit dem folgenden Code, ob der von Ihnen gewählte Benutzer die Berechtigungen zum Anzeigen des benötigten Verzeichnisses hat:

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

Entfernen von NTFS-Berechtigungen

Es wird eine Zeit kommen, in der Sie NTFS-Berechtigungen von einer Ressource entfernen müssen.

Um NTFS-Berechtigungen zu entfernen, beginnen Sie damit, die aktuelle ACL für die Datei oder den Ordner abzurufen. In diesem Beispiel ist diese Datei Client_Projects.txt:

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

Filtern Sie nun nach dem spezifischen ACE, den Sie entfernen möchten. Sie tun dies, indem Sie die $Acl-Memberobjekte aufrufen und diese Ergebnisse an Where-Object und einige Operanden weiterleiten:

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

Verwenden Sie anschließend die Variable $Acl, die die aktuellen ACL-Sicherheitsdeskriptoren enthält. Rufen Sie die Methode RemoveAccessRule auf und übergeben Sie das oben erstellte ACE-Objekt, das mit dem New-Object-Cmdlet an die Methode RemoveAccessRule() übergeben wird. Dadurch wird der Eintrag entfernt:

$Acl.RemoveAccessRule($Ace)

Es ist wichtig zu beachten, dass Sie hier eine vorhandene ACL geändert haben und die Änderungen noch nicht übernommen haben.

Um diese Änderungen zu übernehmen, führen Sie das Cmdlet Set-Acl aus und geben Sie die Parameter -Path und -AclObject mit den entsprechenden Werten von "$dir\Client_Projects.txt" und $Acl an. Sobald Sie den folgenden Befehl eingegeben haben, drücken Sie Enter:

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

Verwalten und Berichten Sie über Active Directory, Exchange und Microsoft 365 mit ManageEngine ADManager Plus. Laden Sie die kostenlose Testversion herunter!

Zusammenfassung

In diesem Artikel haben Sie gelernt, wie man NTFS-Berechtigungen mit PowerShell verwalten kann. Sie haben die beiden Cmdlets Get-Acl und Set-Acl kennengelernt und was sie mit NTFS-Berechtigungen machen.

Sie haben auch gelernt, wie Sie Filter verwenden können, um eine bestimmte ACE in einer ACL für die Verwendung in den oben genannten Cmdlets anzusprechen. Mit etwas Übung werden Sie mehr NTFS-Berechtigungsanfragen als je zuvor problemlos verwalten können.

Weiterführende Informationen

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