Listet die Ordnerzugriffsberechtigungen des Benutzers auf

13

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 für eine Firma als Vertragsressource arbeiten.

Ich muss alle Ordner finden, auf die er Zugriff hatte, und 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 die Berechtigungen nach Datei und nicht nach Benutzer sortiert angezeigt.

Irgendwelche Ideen?

imagodei
quelle
1
Aus diesem Grund sollten Sie immer eine Mitgliedschaft basierend auf Gruppen gewähren, auch wenn sich nur ein Benutzer in der Gruppe befindet. Du hättest ihn einfach aus der Gruppe entfernen können. Während Sie auf eine Antwort warten, können Sie sein Konto in AD deaktivieren.
MDMarra
Haben Sie dieses Tool ausprobiert: AccessChk v5.0? Um sicherzustellen, dass eine sichere Umgebung erstellt wurde, müssen Windows-Administratoren häufig wissen, über welche Zugriffe bestimmte Benutzer oder Gruppen auf Ressourcen wie Dateien, Verzeichnisse, Registrierungsschlüssel, globale Objekte und Windows-Dienste verfügen. AccessChk beantwortet diese Fragen schnell mit einer intuitiven Benutzeroberfläche und Ausgabe. Gefunden hier: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99
@MarkM: Also wahr ... Wenn ein Benutzer Zugriff auf einen einzelnen Ordner benötigt, fügt er ihn hinzu. Dann braucht er in wenigen Monaten einen anderen Zugang zu ganz anderen Teilen. Und in wenigen Monaten wieder auf 2 oder 3 Ordner. Wie erstelle ich eine Gruppe mit einem aussagekräftigen Namen für diesen Benutzer? "Username_granular_access_group"? Dies würde wahrscheinlich den Trick machen. @ Luke99: Interessantes Tool von Sysinternals. Wie könnte ich es vermissen. Ich sehe jedenfalls, dass alle Ordner angezeigt werden, auf die der Benutzer direkten oder indirekten Zugriff hat. Gibt es eine Möglichkeit, nur Ordner anzuzeigen, in denen der Benutzer explizit in der ACL aufgeführt ist (ohne Zugriff über Gruppen)?
Imagodei

Antworten:

13

Dies scheint der Trick zu sein (möglicherweise mit einer Einschränkung), um 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 Verzeichnisse zu rekursivieren. Das / c wird benötigt, um ihm mitzuteilen, dass er weitermachen soll, auch wenn er auf Fehler stößt. Das / l bewirkt, dass es mit symbolischen Links (falls vorhanden) funktioniert. (Das letzte ist ein L, und diese Flags können in Groß- oder Kleinbuchstaben geschrieben werden.)

Das *.wird von DOS-Oldtimern als die Art und Weise erkannt, wie man sagt, nach Verzeichnissen zu suchen, nicht nach Dateien. Wenn Sie jedoch Dateien und nicht Ordner suchen möchten, ändern Sie diese in *.*. Natürlich können Sie sie auch auf ein beliebiges Laufwerk verweisen oder von einem beliebigen Ordner aus ausführen und den Pfad für Laufwerk / Ordner weglassen und relativ dazu suchen lassen Nur Ordner.

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 basierte. 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. Ich vermute, dass es auch unter Server 2003, Windows 8 usw. funktioniert.

Die resultierende Liste enthält Ordner, die Zeile für Zeile angezeigt werden, z. B .:

SID Gefunden: c: \ somedir \ somesubdir.

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

c: \ System Volume Information: Zugriff verweigert.

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

Einige denken vielleicht, die Antwort wäre, die Befehlszeile als Administrator auszuführen, aber das führt einfach dazu, dass weitaus mehr solche Fehler angezeigt werden, da Sie jetzt Ordner durchsuchen, die zuvor ausgeblendet waren.

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

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

Beachten Sie jedoch, dass einige der Ordner, die solche Fehler verursacht haben und jetzt ausgeblendet werden, möglicherweise Ordner sind, auf die der Name "someuser" Zugriff hat, auf die SIE jedoch keinen Zugriff haben. Sie sollten sich also überlegen, ob Sie diese Fehler einfach ignorieren. aber wenn du willst, kannst du es so machen.

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

Charlie Arehart
quelle
Scheint so, als sollte es offensichtlich sein, weist aber darauf hin: Suche nach *. Entspricht NICHT nur der Suche nach Verzeichnissen oder allen Verzeichnissen. Verzeichnisnamen können Erweiterungen haben und Dateien müssen keine Erweiterungen haben. Wenn Sie gründlich sein wollen, lassen Sie es alles durchsuchen.
Scott E
6

Sie können PowerShell verwenden, ohne etwas anderes herunterladen zu müssen. Dies funktioniert mit v2.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 gefundenen Verzeichnisse im Zeichenfolgenformat ausgegeben.

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

Jon
quelle
Wäre es auch möglich, geerbte Berechtigungen "auszuschließen"? (dh in jedem Ordner suchen, in dem "DOMAIN \ Benutzername" explizit hinzugefügt wurde?
siehe
1
Ja, Sie können:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
27.
3

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 an der Eingabeaufforderung ausführen.

Sie können subinacl 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 an der Eingabeaufforderung Folgendes aus:

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

Wobei X: das Laufwerk ist, das Sie scannen, und Benutzername der 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 von Zugriffsberechtigungen - im Grunde sehen Sie, auf welche Verzeichnisse der Benutzer Zugriff hat (mit Zugriffsmasken und einigen anderen Dingen, die manchmal nützlich sein können).

Ich habe die Liste mit OpenOffice Calc importiert und dann einen benutzerdefinierten Filter angewendet und nur für die Zeilen gefiltert, die mit + DATEI 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, in der Regel erheblich niedriger als die Liste selbst.

imagodei
quelle