Verwalten von Dateisystem-ACLs mit PowerShell-Skripts

Viele Unternehmen mit Microsoft Windows-Umgebungen nutzen NTFS als zentrales Dateisystem für ihre Speichergeräte, auf denen sensible Daten vorgehalten werden. Für die Benutzer stellt dies die einfachste Methode für die Arbeit mit Dateien dar. Um ein Modell der geringsten Rechte und damit Best Practices für die Systemsicherheit umzusetzen, konfigurieren IT-Sicherheitsexperten und Systemadministratoren NTFS-Zugriffssteuerungslisten (Access Control Lists, ACLs), indem sie Zugriffssteuerungseinträge auf NTFS-Dateiservern hinzufügen.

Die Themen dieses Artikels:

NTFS-Berechtigungstypen für Dateien und Ordner

Es gibt grundlegende und erweiterte NTFS-Berechtigungen. Bei allen Berechtigungen können Sie zwischen „Zulassen“ und „Verweigern“ wählen. Diese grundlegenden Berechtigungen sind verfügbar:

  • Vollzugriff: Benutzer können Dateien und Verzeichnisse sowie deren Eigenschaften ändern, hinzufügen, verschieben und löschen. Sie können außerdem die Berechtigungseinstellungen für alle Dateien und Unterverzeichnisse ändern.
  • Ändern: Benutzer können Dateien und Dateieigenschaften anzeigen und ändern, unter anderem auch Dateien zu einem Verzeichnis oder Dateieigenschaften zu einer Datei hinzufügen bzw. daraus löschen.
  • Lesen, Ausführen: Benutzer können ausführbare Dateien ausführen, unter anderem auch Skripts.
  • Lesen: Benutzer können Dateien, Dateieigenschaften und Verzeichnisse anzeigen.
  • Schreiben: Benutzer können in eine Datei schreiben und Dateien zu Verzeichnissen hinzufügen.

Im Folgenden sind die erweiterten Berechtigungen aufgeführt:

  • Ordner durchsuchen/Datei ausführen: Benutzer können durch Ordner navigieren, um auf Dateien oder andere Ordner zuzugreifen, selbst wenn sie keine Berechtigungen für diese Dateien oder Ordner besitzen. Sie können außerdem ausführbare Dateien ausführen. Die Berechtigung „Ordner durchsuchen“ wird nur wirksam, wenn der Gruppe bzw. dem Benutzer nicht im Gruppenrichtlinien-Snap-In das Recht „Auslassen der durchsuchenden Überprüfung“ zugewiesen wurde.
  • Ordner auflisten/Daten lesen: Benutzer können eine Liste aller Dateien und Unterordner im Ordner sowie den Inhalt der Dateien anzeigen.
  • Attribute lesen: Benutzer können die Attribute einer Datei oder eines Ordners anzeigen, beispielsweise ob die Datei bzw. der Ordner schreibgeschützt oder ausgeblendet ist.
  • Attribute schreiben: Benutzer können die Attribute einer Datei oder eines Ordners ändern.
  • Erweiterte Attribute lesen: Benutzer können die erweiterten Attribute einer Datei oder eines Ordners anzeigen, beispielsweise Berechtigungen und den Zeitpunkt der Erstellung bzw. Änderung.
  • Erweiterte Attribute schreiben: Benutzer können die erweiterten Attribute einer Datei oder eines Ordners ändern.
  • Dateien erstellen/Daten schreiben: Mit der Berechtigung „Dateien erstellen“ können Benutzer Dateien im Ordner erstellen. (Diese Berechtigung gilt nur für Ordner.) Mit der Berechtigung „Daten schreiben“ können Benutzer Änderungen an der Datei vornehmen und vorhandene Inhalte überschreiben. (Diese Berechtigung gilt nur für Dateien.)
  • Ordner erstellen/Daten anhängen: Mit der Berechtigung „Ordner erstellen“ können Benutzer Ordner in einem Ordner erstellen. (Diese Berechtigung gilt nur für Ordner.) Mit der Berechtigung „Daten anhängen“ können Benutzer Änderungen an das Ende der Datei anfügen, die vorhandenen Daten jedoch nicht ändern, löschen oder überschreiben. (Diese Berechtigung gilt nur für Dateien.)
  • Löschen: Benutzer können die Datei oder den Ordner löschen. (Wenn Benutzer nicht über die Berechtigung „Löschen“ für eine Datei oder einen Ordner verfügen, können sie dennoch eine Löschung durchführen, wenn ihnen die Berechtigung „Unterordner und Dateien löschen“ für den übergeordneten Ordner zugewiesen wurde.)
  • Berechtigungen lesen: Benutzer können die Berechtigungen für eine Datei oder einen Ordner lesen (z. B. „Vollzugriff“, „Lesen“ und „Schreiben“).
  • Berechtigungen ändern: Benutzer können die Berechtigungen für eine Datei oder einen Ordner ändern.
  • Besitz übernehmen: Benutzer können den Besitz der Datei oder des Ordners übernehmen. Der Besitzer einer Datei oder eines Ordners kann jederzeit die Berechtigungen für die Datei bzw. den Ordner ändern, unabhängig davon, ob bereits Berechtigungen zum Schutz der Datei oder des Ordners festgelegt wurden.
  • Synchronisieren: Benutzer können das Objekt für die Synchronisierung verwenden. Dadurch kann ein Thread warten, bis sich das Objekt in einem signalisierten Zustand befindet. Diese Berechtigung wird nicht im ACL-Editor angezeigt. Weitere Informationen dazu finden Sie hier.

