Localizando todos os arquivos no NTFS com um usuário ou grupo específico na ACL

2

Resumo executivo: desejo encontrar todos os diretórios e arquivos aos quais um determinado usuário ou grupo tenha acesso.

Mais detalhadamente: Estou procurando uma ferramenta de linha de comando para pesquisar recursivamente um diretório NTFS em todos os arquivos e diretórios nos quais uma ACE na DACL contém um determinado usuário ou grupo. Se eu quisesse modificar as permissões, usaria subinacl ou SetACL . Eu pensei que seria capaz de usar uma dessas ferramentas para pesquisar e exibir, mas estou tendo problemas para encontrar uma solução direta.

Eu poderia usar o SetACL da seguinte forma:

   setacl -on C:\SOME_DIR -ot file -actn list -lst "f:tab;w:d;i:y;" -rec cont

e, em seguida, grep para o usuário de interesse, mas gostaria de uma solução mais elegante. Eu provavelmente estou sentindo falta de algo aqui. Alguma idéia?

    
por David 03.09.2009 / 22:15

4 respostas

3

Obrigado, "desconhecido". Seu script do PowerShell não funciona para mim, mas eu invadi algo que faz. Eu sou novo também, mas depois de algumas tentativas e erros:

Get-ChildItem "C:\SOME\DIR" -recurse | 
    ForEach-Object { 
        $fname = $_.FullName
        $acl = Get-Acl $fname
        foreach ($e in $acl.Access) {
            If ( -not $e.IsInherited -and
                 $e.AccessControlType -eq "Allow" -and 
                 $e.IdentityReference -eq "SOMEDOMAIN\Somegroup") 
            {
                Write-Host $fname
                break
            }
        }
    }

Alguém com kungfu PowerShell provavelmente poderia limpar isso um pouco. Note que eu ignoro as entradas herdadas, porque estou interessado apenas em saber onde o acesso começa.

    
por 04.09.2009 / 21:52
1

Não testado, e um pouco novo no powershell, mas algo assim iria escrever na tela. De lá, você poderia despejá-lo em um arquivo ou qualquer outra coisa.

Get-ChildItem "RootFolderPath" -recurse | 
    ForEach-Object { 
        $acl = Get-Acl $_.FullName
        If $acl.ContainsKey "User/Group" {Write-Host $_.FullName}
    }
    
por 03.09.2009 / 23:12
0

O accessenum funciona para o seu caso de uso ?, pergunto-me?

    
por 03.09.2009 / 23:21
0

Aqui está um script PowerShell que eu modifiquei acima e que funcionou para mim:

$files = @()
Get-ChildItem "d:\some\path" -recurse | 
    ForEach-Object { 
        $fname = $_.FullName
        if ($fname -notlike "*_vti*") {
            $acl = Get-Acl $($fname)
            foreach ($e in $acl.Access) {
                If ( $e.FileSystemRights -like "*Modify*" -and 
                     $e.IdentityReference -eq "domain\user") 
                {
                    $files += $fname
                    break
                }
            }
        }
    }
$files > d:\out.txt
    
por 19.08.2013 / 20:21