Usuários e permissões (visão geral)
Esta aula apresenta uma visão geral sobre usuários e permissões no Windows, focando em contas locais, ACLs com Get-Acl, permissões de arquivo e cuidados essenciais. Você aprenderá a gerenciar contas, inspecionar e modificar permissões usando PowerShell, além de boas práticas de segurança.
Bem-vindo a esta aula sobre usuários e permissões no Windows! Aqui você vai entender como o sistema operacional controla o acesso a recursos, como arquivos e pastas, e como o PowerShell pode ser usado para gerenciar contas locais e permissões de forma eficiente. Este é um tema fundamental para administradores de sistemas e para quem deseja automatizar tarefas de segurança.
Vamos explorar desde os conceitos de contas locais até a manipulação de ACLs (Access Control Lists), passando por exemplos práticos e cuidados importantes. Ao final, você terá uma base sólida para administrar permissões com segurança e precisão.
Contas locais
Contas locais são usuários e grupos definidos no próprio computador, utilizados para autenticação e autorização em sistemas que não pertencem a um domínio. No Windows, essas contas são armazenadas no SAM (Security Account Manager) e podem ser gerenciadas por meio de ferramentas gráficas ou via PowerShell.
Com o PowerShell, podemos listar, criar, modificar e remover contas locais usando os cmdlets do módulo Microsoft.PowerShell.LocalAccounts (disponível no Windows 10/11 e Windows Server 2016+). Vamos ver alguns exemplos:
# Listar todos os usuários locais
Get-LocalUser
# Listar todos os grupos locais
Get-LocalGroup
# Criar um novo usuário
New-LocalUser -Name "novo_usuario" -Password (ConvertTo-SecureString "SenhaForte!123" -AsPlainText -Force) -FullName "Novo Usuário" -Description "Conta criada para teste"
# Adicionar um usuário a um grupo
Add-LocalGroupMember -Group "Administradores" -Member "novo_usuario"
# Remover um usuário
Remove-LocalUser -Name "novo_usuario"É importante notar que a criação de usuários exige privilégios de administrador. Além disso, o cmdlet New-LocalUser exige que a senha seja fornecida como uma string segura. Você também pode usar Set-LocalUser para alterar propriedades, como a senha ou a descrição.
ACLs (Get-Acl)
ACL (Access Control List) é uma lista de permissões associada a um objeto (arquivo, pasta, chave de registro, etc.) que define quem pode acessá-lo e de que forma. No PowerShell, o cmdlet Get-Acl permite visualizar a ACL de um item, retornando um objeto System.Security.AccessControl.FileSecurity ou similar.
Com Get-Acl, você pode inspecionar as permissões atuais, como listar as regras de acesso (Access Rules) e identificar proprietários. Veja um exemplo:
# Obtém a ACL de um arquivo
$acl = Get-Acl -Path "C:\Exemplo\arquivo.txt"
# Exibe o proprietário
$acl.Owner
# Exibe todas as regras de acesso
$acl.Access | Format-Table IdentityReference, FileSystemRights, AccessControlType, IsInherited -AutoSizeAs regras de acesso mostram a identidade (usuário ou grupo), os direitos (como FullControl, Read, Write), o tipo (Allow ou Deny) e se a permissão é herdada. Essas informações são essenciais para auditar e corrigir permissões indevidas.
Para modificar a ACL, utilizamos Set-Acl em conjunto com Get-Acl e métodos como AddAccessRule ou RemoveAccessRule. Isso permite um controle fino sobre permissões, como veremos na próxima seção.
Permissões de arquivo
As permissões de arquivo no Windows são controladas por ACLs, que podem ser herdadas de pastas pai. O PowerShell oferece várias maneiras de gerenciar essas permissões, seja usando cmdlets nativos ou a classe System.Security.AccessControl.
Um dos métodos mais comuns é usar Get-Acl para obter a ACL, modificar as regras e aplicar com Set-Acl. Vamos ver um exemplo de como adicionar uma permissão de leitura para um usuário específico:
# Caminho do arquivo
$path = "C:\Exemplo\arquivo.txt"
# Obter a ACL atual
$acl = Get-Acl -Path $path
# Definir a regra de permissão
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMINIO\usuario", "Read", "Allow")
# Adicionar a regra à ACL
$acl.AddAccessRule($rule)
# Aplicar a nova ACL
Set-Acl -Path $path -AclObject $aclTambém é possível remover permissões usando RemoveAccessRule ou substituir completamente a ACL com SetAccessRuleProtection para controlar a herança. Para tarefas mais simples, alguns administradores usam icacls (uma ferramenta de linha de comando) invocada do PowerShell, mas os cmdlets nativos são mais integrados.
Outra abordagem é usar o módulo NtfsSecurity (de terceiros) que simplifica a gestão de permissões, mas para fins de aprendizado, os cmdlets nativos são suficientes.
Cuidados
Ao trabalhar com permissões, alguns cuidados são essenciais para evitar problemas de segurança ou indisponibilidade de serviços. Primeiro, sempre teste em um ambiente de desenvolvimento antes de aplicar em produção. Erros de permissão podem bloquear o acesso a arquivos críticos.
Evite conceder permissões excessivas, como FullControl para todos. O princípio do menor privilégio deve ser seguido: dê apenas as permissões necessárias para cada usuário ou grupo. Além disso, tenha cuidado com a herança de permissões: alterar permissões em uma pasta pode afetar todos os subitens.
Outra recomendação é usar grupos em vez de usuários individuais para facilitar a administração. E sempre documente as alterações feitas, para que outros administradores possam entender o que foi modificado e por quê.
Por fim, lembre-se de que a execução de comandos de permissão exige privilégios elevados. Portanto, execute o PowerShell como administrador quando necessário.
Boas práticas
Para finalizar, aqui vão algumas boas práticas ao gerenciar usuários e permissões:
- Use nomes de usuários e grupos padronizados e significativos.
- Desative contas que não são mais utilizadas em vez de excluí-las, para preservar auditoria.
- Revise periodicamente as permissões de arquivos sensíveis.
- Utilize o PowerShell para automatizar a aplicação de permissões consistentes.
- Considere usar o Just Enough Administration (JEA) para limitar o que os usuários podem fazer com o PowerShell.
Referências
- Documentação do módulo Microsoft.PowerShell.LocalAccounts
- Get-Acl - Documentação oficial
- Set-Acl - Documentação oficial
- Atribuições de direitos de usuário no Windows
- ACLs na documentação da Microsoft
- Gerenciando arquivos e pastas com PowerShell
Exercícios
- Liste todos os usuários locais do seu sistema usando PowerShell e exiba apenas os nomes e a descrição.
- Crie um novo usuário local chamado "teste_perm" com a senha "P@ssw0rd" e adicione-o ao grupo "Usuários".
- Obtenha a ACL de um arquivo de sua escolha e exiba o proprietário e as regras de acesso em formato de tabela.
- Adicione uma permissão de leitura para o usuário "teste_perm" em um arquivo específico (use um caminho fictício).
- Explique por que é importante seguir o princípio do menor privilégio ao atribuir permissões e dê um exemplo de como aplicá-lo no PowerShell.
Get-LocalUser | Select-Object Name, Description$password = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
New-LocalUser -Name "teste_perm" -Password $password
Add-LocalGroupMember -Group "Usuários" -Member "teste_perm"$acl = Get-Acl -Path "C:\caminho\para\arquivo.txt"
$acl.Owner
$acl.Access | Format-Table IdentityReference, FileSystemRights, AccessControlType, IsInherited -AutoSize$path = "C:\dados\arquivo.txt"
$acl = Get-Acl -Path $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("teste_perm", "Read", "Allow")
$acl.AddAccessRule($rule)
Set-Acl -Path $path -AclObject $acl$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("usuario", "ReadAndExecute", "Allow") Isso permite leitura e execução, mas não escrita, minimizando danos potenciais.