Elenca le autorizzazioni di accesso alle cartelle dell'utente


13

Ho un utente in un dominio che ha accesso a più sottocartelle in più cartelle. I suoi diritti sono stati definiti in modo piuttosto granulare. Ora sta lasciando l'azienda ma continuerà a lavorare per un'azienda come risorsa contrattata.

Devo trovare tutte le cartelle a cui ha avuto accesso e revocare le sue autorizzazioni, quindi configurarlo con un diverso set di autorizzazioni di accesso.

Esiste uno strumento (preferibilmente gratuito) che elenca tutte le autorizzazioni NTFS per un determinato utente? Ho provato con AccessEnum di Sysinternals, ma l'elenco non può essere filtrato per nome utente ed è inutile per me. Ho anche guardato CACLS, ma per quanto ne so mostra le autorizzazioni ordinate per file, non per utente.

Qualche idea?


1
Questo è il motivo per cui dovresti sempre garantire l'appartenenza in base ai gruppi, anche se nel gruppo è presente un solo utente. Avresti potuto appena rimosso dal gruppo. Nel frattempo, mentre aspetti una risposta, puoi semplicemente disabilitare il suo account in AD.
MDMarra,

Hai provato questo strumento: AccessChk v5.0? Al fine di garantire la creazione di un ambiente sicuro, gli amministratori di Windows devono spesso conoscere il tipo di accesso a utenti o gruppi specifici per le risorse, inclusi file, directory, chiavi di registro, oggetti globali e servizi Windows. AccessChk risponde rapidamente a queste domande con un'interfaccia e un output intuitivi. Trovato qui: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99

@MarkM: Così vero ... È solo che quando l'utente ha bisogno di accedere a una singola cartella, lo aggiungi. Quindi in pochi mesi ha bisogno di un altro accesso su una condivisione completamente diversa. E tra qualche mese di nuovo su 2 o 3 cartelle. Come si crea un gruppo con un nome significativo per tale utente? "Username_granular_access_group"? Questo probabilmente farebbe il trucco. @ Luke99: strumento interessante da Sysinternals. Come potrei mancarlo. Ad ogni modo, vedo che mostra tutte le cartelle a cui l'utente ha accesso diretto o indiretto. Esiste un modo per visualizzare solo le cartelle in cui l'utente è elencato esplicitamente in ACL (esclusi gli accessi tramite gruppi)?
imagodei,

Risposte:


13

Questo sembra fare il trucco (forse con un avvertimento), per trovare tutte le cartelle a cui l'utente "someuser" ha accesso, in questo esempio sull'unità C, usando il comando icacls di Windows incorporato:

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

