Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Há cenários em que você deseja hospedar uma sessão do PowerShell que, por motivos de segurança, foi limitada a um subconjunto de comandos do PowerShell.
Por definição, uma sessão restrita é aquela em que não é permitido usar Import-Module. Pode haver outras limitações, mas esse é o requisito principal. Se o usuário puder importar um módulo, ele poderá executar o que quiser.
Exemplos de sessões restritas incluem:
- Just-Enough-Administration (JEA)
- Implementações de comunicação remota restrita personalizadas, como os módulos do Exchange e do Teams
Para a maioria dos administradores do sistema, o JEA fornece a melhor experiência para criar sessões restritas e deve ser sua primeira opção. Para obter mais informações sobre JEA, consulte a visão geral do JEA.
Recomendações para implementações de sessão personalizadas
Se o cenário exigir uma implementação personalizada, você deverá seguir essas recomendações.
Limitar o uso e os recursos de provedores do PowerShell
Examine como os provedores permitidos são usados para garantir que você não crie vulnerabilidades em sua implementação de sessão restrita.
Aviso
Não permita o provedor FileSystem . Se os usuários puderem gravar em qualquer parte do sistema de arquivos, será possível ignorar completamente a segurança.
Não permita o provedor de certificados. Com o provedor habilitado, um usuário pode obter acesso a chaves privadas armazenadas.
Não permitir comandos que possam criar novos runspaces
Aviso
O recurso de compatibilidade do Windows no PowerShell 7 cria um novo runspace para hospedar o Windows PowerShell. Não permita comandos que seriam executados por meio do recurso de compatibilidade do Windows. Os *-Job cmdlets podem criar novos runspaces sem as restrições.
Não permita o Trace-Command cmdlet.
Aviso
O uso de Trace-Command traz todos os comandos rastreados para a sessão.
Não crie suas próprias implementações de proxy para os comandos restritos
O PowerShell tem um conjunto de comandos de proxy para cenários de comando restrito. Esses comandos de proxy garantem que os parâmetros de entrada não possam comprometer a segurança da sessão. Os seguintes comandos têm proxies restritos:
Exit-PSSessionGet-CommandGet-FormatDataGet-HelpMeasure-ObjectOut-DefaultSelect-Object
Se você criar sua própria implementação desses comandos, poderá inadvertidamente permitir que os usuários executem código proibido pelos comandos de proxy JEA.
Você pode executar o seguinte comando para obter uma lista de comandos restritos:
$commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
[System.Management.Automation.SessionCapabilities]::RemoteServer
)
Você pode examinar os comandos de proxy restritos usando o seguinte comando:
$commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
[System.Management.Automation.SessionCapabilities]::RemoteServer
)
$getHelpProxyBlock = [System.Management.Automation.ProxyCommand]::Create($commands['Get-Help'])
Configurar a sessão para usar o modo NoLanguage
O modo PowerShell NoLanguage desabilita completamente a linguagem de script do PowerShell. Você não pode executar scripts ou usar variáveis. Você só pode executar comandos e cmdlets nativos.
Para obter mais informações sobre modos de linguagem, consulte about_Language_Modes.
Não permita que o depurador seja usado na sessão
Por padrão, o depurador do PowerShell executa o código no FullLanguage modo. Defina a propriedade UseFullLanguageModeInDebugger no SessionState como false.
Para obter mais informações, consulte UseFullLanguageModeInDebugger.