it-swarm.com.de

Listen Sie die Ordnerzugriffsberechtigungen des Benutzers auf

Ich habe einen Benutzer in einer Domäne, der Zugriff auf mehrere Unterordner in mehreren Ordnern hat. Seine Rechte wurden ziemlich genau definiert. Jetzt verlässt er das Unternehmen, wird aber weiterhin als Vertragsressource für ein Unternehmen arbeiten.

Ich muss alle Ordner finden, auf die er Zugriff hatte, seine Berechtigungen widerrufen und ihn dann mit einem anderen Satz von Zugriffsberechtigungen einrichten.

Gibt es ein Tool (vorzugsweise Freeware), das alle NTFS-Berechtigungen für einen bestimmten Benutzer auflistet? Ich habe es mit AccessEnum von Sysinternals versucht, aber die Liste kann nicht nach Benutzername gefiltert werden und ist für mich nutzlos. Ich habe mir auch CACLS angesehen, aber soweit ich das beurteilen kann, werden Berechtigungen angezeigt, die nach Datei und nicht nach Benutzer sortiert sind.

Irgendwelche Ideen?

14
imagodei

Ich habe eine Lösung für meine eigene Frage gefunden. Ich glaube, es ist sehr einfach und sauber. Sie müssen nur subinacl installieren und eine Zeile über den Befehl Eingabeaufforderung ausführen.

Subinacl können Sie hier herunterladen . Obwohl es offiziell nur unter Windows 2000, Windows XP und Windows Server 2003 unterstützt wird, sollte es auch unter Windows Vista, Windows Server 2008 und Windows 7 funktionieren.

Als Nächstes führen Sie Folgendes über den Befehl Eingabeaufforderung aus:

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

Wobei X: das Laufwerk ist, das Sie scannen, und Benutzername ist das Benutzer, dessen Berechtigungen Sie auflisten möchten. Das Scannen kann einige Zeit dauern und Sie erhalten die Ergebnisse in TEXTFILENAME.TXT.

Wenn Sie den Schalter /noverbose verwenden, erhalten Sie eine kompakte Liste der Zugriffsberechtigungen - im Grunde sehen Sie, auf welche Verzeichnisse der Benutzer Zugriff hat (mit Zugriffsmasken und einigen) andere Sachen, die manchmal nützlich sein könnten).

Ich habe OpenOffice Calc zum Importieren der Liste verwendet und dann einen benutzerdefinierten Filter angewendet und nur für die Zeilen gefiltert, die mit + FILE beginnen. Diese Zeilen enthalten Verzeichnisse, auf die der Benutzer Zugriff hat. Auf diese Weise erhalten Sie mit einfachen Tools nur relevante Informationen.

Da die Vererbung häufig für übergeordnete Verzeichnisse aktiviert ist, ist die tatsächliche Anzahl der Verzeichnisse, die Sie möglicherweise zum Anpassen von Berechtigungen aufrufen müssen, normalerweise erheblich niedriger als die Liste selbst.

3
imagodei

Dies scheint den Trick zu tun (mit möglicherweise einer Einschränkung), alle Ordner zu finden, auf die der Benutzer "someuser" in diesem Beispiel auf dem Laufwerk C mit dem integrierten Windows-Befehl icacls Zugriff hat:

icacls c:\*. /findsid someuser /t /c /l

Das/t wird benötigt, um es anzuweisen, Verzeichnisse zu rekursieren. Das/c wird benötigt, um es anzuweisen, weiterzumachen, auch wenn Fehler auftreten. Mit/l funktioniert es mit symbolischen Links (falls vorhanden). (Das letzte ist ein L, und diese Flags können in Groß- oder Kleinbuchstaben geschrieben werden.)

Der *. Wird von DOS-Oldtimern als die Möglichkeit erkannt, "nach Verzeichnissen suchen, nicht nach Dateien" zu sagen. Wenn Sie Dateien und keine Ordner suchen möchten, ändern Sie diese natürlich in *.*, Und Sie können sie natürlich auf ein beliebiges Laufwerk verweisen oder aus einem beliebigen Ordner ausführen und den Laufwerk-/Ordnerpfad und weglassen Lassen Sie es nur relativ zu diesem Ordner suchen.

Ich suchte die gleiche Antwort wie das OP und fand diesen Eintrag, war aber verblüfft, nur ein Angebot zu sehen, das auf einem herunterladbaren Tool basiert. Wie andere habe ich es vorgezogen, etwas Eingebautes zu verwenden, und ich habe es in diesem icacls-Tool gefunden.

Und ich habe bestätigt, dass es unter Windows Server 2012, 2008 und Windows 7 funktioniert, daher vermute ich, dass es auch unter Server 2003, Windows 8 usw. funktioniert.

Die resultierende Liste besteht aus Ordnern, die Zeile für Zeile angezeigt werden, z.

SID gefunden: c:\somedir\somesubdir.

Beachten Sie, dass, wenn Sie dies als Benutzer ausführen, der selbst keine Berechtigungen für einige Verzeichnisse hat, die durchlaufen werden, Fehler in den Ergebnissen verschachtelt werden, wie z.

c:\System Volume Information: Der Zugriff wird verweigert.

Und wenn Sie möglicherweise ein ganzes Laufwerk durchsuchen, kann dies zu Hunderten solcher Fehler führen, sodass es schwierig ist, die Ergebnisse darin zu finden.

Einige denken vielleicht, dass die Antwort darin besteht, die Befehlszeile als Administrator auszuführen, aber das führt einfach dazu, dass weitaus mehr solche Fehler auftreten, da Sie jetzt Ordner durchlaufen, die zuvor ausgeblendet waren.

Wenn Sie diese Fehler verbergen möchten, können Sie mit einem Befehl find nur die Ergebnisse weiterleiten, die erfolgreich sind (diejenigen, die sich auf "SID found" beziehen), da die Fehler NICHT herausgefiltert werden über die Pipe zum Befehl find. Wenn Sie stattdessen alle Fehler entfernen möchten, müssen Sie den eher undurchsichtigen Trick verwenden, den Fehlerstrom (stderr) mithilfe von 2>nul: In den "Bit-Bucket" umzuleiten. Das obige Beispiel würde also werden:

icacls c:\*. /findsid someuser /t /c /l 2>nul:

Beachten Sie jedoch, dass einige der Ordner, die solche Fehler verursacht haben und die jetzt ausgeblendet sind, möglicherweise Ordner sind, auf die der genannte "someuser" Zugriff hat, auf die SIE jedoch keinen Zugriff haben. Sie sollten also zweimal darüber nachdenken, diese Fehler einfach zu ignorieren. Aber wenn Sie wollen, können Sie es so machen.

Diese Möglichkeit schränkt möglicherweise den Wert dieser Antwort ein. Wenn jemand, der mit den Dingen besser vertraut ist, meine Antwort erweitern oder korrigieren möchte, würde ich es begrüßen.

13
charlie arehart

Sie können PowerShell verwenden, ohne etwas anderes herunterladen zu müssen. Dies funktioniert mit Version 2.0 und höher:

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

Es ist nicht so sauber wie das, was mit PowerShell v3 und höher verfügbar ist, aber es wird funktionieren. Dadurch wird eine Liste der Verzeichnisse ausgegeben, die im Zeichenfolgenformat gefunden wurden.

Sie können sie einfach als Objekte ausgeben und mit ihnen weiterarbeiten (sie in eine CSV-Datei exportieren, die gefundenen Einträge entfernen, ein Ticket mit den Informationen aktualisieren ... usw.), indem Sie das Eingabeobjekt des Write- bearbeiten Anrufe ausgeben.

6
Jon