Die oben aufgeführten Benutzerberechtigungen können Sie mit folgendem PowerShell-Skript anzeigen:

[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])

NTFS-Berechtigungen können explizit zugewiesen oder vererbt sein. Explizite Berechtigungen sind Berechtigungen, die individuell konfiguriert werden, während vererbte Berechtigungen vom übergeordneten Ordner übernommen werden. Bei Berechtigungen gibt es folgende Hierarchie:

  • Explizite Verweigerung
  • Explizite Zulassung
  • Geerbte Verweigerung
  • Geerbte Zulassung

Nach dieser Einführung in die verschiedenen NTFS-Berechtigungen lernen Sie nun, wie Sie diese verwalten.

Abrufen der ACL für Dateien und Ordner

Das erste PowerShell-Cmdlet für die Verwaltung von Datei- und Ordnerberechtigungen ist „get-acl“. Damit werden alle Objektberechtigungen abgerufen. Sie möchten beispielsweise die Liste aller Berechtigungen für den Ordner mit dem Objektpfad „\\fs1\shared\sales“ anzeigen:

get-acl \\fs1\shared\sales | fl

Wenn Sie mit PowerShell einen ausführlichen Bericht zu den NTFS-Berechtigungen erstellen möchten, finden Sie hier eine einfache Anleitung zum Export der NTFS-Berechtigungen in eine CSV-Datei.

Kopieren von Datei- und Ordnerberechtigungen

Um Berechtigungen zu kopieren, muss ein Benutzer Besitzer sowohl des Quellordners als auch des Zielordners sein. Mit dem folgenden Befehl kopieren Sie die Berechtigungen aus dem Ordner „Accounting“ in den Ordner „Sales“:

get-acl \\fs1\shared\accounting | Set-Acl \\fs1\shared\sales

Wie Sie anhand der Ausgabe des Befehls „get-acl“ vor und nach dem Kopieren der Berechtigungen sehen können, wurden die Berechtigungen für den freigegebenen Ordner „Sales“ geändert.

Festlegen von Datei- und Ordnerberechtigungen

Mit dem PowerShell-Cmdlet „set-acl“ wird die Sicherheitsbeschreibung eines bestimmten Elements (z. B. einer Datei, eines Ordners oder eines Registrierungsschlüssels) geändert. Mit anderen Worten: Das Cmdlet ermöglicht das Ändern von Datei- oder Ordnerberechtigungen. Das folgende Skript setzt die Berechtigung „FullControl“ (Vollzugriff) des Benutzers „ENTERPRISE\T.Simpson“ für den Ordner „Sales“ auf „Allow“ (Zulassen):

$acl = Get-Acl \\fs1\shared\sales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\T.Simpson","FullControl","Allow")

$acl.SetAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\sales

Wenn Sie weitere Berechtigungen für Benutzer oder Sicherheitsgruppen festlegen möchten, wählen Sie diese aus der Tabelle unten:

Sie können auch Berechtigungen anwenden, die aus mehreren grundlegenden Zugriffsrechten bestehen:

Löschen von Benutzerberechtigungen

