Como Usar o Comando Icacls para Gerenciar Permissões de Arquivos

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 esse comando neste guia.

Como usar o comando icacls

Com base em minha própria experiência pessoal, a modificação de permissões de arquivo 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 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.

Publicidade

No entanto, existem inúmeros cenários abrangendo diferentes níveis de escopo nos quais a GUI simplesmente não é tão robusta quanto gostaríamos. Se formos alterar permissões em 22 milhões de arquivos e pastas, queremos fazer isso corretamente!

O que é uma lista de controle de acesso (ACL)?

Nos sistemas Windows e sistemas de arquivos NTFS, cada objeto de arquivo (arquivo, pasta) possui uma lista de controle de acesso. Esta lista é composta por 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 possuem 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. Deixe-me listar as permissões básicas de alto nível disponíveis para uma ACL:

Propaganda

  • Acesso total (F)
  • Acesso de modificação (M) (inclui ‘excluir’)
  • Acesso de leitura e execução (RX)
  • Acesso somente leitura (R)
  • Acesso somente escrita (W)

Há cerca de uma dúzia ou mais de permissões ‘avançadas’, mas essas estão além do escopo deste artigo.

Limitações do Explorador de Arquivos

Agora, se eu fosse o gerente de programa na Microsoft para o File Explorer (NÃO é um trabalho que eu particularmente invejo), estas são as características que eu adicionaria. E acredite em mim, eu tenho querido que eles adicionem essas há décadas!

Vamos supor que você esteja 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 recursivamente parecem corretas.

Então, você vai até a raiz da sua árvore, entra na guia Segurança, e faz algumas alterações na lista de controle de acesso. Você marca a opção para modificar recursivamente todos os 22 milhões de arquivos e pastas abaixo da raiz. Ele começa a fazer alterações e em seguida lança algumas janelas de confirmação para você sobre fazer alterações em arquivos do sistema, arquivos somente leitura, etc.

Publicidade

Agora, aqui está o meu pedido – No ‘assistente’ simplificado 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 terminasse, com um link para baixar a saída bruta do arquivo para que eu possa voltar e verificar quaisquer erros ou avisos que surgiram.

Não, eu não sei se a Microsoft algum dia oferecerá um conjunto de recursos tão maravilhoso, robusto e ‘configure e esqueça’ quanto este. Então, enquanto isso, vamos para o poder da linha de comando e scripting. É aí que entra o comando icacls integrado.

Compreendendo a sintaxe do icacls

A sintaxe do icacls é realmente bastante simples 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. Iremos cobrir tudo isso em breve. Aqui está um exemplo do que acontece quando você simplesmente executa o seguinte comando e em seguida um nome de arquivo.

icacls Excellent.txt
Using icacls to view current permissions

Ele irá gerar uma ACE por linha, então usando o exemplo acima:

  • A conta ‘SYSTEM’ integrada tem permissões de acesso de Herdado (I) e Completo (F)
  • O grupo Administradores integrado possui as mesmas permissões
  • O grupo Usuários integrado possui permissões de Herdado (I), Leitura (R) e Execução (X).

É possível usar o icacls no PowerShell?

Bem, como você pode ver pelo meu exemplo acima e captura de tela, certamente é possível usar o PowerShell para usar o comando icacls. Você apenas precisa estar ciente de algumas variáveis de ambiente que precisam ser referenciadas de forma um pouco diferente.

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 futuro post! ?

Utilizando o icacls para configurar permissões para um arquivo ou pasta

Porque o comando icacls é integrado ao 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 navegar em documentação semelhante da Microsoft para o comando icacls nesta página.

Como exibir a ACL atual para um objeto

Certo, acho que já foi informação suficiente… 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
Using icacls to view permissions on a folder

