Icacls é um utilitário de linha de comando do Windows que os administradores de TI podem usar para alterar listas de controle de acesso em arquivos e pastas. Uma das tarefas mais comuns que um profissional de TI ou administrador de sistema realiza é a modificação de permissões em um servidor de arquivos. Usar o comando icacls é uma maneira muito eficiente de fazer isso, e explicaremos como usar este comando neste guia.
Como usar o comando icacls
Com base em minha própria experiência pessoal, a modificação de permissões de arquivos no Windows geralmente é feita usando o Explorador de Arquivos. Para muitos profissionais de TI, é muito intuitivo abrir o Explorador de Arquivos, navegar até a localização de rede que está causando problemas de acesso para alguns usuários e alterar suas permissões de ‘Leitura’ para ‘Leitura/Modificação’ ou algo semelhante. Rápido e fácil de usar.
No entanto, existem inúmeros cenários abrangendo diferentes níveis de alcance onde a GUI simplesmente não é tão robusta quanto gostaríamos. Se vamos alterar permissões em 22 milhões de arquivos e pastas, queremos fazer certo!
O que é uma lista de controle de acesso (ACL)?
Nos sistemas Windows e NTFS, cada objeto de arquivo (arquivo, pasta) tem uma lista de controle de acesso. Esta lista é composta de entradas de controle de acesso (ACE). A lista contém todos os usuários e/ou outros objetos de contêiner de segurança (grupos, etc.) que têm algum nível de permissão para o referido objeto de arquivo.
O que é uma entrada de controle de acesso? Um momento…
O que é uma entrada de controle de acesso (ACE)?
Uma entrada de controle de acesso (ACE) é um registro individual ou regra de permissão que controla os níveis de permissão individuais de um usuário/grupo em um objeto de arquivo. Vou listar as permissões básicas de alto nível disponíveis para uma ACL:
- Acesso total (F)
- Acesso de modificação (M) (inclui ‘excluir’)
- Acesso de leitura e execução (RX)
- Acesso somente leitura (R)
- Acesso somente gravação (W)
Há cerca de uma dúzia ou mais permissões avançadas, mas estas estão além do escopo deste artigo.
Limitações do Explorador de Arquivos
Agora, se eu fosse o gerente de programa da Microsoft para o File Explorer (NÃO é um cargo que eu particularmente invejo), esses são os recursos que eu adicionaria. E acredite em mim, eu queria que eles adicionassem esses recursos há décadas!
Vamos dizer que você está lidando com uma migração de servidor de arquivos do Servidor A para o Servidor B. Você já copiou os dados para o destino (Servidor B). Você descobriu que nem todas as permissões estão corretas de forma recursiva.
Então, você vai para a raiz da sua árvore, entra na aba Segurança , e faz algumas alterações na lista de controle de acesso. Você marca a caixa para modificar de forma recursiva todos os 22 milhões de arquivos e pastas abaixo da raiz. Ele começa a fazer alterações e então lança algumas janelas pop-up de confirmação para você sobre as alterações nos arquivos do sistema, arquivos somente leitura, etc.
Agora, aqui está meu pedido – No ‘assistente’ que eles poderiam criar, eu quero especificar para simplesmente assumir e clicar em ‘Sim’ em todas as solicitações de confirmação. Em seguida, o processo continuaria em caso de erros e depois me ofereceria um resumo quando estivesse concluído, com um link para baixar a saída bruta do arquivo para que eu possa voltar e verificar quaisquer erros ou avisos que tenham surgido.
Não, eu não sei se a Microsoft vai algum dia oferecer um conjunto de recursos maravilhoso, robusto, configurar-e-esquecer como este. Então, enquanto isso, recorremos ao poder da linha de comando e da criação de scripts. É aí que entra o comando icacls embutido.
Entendendo a sintaxe do icacls
A sintaxe do icacls é realmente bastante direta e relativamente fácil de aprender. Basicamente, você usa o comando, em seguida adiciona o arquivo ou pasta que deseja verificar ou manipular, e então as permissões que deseja adicionar/alterar/excluir.
Existem também opções de linha de comando, é claro. Vamos cobrir tudo isso em breve. Aqui está um exemplo do que acontece quando você apenas executa o seguinte comando e em seguida um nome de arquivo.
icacls Excellent.txt