Il / t è necessario per dirlo per ricorrere alle directory. Il / c è necessario per dirlo per andare avanti anche se si verificano errori. Il / l lo fa funzionare con collegamenti simbolici (se presenti). (Quest'ultima è una L e queste bandiere possono essere maiuscole o minuscole.)

Il *.sarà riconosciuto dal DOS veterani come il modo di dire "cercare per le directory, non file". Naturalmente, se si desidera trovare file e non cartelle, modificarlo in *.*e, naturalmente, è possibile puntarlo a qualsiasi unità o eseguirlo da qualsiasi cartella e lasciare il percorso dell'unità / cartella e lasciarlo cercare in relazione a quello solo cartella.

Ho cercato la stessa risposta del PO, e ho trovato questa voce, ma sono rimasto sconvolto nel vedere solo un'offerta basata su uno strumento scaricabile. Come altri, ho preferito usare qualcosa di incorporato e l'ho trovato in questo strumento icacls.

E ho confermato che funziona su Windows Server 2012, 2008 e Windows 7, quindi sospetto che funzionerà anche su Server 2003, Windows 8 e così via.

L'elenco risultante saranno le cartelle indicate riga dopo riga, come ad esempio:

SID trovato: c: \ somedir \ somesubdir.

Si noti che se si esegue questo come un utente che non dispone di autorizzazioni per l'attraversamento di alcune directory, si otterranno errori interlacciati nei risultati come:

c: \ Informazioni sul volume del sistema: accesso negato.

E se stai cercando un'intera unità, ciò potrebbe comportare centinaia di tali errori, rendendo difficile trovare al loro interno i risultati.

Alcuni potrebbero pensare che la risposta sia eseguire la riga di comando come amministratore, ma ciò causerà semplicemente la visualizzazione di molti più errori di questo tipo, poiché ora attraverserai le cartelle che erano state precedentemente nascoste.

Ora, se tu fossi interessato a nascondere quegli errori, non sarai in grado di usare un comando find per reindirizzare solo i risultati che hanno successo (quelli che fanno riferimento a "SID trovato"), perché gli errori NON verranno filtrati dalla pipe al comando find. Invece, se si desidera rimuovere tutti gli errori, è necessario utilizzare il trucco piuttosto oscuro di reindirizzare il flusso di errori (stderr) al "bit bucket" utilizzando 2>nul:. Quindi l'esempio sopra diventerebbe:

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

Basta fare attenzione che alcune delle cartelle che hanno generato tali errori, i cui errori sono ora nascosti, potrebbero essere cartelle a cui il nome "someuser" ha accesso, ma a cui NON si ha. Quindi potresti voler pensarci due volte semplicemente ignorando questi errori. ma se vuoi, è così che puoi farlo.

Questa possibilità potenzialmente limita il valore di questa risposta, mi rendo conto. Se qualcuno con una maggiore familiarità con le cose desidera espandere o correggere la mia risposta, la accolgo con favore.


Sembra che dovrebbe essere ovvio, ma ricorda che: alla ricerca di *. NON eguaglia solo le directory di ricerca o tutte le directory. I nomi di directory possono avere estensioni e i file non devono avere estensioni. Se vuoi essere accurato, lascia che cerchi tutto.
Scott E

6

È possibile utilizzare PowerShell senza dover scaricare altro. Funzionerà con la versione 2.0 e successive:

$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
            }
        }
    }
}

Non è pulito come quello che è disponibile con PowerShell v3 e successivi, ma funzionerà. Questo produrrà un elenco delle directory trovate in formato stringa.

Potresti facilmente inviarli come oggetti e continuare a lavorare con loro (esportali in un file CSV, rimuovi le voci come le trovi, aggiorna un ticket con le informazioni ... ecc.) Manipolando l'oggetto di input di Write- Chiamate in uscita.


Sarebbe anche possibile "escludere" le autorizzazioni ereditate? (ad es. ricerca in tutte le cartelle, in cui "DOMINIO \ Nome utente" è stato aggiunto in modo esplicito?
riconoscere il

1
Sì, puoi:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
riconoscere il

3

Ho trovato una soluzione alla mia domanda. Credo sia molto semplice e pulito. Devi solo installare subinacl ed eseguire una riga dal prompt dei comandi.

Puoi scaricare subinacl qui . Sebbene sia ufficialmente supportato solo su Windows 2000, Windows XP e Windows Server 2003, dovrebbe funzionare anche su Windows Vista, Windows Server 2008 e Windows 7.

Successivamente, dal prompt dei comandi si esegue quanto segue:

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

Dove X: è l'unità che stai scansionando e il nome utente è l'utente di cui desideri elencare le autorizzazioni. La scansione può richiedere del tempo e si ottengono i risultati in TEXTFILENAME.TXT.

Se si utilizza lo switch / noverbose si ottiene un elenco compatto di autorizzazioni di accesso - in pratica si vede a quali directory l'utente ha accesso (con maschere di accesso e altre cose che potrebbero tornare utili a volte).

Ho usato OpenOffice Calc per importare l'elenco, quindi ho applicato un filtro personalizzato e filtrato solo per quelle righe che iniziano con + FILE . Queste righe contengono directory a cui l'utente ha accesso. Questo è il modo in cui, utilizzando strumenti semplici, si ottengono solo informazioni pertinenti.

Poiché l'ereditarietà è spesso abilitata nelle directory principali, il numero effettivo di directory che potrebbe essere necessario visitare per regolare le autorizzazioni è in genere significativamente inferiore all'elenco stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.