Aqui, ‘Download’ é uma pasta com arquivos e subpastas. Como você 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 possui direitos totais e permissões herdadas. O ‘(OI)’ mostra que os outros objetos neste diretório herdarão este ACE. O ‘(CI)’ mostra que outras pastas neste diretório herdarão novamente este ACE. (Este diretório não acontece de ter nenhum, mas se tivesse, 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 leitura (R) para o arquivo Excellent.txt.

icacls Excellent.txt /grant reinders\breinders:R /t /c
Granting permissions to a file for a user

O comando anterior foi concluído com sucesso; em seguida, validei minhas alterações verificando as permissões – agora vemos que ‘REINDERS\breinders’ possui permissões de somente leitura (R). E, como NÃO vemos um ‘I’ listado, sabemos que não é herdado, é explícito.

Só para lembrar, o switch ‘/t’ é usado para definir as permissões de forma recursiva em toda a árvore de pastas. O switch ‘/c’ indica ao comando para continuar mesmo se encontrar erros.

Removendo permissões de um arquivo ou pasta

Em vez de usar o switch /grant para 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
Using the /remove switch to remove permissions to a file for a user

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 a ACL para Billy desapareceu. Excelente! ?

Negando permissões a um arquivo ou pasta

Geralmente, você vai querer evitar o uso de permissões de negar ‘explícitas devido à complexidade que isso permeia em sua infraestrutura de permissão geral. Para a maioria das situações, você pode contar com uma negação implícita, 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 for membro de nenhum grupo listado na ACL, esse usuário é assumido (corretamente) pelo Windows como NÃO tendo permissões sobre esse objeto. No entanto, o exemplo a seguir ilustra como isso pode sair do controle – se um usuário for membro de dois grupos e um grupo tiver acesso concedido enquanto o outro grupo tiver acesso negado, esse usuário será negado. Isso, por si só, faz sentido, mas pode se tornar muito complicado ao tentar solucionar esse tipo de situação.

No entanto, se você quiser adicionar uma permissão de negação explicitamente, você pode usar a opção ‘/deny’ geral para fazer isso.

icacls Download /deny reinders\breinders:(OI)(CI)F /t /c
Using the /deny switch to put explicit deny permissions on a file or folder structure

Aqui você pode ver o comando que eu executei; ele foi concluído com sucesso. Em seguida, verifiquei a guia Segurança da pasta de Download – você pode ver que Billy tem permissões de Negação sobre o objeto e todos os seus conteúdos.

Como redefinir a ACL para 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 depois de eu ter concedido novamente a Billy os direitos ‘RW’ para a pasta de Download e seus conteúdos, executei o comando de redefinição. Como você pode ver, seu nome novamente está ausente na ACL da guia 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.

Caso você perceba no meio do seu script que cometeu um erro de sintaxe, talvez você possa abortá-lo e, em seguida, restaurar o estado das ACLs em toda a árvore com uma execução do comando usando o parâmetro ‘/restore’! Vamos tentar!

icacls Download /save Download_ACL_Backup /t
What the backed-up text file looks like with all the ACLs – wowzers!

Isso irá salvar toda a árvore de ACLs da pasta 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 louco como Linux ou algo assim. ? Brincadeira.

Aqui está o estado atual da pasta Download.

The ‘Download’ folder before Junior performs his ill-advised permissions changes…

Agora, vamos supor que um administrador júnior concede a Billy Reinders acesso total ao local. Vamos também supor que ele contenha dados de RH aos quais Billy NÃO deve ter acesso.

icacls Download /grant reinders\breinders:F /t /c
Our Junior Admin has granted Billy Reinders Full access to the location

Após o comando, eu verifico novamente e vejo que Billy tem controle total e explícito nesta pasta. Com uma única vez, pode-se presumir que as permissões reverterão para os padrões com uma execução deste comando.

icacls Download /reset /t /c
After running the /reset switch, we see Billy no longer has explicit access!

Depois de executar o comando de redefinição, você verá que o nome dele é NOVAMENTE removido da ACL. Ele não tem mais acesso total à pasta. Lembrete – isso irá escanear 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 integrado (do qual Billy faz parte) possui permissões padrão de Leitura e Execução. Apenas como uma observação.

Como gerenciar níveis de integridade do Windows com icacls

Existe um recurso pouco conhecido integrado 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

Para resumir, 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 ele fosse de alguma forma concedido permissões mágicas de administrador, E fosse capaz de 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.

Então, essencialmente, é mais uma camada de segurança e proteção que você poderia usar 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 demais pastas configuradas para aceitar automaticamente as ACLs do contêiner pai.

Desativar a 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 Instalar na pasta Downloads. Aqui você pode ver que a pasta está configurada para herdar todas as suas permissões de cima.

icacls Download
Disabling inheritance on the Install folder leaving only explicit ACEs

Vamos remover a herança na pasta Instalar.

icacls Install /inheritance:d /t /c
We can see that inheritance has been disabled as the ‘Enable inheritance’ button/toggle is available

Aqui está. Você notará que todas as entradas ‘(I)’ desapareceram. Essas são agora todas permissões explícitas. E você pode ver abaixo a verificação na GUI de que o botão ‘Ativar herança’ está disponível porque o desativamos.

Conclusão

O aspecto mais intrigante do icacls para mim é a robustez de poder criar scripts com este comando para projetos complicados. E, novamente, não ter que se preocupar com a confiabilidade do Explorador 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:

Source:
https://petri.com/icacls-command/