olly - stock.adobe.com
Wie Sie mit PowerShell den Zugriff für Dateiserver prüfen
Mithilfe von PowerShell finden Sie Ursachen, warum Nutzer von Dateiservern ausgesperrt werden. Eine Möglichkeit sind unautorisierte Änderungen an Dateifreigaben.
Wenn Sie den Schuldigen hinter einem Windows-Dateiserver-Berechtigungsproblem finden müssen, können Sie PowerShell als Ihren Detektiv einsetzen, um den Fall zu lösen.
Wenn viele Benutzer plötzlich den Zugriff auf Ordner in einer Dateifreigabe verlieren, handelt es sich in der Regel um ein Problem mit Windows-Dateiserver-Berechtigungen. Es kann jedoch einige Arbeit erfordern, um herauszufinden, wer die nicht autorisierte Änderung vorgenommen hat. Die manuelle Überprüfung eines gesamten Dateiservers mit vielen Dateien und Ordnern kann eine mühsame Aufgabe sein. Mit PowerShell können Sie mithilfe der Automatisierung einen Prüfbericht erstellen, um Ordner mit Rechteproblemen aufzuspüren, die Sie dann beheben können.
Wie Berechtigungen auf einem Windows-Dateiserver funktionieren
Es gibt zwar mehrere Dateisysteme für Windows-Systeme, aber das New Technology File System (NTFS) ist heute das am häufigsten verwendete.
Zu den Merkmalen von NTFS gehört die Möglichkeit, den Zugriff mit Hilfe von Zugriffskontrolllisten (ACLs) einzuschränken, die jeden Zugriffskontrolleintrag (ACE) katalogisieren, der Informationen über das Benutzer- oder Gruppenkonto und dessen Zugriffsrechte auf ein Objekt, wie zum Beispiel eine Datei oder einen Ordner, enthält. In der Dokumentation von Microsoft werden Windows ACLs und NTFS-Berechtigungen häufig synonym verwendet.
Basierend auf den Anforderungen des Unternehmens passt der Administrator die NTFS-Berechtigungen an, um die Zugriffsebene auf einen Ordner zu steuern, von vollen Kontrollrechten bis hin zu keinem Zugriff. Es kann zu Problemen kommen, wenn ein Benutzer mit einer höheren Zugriffsstufe, zum Beispiel ein leitender Angestellter, die Windows-Server-Ordnerberechtigungen so ändert, dass Benutzer mit einer niedrigeren Zugriffsstufe nicht mehr auf ihre Dateien in diesem Ordner oder einem darunter liegenden Unterordner zugreifen können.
Bevor wir uns damit befassen, wie man eine Windows-Dateiserver-Berechtigungsprüfung erstellt, sollten Sie die beiden Methoden zum Abrufen von Zugriffsinformationen aus einem Ordner verstehen. Dieser Artikel konzentriert sich auf PowerShell 7; sofern nicht anders angegeben, funktionieren die Befehle jedoch in Windows PowerShell genauso.
Auch wenn wir PowerShell 7 verwenden, das plattformübergreifend ist, ist das Cmdlet Get-ACL nur unter Windows verfügbar.
Suche von Windows-Dateiserver-Berechtigungen mit dem Cmdlet Get-ACL
Das integrierte Cmdlet Get-ACL ruft die Sicherheitsbeschreibung ab, die in dem Objekt gespeichert ist, das in diesem Fall der Ordner auf der Windows-Dateifreigabe ist. Die Sicherheitsbeschreibung enthält Informationen wie den Objektbesitzer und ACLs, die die Benutzer und Gruppen anzeigen, die auf den Ordner zugreifen können. Mit dem folgenden Befehl werden die Ordnerberechtigungen angezeigt:
Get-Acl .\Marketing\
Die Ausgabe erhält den Ordnerpfad, den Eigentümer des Ordners und die Ordnerzugriffsliste.
Für zusätzliche Details, wie zum Beispiel die gesamte Zugriffsliste, fügen Sie dem Befehl die Eigenschaft Access hinzu:
(Get-Acl .\Marketing\).Access
Das Cmdlet zeigt an, dass alle Ordnerberechtigungen explizit sind. Die Eigenschaft IsInherited gibt an, dass die Berechtigungen nicht vom übergeordneten Ordner geerbt werden. Die Ausgabe zeigt auch, dass die Administratoren mit Zugriff auf diese Freigabe das richtige Protokoll befolgt haben, indem sie Benutzer zu Gruppen und nicht direkt zum Ordner hinzugefügt haben.
Ermittlung von Windows-Dateiserver-Berechtigungen mit dem Cmdlet Get-NTFS-Access
Die andere Methode zur Überprüfung der Ordner-ACLs ist das Cmdlet Get-NTFSAccess im NTFSSecurity-Modul. Dieses Cmdlet hat eine ähnliche Syntax wie Get-Acl:
Get-NTFSAccess .\Marketing\
Dieses Cmdlet erzeugt eine Ausgabe, die bei der Bewertung von NTFS-Berechtigungen einfacher zu verstehen ist.
Die Tabelle zeigt das Attribut IsInherited, das Ordner mit Berechtigung identifiziert, die sich vom übergeordneten Ordner unterscheiden.
Das beste Merkmal von Get-NTFSAccess ist, dass es die gesamte Dateifreigabe mit einer Zeile PowerShell prüft. Sie benötigen nur ein paar zusätzliche Codezeilen, um daraus einen vorzeigbaren Bericht zu erstellen.
Lassen Sie uns zunächst durchgehen, wie Sie die Ordnerberechtigungen mit Get-ChildItem rekursiv abrufen, um alle Ordner zu finden, und dann die Aufgabe über die Pipeline an Get-NTFSAccess weiterleiten:
Get-ChildItem -Directory -Recurse | Get-NTFSAccess
Bei einer großen Dateifreigabe kann es eine ganze Weile dauern, die Konsolenausgabe zu erzeugen. Bereiten Sie sich darauf vor, den Vorgang mit STRG+C abzubrechen oder testen Sie ihn zunächst in einem kleineren Ordner, um sicherzustellen, dass er wie erwartet funktioniert.
Der Screenshot zeigt die ersten Zeilen aus der Testumgebung. Die Berechtigungen für die Unterordner von Events werden alle vererbt und das Attribut InheritedFrom verweist auf den Stammordner Marketing. Damit werden jedoch keine Berechtigungen gefunden, die nicht vererbt werden. Verwenden Sie hierfür das Cmdlet Where-Object und suchen Sie mit dem Ausrufezeichen, dem Not Operator, nach Berechtigungen, die nicht vererbt werden:
Get-ChildItem -Directory -Recurse | Get-NTFSAccess | Where-Object {!($_.IsInherited)}
Die Ausführung dieses Befehls kann ebenfalls viel Zeit in Anspruch nehmen, also stellen Sie sich darauf ein, dass Sie warten müssen, wenn Sie ihn für einen Ordner mit vielen Dateien ausführen. In der Testumgebung hat nur ein Ordner andere Berechtigungen als der Stammordner.
Die Ausgabe zeigt, dass ein Benutzer namens John Doe über Berechtigungen für den Ordner Files verfügt und dass die anderen vererbten Berechtigungen weiterhin aktiviert sind. Hätte der Benutzer die Vererbung für diesen Ordner deaktiviert, würde der Bericht etwas anderes anzeigen.
Dieser Benutzer hat einige unzulässige Aktionen auf der Dateifreigabe durchgeführt. Er hat die Vererbung deaktiviert und die Gruppe File Share Admins entfernt. Es mag eine logische Erklärung dafür geben, aber es ist ein fragwürdiges Verhalten.
Formatierung der Ausgabe der Windows-Dateifreigabeberechtigungen in einem Bericht
Nachdem wir nun in der Lage waren, die Daten zu erzeugen, können wir mit der Präsentation des Berichts fortfahren, um die Ausgabe in einer lesbaren Form zu erstellen, die wir mit einem Entscheidungsträger in der Abteilung teilen können. Meiner Erfahrung nach wird der Bericht in der Regel an die Eigentümer der einzelnen Dateifreigaben und an einen Manager in der IT-Abteilung weitergeleitet. Der Einfachheit halber werden wir den Bericht als Excel-Tabelle exportieren.
Es gibt zwei Möglichkeiten: Entweder führen Sie den PowerShell-Befehl in einer Zeile aus, was sehr umfangreich wäre, oder Sie weisen die vorherige Ausgabe einer Variable zu und geben die Variable dann in einer Kalkulationstabelle aus. Da es sehr lange dauern kann, alle Berechtigungen für eine große oder komplexe Dateifreigabe zu erfassen, ist die Variablenzuweisung der beste Weg. Ein weiterer Vorteil ist, dass Sie die Daten prüfen können, bevor Sie den Bericht über die Windows-Dateiserver-Berechtigungen formatieren.
Verwendung des ImportExcel-Moduls
Sie verwenden ein Cmdlet namens Export-Excel im ImportExcel-Modul, um die Excel-Datei zu erstellen. Es funktioniert sowohl in Windows PowerShell als auch in PowerShell 7. Wenn Sie es nicht auf Ihrem System haben, installieren Sie es mit dem folgenden Befehl:
Install-Module ImportExcel
Der folgende PowerShell-Code gibt die bevorzugten Parameter für Export-Excel an, um die Daten in einer Tabelle zu speichern und die Spalten automatisch zu vergrößern:
$notInherited = Get-ChildItem -Directory -Recurse | Get-NTFSAccess | Where-Object {!($_.IsInherited)}
$notInherited | Export-Excel C:\Path\To\Report.xlsx -TableName Permissions -AutoSize
Dieser Screenshot zeigt ein Beispiel für die von PowerShell automatisch generierte Kalkulationstabelle.
Anpassung des Berichts über Windows-Dateifreigabeberechtigungen
Um Eigenschaften auszuschließen, verwenden Sie Select-Object, um die Änderungen am Bericht vorzunehmen. Ersetzen Sie den früheren Befehl Export-Excel durch den folgenden Befehl:
$notInherited | Select-Object -ExcludeProperty
AccountType,InheritanceEnabled,InheritedFrom,IsInherited | Export-
Excel C:\temp\Report.xlsx -TableName Permissions -AutoSize
Der Screenshot zeigt das Excel-Tabellenblatt mit den kuratierten Daten.
Wenn Sie den Bericht versenden, erinnern Sie Ihre Empfänger daran, nach der Spalte FullName zu filtern. Oft gibt es auf einem Dateiserver mehrere Ordner mit Variationen eines Oberbegriffs, zum Beispiel Files, so dass diese Filterung für eine bessere Sortierung der Ordner sorgt.