Ele vai mostrar uma ACE por linha, então usando o exemplo acima:
- A conta ‘SYSTEM’ integrada tem permissões de acesso Herdadas (I) e Completo (F)
- O grupo Administradores integrado tem as mesmas permissões
- O grupo Usuários integrado tem permissões Herdadas (I), Leitura (R) e Execução (X).
É possível utilizar o icacls no PowerShell?
Bem, como você pode ver pelo meu exemplo acima e captura de tela, certamente é possível usar o PowerShell para executar o comando icacls. Você só precisa estar ciente de algumas variáveis de ambiente que precisam ser referenciadas um pouco diferentemente.
Os cmdlets equivalentes no PowerShell para visualizar e gerenciar ACLs em objetos de arquivo são Get-Acl e Set-Acl. Parece uma ideia para um post futuro! ?
Utilizando o icacls para configurar permissões de um arquivo ou pasta
Porque o comando icacls está integrado no Windows, você está livre para começar a usar o comando assim que entender os conceitos básicos aqui. Você também pode simplesmente digitar ‘icacls’ sozinho na linha de comando para visualizar as informações de Ajuda disponíveis. Você também pode consultar documentação similar da Microsoft para o comando icacls neste link.
Como exibir a ACL atual de um objeto
Certo, acho que já foi o suficiente de exposição… vamos começar a usar o comando. Para exibir a ACL atual de um arquivo ou diretório, basta usar os seguintes comandos:
icacls file or directory
icacls Download

Aqui, ‘Download’ é uma pasta com arquivos e subpastas. Como você vai notar, a saída é um pouco diferente para objetos de diretório. Você verá (OI) e (CI) porque essas são permissões especiais de nível de herança de contêiner que se aplicam apenas a diretórios.
Para o grupo de Administradores integrado, você verá que ele possui direitos totais e permissões herdadas. O ‘(OI)’ mostra que os outros objetos nesta pasta herdarão esse ACE. O ‘(CI)’ mostra que outras pastas nesta pasta também herdarão esse ACE novamente. (Esta pasta não acontece de ter nenhuma, mas se tivesse, ela herdaria automaticamente os mesmos ACEs).
Concedendo permissões a um arquivo ou pasta
Agora, as coisas estão começando a esquentar. Vamos definir permissões e adicionar algumas para outros usuários em nosso domínio do Active Directory com o switch /grant. Com o comando a seguir, daremos a Billy Reinders (breinders) permissões somente de leitura (R) para o arquivo Excellent.txt.
icacls Excellent.txt /grant reinders\breinders:R /t /c

O comando anterior foi concluído com sucesso; em seguida, eu validei minhas alterações verificando as permissões – agora vemos que ‘REINDERS\breinders’ tem permissões somente de leitura (R). E, como não vemos um ‘I’ listado, sabemos que não é herdado, é explícito.
Apenas para lembrar, o switch ‘/t’ é usado para definir as permissões recursivamente em toda a árvore de pastas. O switch ‘/c’ instrui o comando a continuar mesmo se encontrar erros.
Removendo permissões de um arquivo ou pasta
Em vez de usar o switch /grant para dar/adicionar permissões, usamos o switch /remove para remover permissões de um ACE. Vamos em frente e remover o acesso de curta duração de Billy ao arquivo Excellent.txt.
icacls Excellent.txt /remove:g reinders\breinders /t /c

Aqui, estamos usando o switch ‘/remove:g’ para remover a permissão que foi concedida anteriormente a Billy Reinders. Executei o comando novamente para verificar e você verá que o ACL para Billy foi removido. Excelente! ?
Negando permissões a um arquivo ou pasta
Geralmente, é recomendável evitar o uso de permissões de negar explícitas devido à complexidade que introduz em sua infraestrutura de permissões como um todo. Para a maioria das situações, você pode contar com um negar implícito, o padrão, para lidar com essas circunstâncias.
Se um usuário não estiver listado em uma ACL e o usuário não fizer parte de nenhum grupo listado na ACL, é assumido (corretamente) pelo Windows que esse usuário NÃO possui permissões sobre esse objeto. No entanto, o exemplo a seguir ilustra o quão fora de controle isso pode se tornar – se um usuário fizer parte de dois grupos, e um grupo recebe acesso enquanto o outro grupo é negado, esse usuário será negado. Isso, por si só, faz sentido, mas pode se tornar muito confuso ao tentar solucionar esse tipo de problema.
No entanto, se você deseja adicionar uma permissão de negar explicitamente, você pode usar o switch ‘/deny’ geral para realizar isso.
icacls Download /deny reinders\breinders:(OI)(CI)F /t /c

