Gerenciar permissões de arquivos e pastas via linha de comando é uma habilidade essencial para qualquer “power user” ou administrador de sistemas. Enquanto a interface gráfica (GUI) do Windows é intuitiva, o CMD e o PowerShell oferecem precisão cirúrgica e a capacidade de automatizar tarefas em milhares de arquivos simultaneamente.
Aqui está o guia definitivo para dominar o icacls (no CMD) e os cmdlets de ACL (no PowerShell).
🛠️ 1. Usando o CMD com o comando icacls
O icacls é o sucessor moderno do antigo cacls. Ele é a ferramenta padrão para exibir e modificar listas de controle de acesso (ACLs).
Sintaxe Básica
DOS
icacls "caminho_do_arquivo" /grant Usuário:(Permissões)
Principais Códigos de Permissão
| Código | Descrição |
| F | Controle Total (Full Access) |
| M | Modificar (Modify) |
| RX | Ler e Executar (Read and Execute) |
| R | Somente Leitura (Read-only) |
| W | Somente Gravação (Write-only) |
Exemplos Práticos
- Conceder controle total a um usuário:
icacls "C:\Dados" /grant NomeUsuario:F - Remover todas as permissões de um usuário:
icacls "C:\Dados" /remove NomeUsuario - Aplicar recursivamente (em todos os arquivos e subpastas):
icacls "C:\Dados" /grant NomeUsuario:M /T
⚡ 2. Usando o PowerShell (Método Objeto)
O PowerShell trata as permissões como objetos, o que é muito mais poderoso para scripts complexos, embora a sintaxe seja um pouco mais longa.
O Fluxo de Trabalho
Para alterar uma permissão no PowerShell, você geralmente segue três passos: Obter a regra atual, Modificar o objeto e Aplicar de volta.
PowerShell
# 1. Obter a ACL atual do arquivo
$acl = Get-Acl "C:\Pasta\Arquivo.txt"
# 2. Definir a nova regra de acesso (Usuário, Permissão, Tipo de Controle)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("NomeUsuario", "FullControl", "Allow")
# 3. Adicionar a regra ao objeto ACL
$acl.SetAccessRule($rule)
# 4. Aplicar a ACL modificada ao arquivo
Set-Acl "C:\Pasta\Arquivo.txt" $acl
🧩 3. Gerenciando Herança
A herança é o que faz com que arquivos dentro de uma pasta “puxem” as permissões da pasta pai automaticamente. Às vezes, você precisa quebrar esse vínculo.
- No CMD (icacls):
- Desativar herança e copiar as permissões atuais:
icacls "C:\Pasta" /inheritance:d - Desativar herança e remover todas as permissões herdadas:
icacls "C:\Pasta" /inheritance:r - Reativar herança:
icacls "C:\Pasta" /inheritance:e
- Desativar herança e copiar as permissões atuais:
- No PowerShell:PowerShell
$acl = Get-Acl "C:\Pasta" # O primeiro 'true' bloqueia a herança, o segundo 'false' remove as permissões herdadas $acl.SetAccessRuleProtection($true, $false) Set-Acl "C:\Pasta" $acl
📊 Comparativo: CMD vs. PowerShell
| Recurso | icacls (CMD) | Get-Acl/Set-Acl (PowerShell) |
| Velocidade | Mais rápido para comandos simples. | Ligeiramente mais lento devido aos objetos. |
| Recursividade | Muito simples com a flag /T. | Exige o uso de Get-ChildItem e Pipes. |
| Automação | Limitada. | Extremamente poderosa e flexível. |
| Curva de Aprendizado | Baixa (mais fácil de decorar). | Média/Alta. |
[!CAUTION]
Dica de Segurança: Sempre execute o terminal como Administrador ao lidar com permissões. Se você cometer um erro e perder o acesso a uma pasta, pode usar o comando
takeown /f "caminho"para retomar a propriedade do arquivo antes de redefinir as permissões comicacls.
- Como usar o cmdlet Set-PSFLoggingProvider no PowerShell para aprimorar o monitoramento de logs.
- Como personalizar esquemas de cores no prompt de comando do Windows
- Descubra como implementar o altruísmo em um ambiente Windows.
- Como resolver o erro 0x8007f026 STATUS_WININET_LOAD_FAILED no Windows 10 e 11
- Como criar e gerenciar uma conta da Microsoft no Windows
