Listar permissões de acesso à pasta do usuário

14

Eu tenho um usuário em um domínio que tem acesso a várias subpastas em várias pastas. Seus direitos foram definidos de maneira bastante granular. Agora ele está deixando a empresa, mas continuará trabalhando para uma empresa como recurso contratado.

Preciso encontrar todas as pastas às quais ele teve acesso e revogar suas permissões e configurá-lo com um conjunto diferente de permissões de acesso.

Existe alguma ferramenta (freeware, preferencialmente) que lista todas as permissões NTFS para um determinado usuário? Eu tentei com o AccessEnum da Sysinternals, mas a lista não pode ser filtrada por nome de usuário e é inútil para mim. Também observei o CACLS, mas, tanto quanto posso dizer, exibe permissões ordenadas por arquivo, não por usuário.

Alguma ideia?

imagodei
fonte
1
É por isso que você sempre deve conceder associação com base em grupos, mesmo se houver apenas um usuário no grupo. Você poderia ter acabado de removê-lo do grupo. Enquanto isso, enquanto você espera por uma resposta, basta desativar a conta dele no AD.
MDMarra
Você tentou esta ferramenta: AccessChk v5.0? Como parte da garantia de que eles criaram um ambiente seguro, os administradores do Windows geralmente precisam saber que tipo de acesso usuários ou grupos específicos têm aos recursos, incluindo arquivos, diretórios, chaves do Registro, objetos globais e serviços do Windows. O AccessChk responde rapidamente a essas perguntas com uma interface e saída intuitivas. Encontre aqui: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99
@MarkM: Tão verdade ... É que quando o usuário precisa de acesso a uma única pasta, você o adiciona. Então, em alguns meses, ele precisa de outro acesso em ações completamente diferentes. E em alguns meses novamente em 2 ou 3 pastas. Como você cria um grupo com nome significativo para esse usuário? "Nome_de_usuário_granular_acesso_grupo"? Isso provavelmente faria o truque. @ Luke99: Ferramenta interessante da Sysinternals. Como eu pude sentir falta disso. De qualquer forma, vejo que exibe todas as pastas às quais o usuário tem acesso direto ou indireto. Existe uma maneira de exibir apenas pastas em que o usuário está explicitamente listado na ACL (excluindo acessos por grupos)?
imagodei

Respostas:

13

Isso parece funcionar (talvez com uma ressalva), para encontrar todas as pastas às quais o usuário "someuser" tem acesso, neste exemplo na unidade C, usando o comando icacls interno do Windows:

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

O / t é necessário para instruí-lo a recursar diretórios. O / c é necessário para dizer a ele para continuar, mesmo que encontre erros. O / l faz funcionar com links simbólicos (se houver). (Esse último é um L e esses sinalizadores podem ser maiúsculos ou minúsculos.)

O *.será reconhecido pelo DOS veteranos como a maneira de dizer "olhar para os diretórios, não arquivos". Obviamente, se você deseja encontrar arquivos e não pastas, altere-o para *.*, e é claro, você pode apontá-lo para qualquer unidade ou executá-lo em qualquer pasta e deixar o caminho da unidade / pasta e deixá-lo pesquisar em relação a isso somente pasta.

Procurei a mesma resposta que o OP e encontrei essa entrada, mas fiquei chateado ao ver apenas uma oferta baseada em uma ferramenta para download. Como outros, eu preferi usar algo embutido, e o encontrei, nesta ferramenta icacls.

E confirmei que funciona no Windows Server 2012, 2008 e Windows 7, por isso suspeito que funcione também no Server 2003, Windows 8 e assim por diante.

A lista resultante será pastas indicadas linha após linha, como:

SID encontrado: c: \ somedir \ somesubdir.

Observe que, se você executar isso como um usuário que não possui permissões para alguns diretórios serem atravessados, obterá erros intercalados nos resultados, como:

c: \ System Volume Information: acesso negado.

E se você estiver pesquisando uma unidade inteira, isso poderá resultar em centenas desses erros, dificultando a localização dos resultados.

Alguns podem pensar que a resposta é executar a linha de comando como administrador, mas isso simplesmente fará com que muito mais erros apareçam, pois agora você estará percorrendo pastas que estavam ocultas anteriormente.

Agora, se você estava interessado em ocultar esses erros, não poderá usar um comando find para canalizar apenas os resultados com êxito (aqueles que se referem a "SID encontrado"), porque os erros NÃO serão filtrados pelo canal até o comando find. Em vez disso, se você deseja remover todos os erros, é necessário usar o truque obscuro de redirecionar o fluxo de erros (stderr) para o "bloco de bits" usando 2>nul:. Portanto, o exemplo acima se tornaria:

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

Apenas lembre-se de que algumas das pastas que geraram esses erros, que agora estão ocultos, podem ser pastas às quais o nome "someuser" TEM acesso, mas VOCÊ NÃO. Portanto, você pode pensar duas vezes sobre simplesmente ignorar esses erros. mas se você quiser, é assim que você pode fazer.

Essa possibilidade limita potencialmente o valor dessa resposta, eu percebo. Se alguém com mais familiaridade com as coisas gostaria de expandir ou corrigir minha resposta, eu gostaria.

charlie arehart
fonte
Parece que deveria ser óbvio, mas vale a pena apontar: Procurando por *. NÃO é igual apenas à pesquisa de diretórios ou a todos os diretórios. Os nomes de diretório podem ter extensões e os arquivos não precisam ter extensões. Se você quiser ser completo, procure em tudo.
Scott E
6

Você pode usar o PowerShell sem precisar baixar mais nada. Isso funcionará com a versão 2.0 e posterior:

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

Não é tão limpo quanto o que está disponível no PowerShell v3 e ativado, mas funcionará. Isso produzirá uma lista dos diretórios encontrados no formato de sequência.

Você pode produzi-los facilmente como objetos e continuar trabalhando com eles (exportá-los para um arquivo CSV, remover as entradas conforme as encontrar, atualizar um ticket com as informações ... etc) manipulando o objeto de entrada do Write- Chamadas de saída.

Jon
fonte
Também seria possível "excluir" permissões herdadas? (ou seja, busca a cada pasta, onde "DOMÍNIO \ Nome" foi adicionada de maneira explícita?
dognose
1
Sim, você pode:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
dognose 27/02
3

Eu encontrei uma solução para minha própria pergunta. Creio que é muito simples e limpo. Você só precisa instalar o subinacl e executar uma linha no prompt de comando.

Você pode baixar o subinacl aqui . Embora seja oficialmente suportado apenas no Windows 2000, Windows XP e Windows Server 2003, também deve funcionar no Windows Vista, Windows Server 2008 e Windows 7.

Em seguida, execute o seguinte no prompt de comando:

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

Onde X: é a unidade que você está digitalizando e o nome de usuário é o usuário cujas permissões você deseja listar. A digitalização pode levar algum tempo e você obtém os resultados em TEXTFILENAME.TXT.

Se você usa o switch / noverbose, obtém uma lista compacta de permissões de acesso - basicamente, você vê a quais diretórios o usuário tem acesso (com máscaras de acesso e outras coisas que podem ser úteis às vezes).

Usei o OpenOffice Calc para importar a lista e, em seguida, apliquei um Filtro personalizado e filtrei apenas as linhas que começaram com + FILE . Essas linhas contêm diretórios aos quais o usuário tem acesso. É assim que, usando ferramentas simples, você acaba apenas com informações relevantes.

Como a herança geralmente é ativada nos diretórios pai, o número real de diretórios que você pode precisar visitar para ajustar as permissões geralmente é significativamente menor que a própria lista.

imagodei
fonte