Aqui está o comando que eu executei; foi concluído com sucesso. Eu então verifiquei a aba Segurança da pasta de Download – você pode ver que Billy possui permissões de Negar sobre o objeto e todos os seus conteúdos.
Como redefinir a ACL de um objeto
I can’t tell you how many file server migrations or movements of large amounts of file projects I’ve been involved in where I just needed to start from scratch. This invaluable step includes resetting the ACLs on an object in case things get too far gone, or you succumb to a bad idea after being up all night. Maybe a malware attack crippled an entire HR directory that NEEDS to get resolved ASAP. Thankfully, you can use the ‘/reset’ flag to reset the permissions to the default.
icacls Download /reset /t /c
[imagem]
Logo após eu ter concedido novamente a Billy os direitos ‘RW’ para a pasta de Download e seus conteúdos, eu executei o comando de redefinição. Como você pode ver, o nome dele está novamente ausente da ACL na aba Segurança. Simples e fácil.
Como salvar e restaurar ACLs
A wonderfully powerful feature included with icacls is the ability to backup and restore the ACL of an object to a file for safekeeping. Before you start a large script that changes or resets permissions on millions of files, you can first save the current state of those millions of files’ ACLs to a single file.
Se você perceber no meio do seu script que cometeu um erro de sintaxe, talvez você possa abortá-lo e então restaurar o estado das ACLs para toda a árvore com uma única execução do comando usando o parâmetro ‘/restore’! Vamos tentar!
icacls Download /save Download_ACL_Backup /t

Isso salvará toda a árvore de ACL da pasta de Download em um único arquivo chamado ‘Download_ACL_Backup’. Agora, eu recomendo FORTEMENTE que você NÃO mexa com esse arquivo de texto. Sim, parece algo maluco como Linux ou algo do tipo. ? Brincadeira.
Aqui está o estado atual da pasta de Download.

Agora, vamos supor que um administrador júnior concede a Billy Reinders acesso total ao local. Vamos também assumir que contém dados de RH aos quais Billy NÃO deve ter acesso.
icacls Download /grant reinders\breinders:F /t /c

Após o comando, verifico novamente e vejo que Billy tem controle total e explícito nesta pasta. Com uma única ação, posso assumir que as permissões serão revertidas para os padrões com uma execução deste comando.
icacls Download /reset /t /c

Depois de executar o comando de redefinição, você verá que o nome dele foi NOVAMENTE removido da ACL. Ele não tem mais acesso total à pasta. Lembrete – isso examinará toda a hierarquia de pastas.
Dica: Ao longo desse cenário, você pode ter percebido que Billy realmente tem acesso somente leitura porque o grupo de Usuários incorporado (do qual Billy é membro) possui permissões padrão de Leitura e Execução. Apenas um lembrete.
Como gerenciar níveis de integridade do Windows com icacls
Existe um recurso menos conhecido incorporado ao Windows chamado controle de acesso obrigatório (MAC). Ele existe há bastante tempo. No entanto, a Microsoft introduziu o controle de integridade obrigatório (MIC) no Windows Vista/ Windows Server 2008.
As permissões são definidas por regras fixas baseadas em políticas e geralmente não podem ser anuladas pelos usuários. Geralmente é referido como controle de integridade do Windows (WIC). O nível de integridade é usado para determinar o nível de proteção de um objeto no Windows. Basicamente, você sempre quer garantir que tenha as permissões corretas para seus usuários.
I won’t go into great detail here, but I can show you a few examples of how to use the icacls command with it. If we create a new folder, Test, in the Download directory, we can adjust its integrity level to ‘h’igh.
icacls Test /setintegritylevel h
Em resumo, o nível alto é sinônimo das permissões necessárias para executar uma tarefa ou processo como administrador (direitos de admin). Portanto, mesmo que Billy Reinders tivesse Controle Total desta pasta, a menos que de alguma forma tenha recebido permissões mágicas de administrador, E conseguiu executar o Explorador de Arquivos como administrador (o que ele não pode…), ele NÃO seria capaz de acessar esta pasta e seu conteúdo.
Portanto, essencialmente é mais uma camada de segurança e proteção que você poderia utilizar para proteger dados altamente sensíveis.
Como gerenciar a herança de permissões com icacls
Também podemos usar o comando icacls para visualizar e modificar a permissão de herança em arquivos e pastas. Isso nos permite definir permissões explícitas em uma pasta, mantendo as outras pastas configuradas para aceitar automaticamente as ACLs do contêiner pai.
Desativar herança em arquivos e pastas
Podemos desativar a herança em um arquivo ou pasta usando o parâmetro ‘/inheritance:d’. No meu exemplo, temos uma pasta Install na pasta Download. Você pode ver aqui que a pasta está configurada para herdar todas as suas permissões de cima.
icacls Download

Vamos remover a herança na pasta Install.
icacls Install /inheritance:d /t /c

Aí está. Você perceberá que todas as entradas ‘(I)’ desapareceram. Estas são agora todas permissões explícitas. E você pode ver abaixo a verificação pela GUI de que o botão ‘Ativar herança’ está disponível porque nós o desativamos.
Conclusão
O aspecto mais intrigante do icacls para mim é a robustez de poder criar scripts com este comando em projetos complicados. E, novamente, sem se preocupar com a confiabilidade do Explorer de Arquivos caso ele encontre um erro, trave, coisas assim.
I hope you learned more about using the command line to modify permissions. Please leave a comment or question below. Thank you!
Artigo Relacionado: