Como forçar o PowerShell a não permitir uma janela de comando interativa

7

Eu sou um administrador Citrix e gostaria de restringir a população geral de usuários em nossos servidores de usar o PowerShell para execute seus próprios scripts ou use-os de forma interativa. Nós já estamos proibindo o uso do prompt de comando via GPO , mas com o PowerShell disponível, isso é basicamente inútil.

Descobri que o Powershell.exe tem uma opção de linha de comando de -NoInteractive , que permitirá que um usuário execute um script, mas não fornece um prompt de comando interativo. O problema é que eu não encontrei uma maneira de forçar o powershell a operar dessa maneira. Cheguei mesmo a criar um script de inicialização C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1 que verificaria o parâmetro -NoInteractive , mas os usuários podem ignorar isso simplesmente iniciando o Powershell.exe com o parâmetro -NoProfile .

O outro problema é que usamos muitos scripts do PowerShell para iniciar aplicativos para usuários e partes do script de login são escritas no PowerShell e precisam ser executadas no contexto do usuário, portanto, não consigo simplesmente ACL o arquivo EXE . Eu preciso deles para poder usar o PowerShell, apenas não interativamente. Por fim, queremos impor a política de execução AllSigned e assinar todos os scripts, para que a única coisa que um usuário possa executar seja um script que nós (os administradores) criamos e / ou assinamos.

Eu tentei googling para esta resposta e encontrei muitas pessoas usando -NoInteractive , mas eu não encontrei um exemplo onde alguém tentou forçá-lo. Alguma idéia?

    
por SalamanderMN 07.11.2014 / 17:27

2 respostas

10

Acho que você está entendendo mal o uso do switch -NonInteractive; você ainda pode executar powershell -noninteractive e obter um prompt interativo. O comutador não interativo destina-se a cenários de script automatizados, em que você não deseja que o powershell envie um prompt para o usuário e aguarde uma resposta. Por exemplo, em uma janela não interativa do PowerShell, se você executar Get-Credential sem nenhum parâmetro, ele falhará imediatamente em vez de solicitar um nome de usuário e senha. Não-interativo não funcionará como um mecanismo de segurança.

Um método melhor é proteger o que você está tentando proteger, não as ferramentas que um usuário pode usar para acessá-lo.

    
por 07.11.2014 / 20:39
1

Eu acredito que tenho uma solução que funcionará, embora não seja particularmente bonita. O usuário jbsmith estava no caminho certo. Se eu acabar acendendo o powershell.exe para remover as permissões Executar do grupo Usuários, isso os impedirá de executar uma janela interativa. Para esses scripts do PowerShell que os usuários precisam executar por meio do script de login, podemos compilar esses scripts em um EXE usando PowerGUI e que permite que os scripts sejam executados, desde que isso não chame o executável do PowerShell.

Estamos debatendo se desejamos dar mais um passo adiante e usar um GPO do AppLocker para restringir Scripts do PowerShell apenas para aqueles que nós abençoamos. É claro que podemos colocar essas restrições apenas na média dos usuários que não são de TI e permitir que nossos administradores continuem a usar o PowerShell normalmente. Isso envolverá alguma sobrecarga administrativa para manter, portanto, a parte do AppLocker pode não se concretizar.

    
por 14.11.2014 / 21:55

Tags