Um eine Berechtigung zu löschen, verwenden Sie den Parameter „RemoveAccessRule“. Sie löschen nun die Berechtigung „Allow FullControl“ (Vollzugriff zulassen) des Benutzers T.Simpson für den Ordner „Sales“:

$acl = Get-Acl \\fs1\shared\sales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\T.Simpson","FullControl","Allow")

$acl.RemoveAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\sales

Beachten Sie, dass T.Simpson nach wie vor über die Berechtigung „Deny FullControl“ (Vollzugriff verweigern) verfügt. Um diese Berechtigung zu löschen, verwenden Sie den Befehl „PurgeAccessRules“, mit dem alle Berechtigungen von T.Simpson für den Ordner „Sales“ aufgehoben werden:

$acl = Get-Acl \\fs1\shared\sales

$usersid = New-Object System.Security.Principal.Ntaccount ("ENTERPRISE\T.Simpson")

$acl.PurgeAccessRules($usersid)

$acl | Set-Acl \\fs1\shared\sales

Sie werden feststellen, dass „PurgeAccessRules“ nicht für Benutzernamen funktioniert, die aus einer Zeichenfolge bestehen. Sie müssen die SID verwenden. Wir haben deshalb mithilfe der Klasse „Ntaccount“ den Namen des Benutzerkontos von einer Zeichenfolge in eine SID umgewandelt. Beachten Sie außerdem, dass „PurgeAccessRules“ nur mit expliziten Berechtigungen funktioniert und damit keine geerbten Berechtigungen gelöscht werden können.

Aktivieren oder Deaktivieren der Vererbung von Berechtigungen

Zur Verwaltung der Vererbung verwenden Sie die Methode „SetAccessRuleProtection“. Für diese Methode gibt es zwei Parameter:

  • Mit dem ersten Parameter wird die Vererbung vom übergeordneten Ordner gesperrt. Es gibt zwei Zustände: „$True“ und „$false“.
  • Der zweite Parameter bestimmt, ob die derzeit geerbten Berechtigungen beibehalten oder gelöscht werden sollen. Die Zustände sind dieselben: „$True“ und „$false“.

Deaktivieren Sie nun die Vererbung für den Ordner „Sales“ und löschen Sie auch alle vererbten Berechtigungen:

$acl = Get-Acl \\fs1\shared\sales

$acl.SetAccessRuleProtection($true,$false)

$acl | Set-Acl \\fs1\shared\sales

Nun ist nur noch eine Zugriffsberechtigung übrig (da diese explizit hinzugefügt wurde); alle vererbten Berechtigungen wurden gelöscht.
Machen Sie diese Änderung rückgängig und aktivieren Sie die Vererbung für den Ordner „Sales“ wieder:

$acl = Get-Acl \\fs1\shared\sales

$acl.SetAccessRuleProtection($false,$true)

$acl | Set-Acl \\fs1\shared\sales

Ändern des Datei- und Ordnerbesitzes

Wenn Sie einen Besitzer für einen Ordner festlegen möchten, müssen Sie die Methode „SetOwner“ ausführen. Legen Sie „ENTERPRISE\J.Carter“ als Besitzer des Ordners „Sales“ fest:

$acl = Get-Acl \\fs1\shared\sales

$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISE\J.Carter")

$acl.SetOwner($object)

$acl | Set-Acl \\fs1\shared\sales

Beachten Sie, dass auch hier der Name des Benutzerkontos mithilfe der Klasse „Ntaccount“ von einer Zeichenfolge in eine SID umgewandelt wurde.
Mit der Methode „SetOwner“ können Sie als Besitzer nicht ein beliebiges Konto festlegen; das Konto muss über die Rechte „Besitz übernehmen“, „Lesen“ und „Berechtigungen ändern“ verfügen.

Wie Sie sehen konnten, ist die Verwaltung von NTFS-Berechtigungen mit PowerShell ein Kinderspiel. Denken Sie jedoch stets daran, Ihre NTFS-Berechtigungen auch zu überwachen. Für die Sicherheit Ihrer Umgebung ist es entscheidend, alle Änderungen an Ihren Dateiservern zu überwachen, um Datenlecks zu vermeiden sowie Insider-Bedrohungen und andere IT-Sicherheitsrisiken abzuwehren. Hier finden Sie einen Leitfaden zur Überwachung der NTFS-Berechtigungen mit PowerShell.

Tutorial zur Skripterstellung  mit Windows PowerShell für Einsteiger 14