Se você é um profissional de TI e encontra dificuldades em definir permissões de sistema de arquivos para sua organização, você está com sorte. Gerenciar permissões NTFS usando uma GUI é demorado, especialmente quando se trabalha com muitos usuários ou grupos. Felizmente, temos o PowerShell para tornar tudo melhor. Como? O módulo Microsoft.PowerShell.Security.
O PowerShell possui dois cmdlets especificamente para trabalhar com ACLs chamados Get-ACL
e Set-ACL
. Esses dois cmdlets podem recuperar e atribuir qualquer número de permissões NTFS, o que você aprenderá tudo sobre neste tutorial. Se você quer se tornar mais eficiente e imediatamente útil na gestão de permissões NTFS, continue lendo.
Sem tempo para ler? Não tem problema! Assista a este vídeo complementar de TechSnips.io de Anthony Howell abaixo:
Gerencie e Reporte o Active Directory, Exchange e Microsoft 365 com ManageEngine ADManager Plus. Baixe a Versão de Teste Gratuita!
Pré-requisitos
Para seguir com os exemplos neste tutorial, você precisa de:
- PowerShell 7 ou Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
Criando Arquivos/Pastas para Testar
Este tutorial será construído em torno de um simples “laboratório” ou uma única pasta. Você aprenderá a trabalhar com permissões NTFS no PowerShell do zero; não é necessário nenhum trabalho extra da sua parte.
- Para começar, abra uma sessão do PowerShell como Administrador.
- Crie uma pasta vazia chamada Share em algum lugar no seu sistema de arquivos. Nos exemplos a seguir, vamos supor que essa pasta esteja localizada em C:\Share. Isso manterá os exemplos mais curtos e fáceis de seguir. Você pode criar este diretório copiando o código abaixo:
3. Crie uma pasta chamada C:\Share\Assets.
4. Crie um arquivo chamado client_list.txt na pasta C:\Share.
5. Crie um arquivo chamado client_projects.txt na pasta C:\Share.
6. Em seguida, atribua uma variável para o caminho da pasta Share. Criar variáveis reduz a digitação e torna o caminho mais fácil de reutilizar. Supondo que você esteja usando C:\Share, copie o seguinte exemplo de código na sua sessão do PowerShell:
7. Pressione Enter. Agora você tem um diretório vazio e salvou esse caminho como uma variável.
Visualizando Permissões NTFS Com Get-Acl
O PowerShell permite que você visualize rapidamente as permissões NTFS usando o cmdlet Get-Acl
. Nas seções seguintes, você aprenderá como usar o cmdlet para visualizar as permissões NTFS para um arquivo ou pasta.
Uma lista de controle de acesso (ACL é uma lista de entradas de controle de acesso (ACE). Cada ACE em uma ACL identifica um trustee e especifica os direitos de acesso permitidos, negados ou auditados. O descritor de segurança para um objeto securável pode conter dois tipos de ACLs: uma DACL e uma SACL.
Exibindo Permissões do NTFS
Tradicionalmente, você pode visualizar uma ACL clicando com o botão direito na pasta C:\Share, clicando em Propriedades, selecionando a guia Segurança e clicando no botão Avançado. Você pode ver um exemplo de como a GUI exibe as permissões abaixo.

O exemplo acima possui algumas entradas de permissão numeradas. Observe-as cuidadosamente, pois você verá a comparação posteriormente nesta seção.
Usando o diretório que você criou anteriormente, exiba as permissões NTFS atuais para o diretório usando Get-Acl
.
Agora você deve ver o caminho, proprietário e detalhes do nível de acesso na captura de tela a seguir.

A propriedade Access
mostrada na captura de tela acima contém informações adicionais sobre o ACL, mas ela rola para fora da tela conforme mostrado pelos três pontos no final de FullControl acima. Existe uma maneira melhor de visualizar essa propriedade, colocando o comando anterior entre parênteses para visualizar as propriedades do objeto Access. Procure apenas pela propriedade Access
neste objeto executando o código abaixo.
O comando acima também pode ser expresso usando o objeto
Access
e o parâmetro-ExpandProperties
:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
Conforme mostrado na captura de tela a seguir, a saída é formatada para facilitar a visualização das propriedades individuais do Access
:

Visualizar as propriedades de acesso da maneira acima pode fazer com que a saída do terminal role pela tela rapidamente se você tiver muitas Entidades de Controle de Acesso (ACE). Cada entidade contém propriedades FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags e PropagationFlags. Para tornar tudo isso um pouco mais legível, encaminhe os objetos para Format-Table -AutoSize
. Execute o seguinte comando.
Como você pode ver na captura de tela abaixo, as propriedades de acesso ficam mais limpas e organizadas ao usar Format-Table -AutoSize
:

Examine as propriedades e o número da coluna. Note que essas são as mesmas propriedades que você viu na GUI no início do tutorial.

Filtrando Objetos de Acesso
Existem momentos em que você vai querer ser mais preciso ao descobrir permissões NTFS. Para fazer isso, você pode filtrar um ACE específico ou encontrar resultados particulares que tenham permissões NTFS herdadas ou explícitas dentro de uma ACL usando o PowerShell. Em vez de rolar a janela do terminal com os olhos linha por linha, você pode usar o cmdlet Where-Object
para fazer alguns filtros.
O exemplo de código abaixo filtra objetos que não herdam permissões NTFS. Isso é feito usando Where-Object
com o operando -Not
olhando para o objeto atual no pipeline $_.
membro da propriedade do objeto IsInherited
, que indica se o ACE é o resultado de herança e não é definido explicitamente:
Lembre-se de encaminhar objetos para
Format-Table -AutoSize
ou a saída irá rolar para baixo na tela. Faça disso um novo hábito; você vai me agradecer depois!
Usando o código abaixo, substitua 'NOMEDOUSUÁRIO'
por outro nome de usuário para ver resultados específicos:
Abaixo está um exemplo de como os resultados poderiam parecer:

O exemplo acima mostra todos os ACEs em que a propriedade IdentityReference
é o usuário ou grupo de segurança que possui permissões atribuídas.
Vá em frente e pratique o que aprendeu até agora sobre
Get-Acl
. Examine diferentes arquivos e pastas em seu sistema. Isso ajudará você a ver muitos descritores de segurança diferentes para contextos diversos. Também ajudará a construir alguma memória muscular.
Vamos elevar um pouco as coisas e atribuir permissões NTFS.
Modificando Permissões NTFS Com Set-Acl
Agora que você pode visualizar as permissões NTFS, é hora de atribuir e modificar as permissões NTFS usando o PowerShell. O cmdlet Set-Acl
torna isso possível. As seções a seguir demonstrarão como usar este cmdlet em conjunto com Get-Acl
para copiar, modificar herança e remover permissões NTFS de um arquivo ou pasta.
Copiando Permissões NTFS
Você pode ter um arquivo ou pasta que contenha o nível apropriado de permissões NTFS que você precisa usar para um novo ACL. Você pode economizar tempo copiando permissões de um arquivo ou pasta para outro.
Copiar ACLs/ACEs existentes pode reduzir erros humanos ao configurar permissões NTFS, assumindo que o descritor de segurança que você está copiando está correto e apropriado para o destino em primeiro lugar. Como diz o ditado, “Com grande poder, vem grande responsabilidade.”. Mantenha isso em mente.
Considere a seguinte captura de tela. Aqui você está dando uma olhada no ACL de um arquivo em C:\Share chamado Client_List.txt. O ACL tem o nível correto de permissões NTFS que você deseja:

Agora, considere a próxima captura de tela. Desta vez, você está dando uma olhada no ACL de outro arquivo em C:\Share chamado Client_Projects.txt. Este arquivo não possui as permissões NTFS que você deseja:

Você precisa copiar as permissões NTFS de Client_List.txt para Client_Projects.txt. Como você pode fazer isso? Você irá modificar as permissões obtendo o ACL de Client_List.txt e então usando o cmdlet Set-Acl
com o parâmetro -AclObject
. Quando você executa o código abaixo, o ACL inteiro de Client_List.txt é copiado para Client_Projects.txt :
Como você pode ver na captura de tela numerada abaixo, o arquivo Client_Projects.txt agora possui os mesmos descritores de segurança que Client_list.txt.
- Obtenha um ACL existente de um arquivo existente.
- Defina o objeto ACL copiado para o arquivo ou pasta.
- Verifique se o ACL foi copiado corretamente para o arquivo ou pasta.

Agora você vê que o ACL é idêntico para o arquivo Client_Projects.txt como o arquivo Client_List.txt na coluna IdentityReference com AccessControlType definido como Allow. Você usa a mesma técnica para atribuir permissões NTFS para pastas também.
Adicionando Permissões NTFS
Na última seção, você copiou as permissões NTFS existentes de um objeto de arquivo para outro. Desta vez, você vai criar permissões NTFS do zero. Isso permitirá que você atribua permissões NTFS que serão designadas a um arquivo ou pasta.
Primeiro, comece atribuindo algumas variáveis para usar na criação de um novo objeto usado por Set-Acl
. Fazer dessa maneira torna um pouco mais fácil quando chegar a hora de executar o comando. O código abaixo constrói as propriedades de um ACE que se tornará as permissões NTFS atribuídas a um arquivo ou pasta:
Em seguida, atribua mais uma variável que obterá a ACL inicial para a pasta Assets
. Depois, usando o membro do tipo método AddAccessRule
, adicione uma regra de acesso usando a variável $ACE
:
Agora você está pronto para adicionar o ACE recém-criado à ACL de C:\Share\Assets
. Agora use Set-Acl
para aplicar este novo ACE ao diretório apropriado:
Em seguida, verifique se o usuário que você escolheu tem as permissões para visualizar o diretório necessário usando o código abaixo:
Removendo permissões NTFS
Haverá um momento em que você precisará remover permissões NTFS de um recurso.
Para remover permissões NTFS, comece obtendo a ACL atual do arquivo ou pasta. Neste exemplo, o arquivo é Client_Projects.txt
:
Agora filtre a ACE específica que deseja remover. Você faz isso chamando os objetos membros $Acl
e redirecionando esses resultados para Where-Object
e alguns operadores:
Em seguida, use a variável $Acl
que contém os descritores de segurança da ACL atual, chame o método RemoveAccessRule
e passe o objeto ACE criado acima usando o cmdlet New-Object
para o método RemoveAccessRule()
. Isso removerá a entrada:
É importante lembrar que você modificou uma ACL existente aqui e ainda não confirmou as alterações.
Agora, para fazer com que essas alterações sejam permanentes, execute o cmdlet Set-Acl
, fornecendo os parâmetros -Path
e -AclObject
com os valores apropriados de "$dir\Client_Projects.txt"
e $Acl
. Após digitar o comando abaixo, pressione Enter:
Gerencie e Relate o Active Directory, Exchange e Microsoft 365 com o ManageEngine ADManager Plus. Baixe a avaliação gratuita!
Resumo
Neste artigo, você aprendeu sobre como gerenciar permissões NTFS com o PowerShell. Você conheceu os dois cmdlets, Get-Acl
e Set-Acl
, e o que eles fazem com as permissões NTFS.
Você também aprendeu como usar filtros para direcionar um ACE específico em uma ACL para uso nos cmdlets mencionados. Com um pouco de prática, você poderá gerenciar solicitações de permissão NTFS mais facilmente do que nunca.