Política de execução
Esta aula explora as políticas de execução do PowerShell, explicando sua finalidade, os diferentes níveis disponíveis, como configurá-las com Set-ExecutionPolicy e as boas práticas recomendadas. Inclui exemplos práticos, exercícios com respostas e referências oficiais.
As políticas de execução são um recurso de segurança do PowerShell que controla as condições sob quais o PowerShell carrega arquivos de configuração e executa scripts. Elas ajudam a prevenir a execução de scripts mal-intencionados, mas também podem ser configuradas para permitir scripts confiáveis. Nesta aula, vamos explorar em detalhes as políticas de execução, desde sua finalidade até as boas práticas de configuração.
Vamos entender por que elas existem, os diferentes níveis de restrição, como usar o cmdlet Set-ExecutionPolicy para alterar a política em diferentes escopos, e como aplicar isso de forma segura no seu ambiente.
Execution policies
As políticas de execução determinam se e como os scripts PowerShell podem ser executados no sistema. Elas são uma camada de segurança que impede a execução acidental ou maliciosa de scripts. A política é aplicada em diferentes escopos: Máquina, Processo, Usuário e CurrentUser (que é um alias para Usuário).
Existem várias políticas predefinidas, cada uma com um nível diferente de restrição:
- Restricted: É a política padrão no Windows. Permite comandos individuais, mas não permite executar scripts (arquivos .ps1).
- AllSigned: Permite executar scripts, mas todos os scripts e arquivos de configuração devem ser assinados por um editor confiável. Isso inclui scripts escritos no computador local.
- RemoteSigned: Permite executar scripts locais sem assinatura, mas scripts baixados da internet devem ser assinados digitalmente. É uma política comum para desenvolvedores.
- Unrestricted: Permite executar todos os scripts, mas avisa quando um script baixado da internet é executado. Não é recomendado para produção.
- Bypass: Nada é bloqueado e nenhum aviso é exibido. Usado em situações de automação onde scripts são incorporados em aplicações maiores.
- Undefined: A política não foi definida no escopo atual. A política efetiva será a do próximo escopo (por exemplo, se no escopo do usuário estiver Undefined, será usada a política da máquina).
Além disso, a política pode ser definida para plataformas específicas (Windows, macOS, Linux) usando a propriedade ExecutionPolicy do objeto Get-ExecutionPolicy.
Para ver a política atual em cada escopo, usamos o cmdlet Get-ExecutionPolicy -List:
Get-ExecutionPolicy -List
Isso exibe uma tabela com todos os escopos e a política definida em cada um.
Set-ExecutionPolicy
O cmdlet Set-ExecutionPolicy é usado para alterar a política de execução em um escopo específico. Sua sintaxe básica é:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <Scope>
Por exemplo, para definir a política como RemoteSigned para o usuário atual, usamos:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Para definir para a máquina (requer privilégios de administrador):
Set-ExecutionPolicy AllSigned -Scope LocalMachine
É importante notar que, ao definir uma política que é mais restritiva, o PowerShell solicita confirmação. Para evitar a confirmação, use o parâmetro -Force:
Set-ExecutionPolicy Unrestricted -Scope Process -Force
O escopo Process afeta apenas a sessão atual do PowerShell e é útil para testes temporários.
Também é possível definir a política via Política de Grupo (GPO) em ambientes corporativos, mas isso não será abordado em detalhes aqui.
Por que existe
As políticas de execução existem principalmente para proteger o sistema contra scripts maliciosos. Sem elas, qualquer script poderia ser executado sem aviso, facilitando a propagação de malware. A política ajuda a garantir que apenas scripts confiáveis sejam executados.
Além da segurança, as políticas também ajudam a evitar erros acidentais. Por exemplo, um usuário pode baixar um script da internet e executá-lo sem querer, causando alterações indesejadas. Com a política RemoteSigned, esse script seria bloqueado até ser assinado ou explicitamente desbloqueado pelo usuário.
Historicamente, o PowerShell era o alvo de ataques porque os scripts eram fáceis de executar. A política de execução é uma das primeiras defesas implementadas para mitigar esse risco.
Boas práticas
Ao trabalhar com políticas de execução, algumas boas práticas devem ser seguidas:
- Use a política mais restritiva possível: Para a maioria dos usuários,
Restrictedé suficiente. Desenvolvedores podem usarRemoteSignedouAllSigned. - Evite usar
UnrestrictedouBypassem produção: Essas políticas desativam proteções importantes e aumentam o risco de execução de scripts maliciosos. - Prefira escopos específicos: Defina a política no escopo
CurrentUserem vez deLocalMachinequando possível, para não afetar todos os usuários do sistema. - Assine scripts confiáveis: Se você desenvolve scripts para distribuição, assine-os com um certificado de código para que possam ser executados sob
AllSignedouRemoteSigned. - Documente as políticas: Em ambientes corporativos, mantenha uma documentação clara das políticas aplicadas em cada máquina ou grupo.
Uma prática comum para desenvolvedores é usar o escopo Process temporariamente para testes:
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
Isso permite executar scripts não assinados na sessão atual, sem alterar a política permanente.
Referências
- Documentação oficial do Set-ExecutionPolicy
- Documentação oficial do Get-ExecutionPolicy
- Sobre políticas de execução (about_Execution_Policies)
- Diretrizes de segurança do PowerShell
- Curso de PowerShell 101 (inclui seção sobre políticas)
- Exemplos de scripts e políticas (site oficial)
Exercícios
- Qual é a política de execução padrão no Windows e o que ela permite?
- Como você verificaria a política de execução atual para o escopo do usuário?
- Escreva o comando para definir a política como
RemoteSignedapenas para a sessão atual. - Por que é recomendado evitar a política
Unrestrictedem produção? - Qual é a diferença entre
AllSignedeRemoteSigned?
Restricted. Ela permite executar comandos individuais, mas não permite executar scripts (.ps1).
Get-ExecutionPolicy -Scope CurrentUser ou simplesmente Get-ExecutionPolicy (que mostra a política efetiva).
Set-ExecutionPolicy RemoteSigned -Scope Process
Unrestricted permite executar todos os scripts sem restrições, apenas exibindo um aviso para scripts baixados da internet. Isso aumenta o risco de execução de scripts maliciosos sem proteção adequada.
AllSigned exige que todos os scripts (locais ou baixados) sejam assinados por um editor confiável. RemoteSigned exige assinatura apenas para scripts baixados da internet; scripts locais podem ser executados sem assinatura.
Observações finais
É importante lembrar que a política de execução não é uma barreira de segurança completa. Ela pode ser contornada por scripts maliciosos que se aproveitam de outras vulnerabilidades. Portanto, ela deve ser usada em conjunto com outras práticas de segurança, como controle de acesso, assinatura de código e auditoria.
Além disso, a política de execução pode ser definida via GPO (Group Policy) em ambientes corporativos, o que garante uma aplicação centralizada. Isso é útil para manter consistência e segurança em toda a organização.
Finalmente, ao desenvolver scripts, sempre teste em um ambiente controlado antes de aplicar em produção, e mantenha suas políticas de execução alinhadas com as necessidades de cada ambiente.