Segurança

Novos PowerToys de elevação para o Windows Vista

Michael Murgolo

 

À primeira vista:

  • Executar como Administrador para Ferramentas de Scripts de Terceiros
  • Executar como Outro Usuário
  • Prompt Aqui como Sistema para CMD e Windows PowerShell
  • Gadget de Elevação Arrastar-e-Soltar

Faça o download do código deste artigo:: Elevation2008_06.exe (197KB)

Bem-vindo a outra edição do PowerToys de elevação para Windows Vista. Dei uma olhada de perto nesse assunto na edição de junho de 2007 da TechNet Magazine. Aqui estamos um ano depois. Dessa vez, quero mostrar a você como expandi a funcionalidade de Executar como Administrador para algumas

das minhas ferramentas de scripts de terceiros favoritas, quero demonstrar como você pode substituir um bom recurso do Windows® XP removido no Windows Vista® e olhar algumas das ferramentas úteis incluídas nos PowerToys de elevação.

Executar como Administrador para Ferramentas de Scripts Adicionais

Um tópico que discuti no artigo anterior (disponível em technet.microsoft.com/magazine/cc162321.aspx) foi habilitar a opção Executar como Administrador para as ferramentas nativas de script do Windows. Para esse artigo, criei PowerToys Executar como Administrador para algumas ferramentas de script de terceiros:

O código de cada um deles está incluído no download deste artigo, que você encontrará em technetmagazine.com. Os arquivos reais são chamados ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf e ElevateKiXtart.inf, respectivamente. Para AutoIt v3, AutoHotkey e ActivePerl, a configuração é bem simples. Basta baixar o aplicativo correspondente e instalá-lo no local padrão. Após ter instalado os aplicativos nos quais está interessado, você pode instalar o PowerToy Executar como Administrador apropriado para cada ferramenta.

Infelizmente, o KiXtart 2010 não fornece um instalador. Portanto, para certificar-se de que o KiXtart está instalado em um local padrão para que meu PowerToy funcione adequadamente, eu forneci um arquivo INF que instalará o KiXtart 2010 (v 4.60) em Arquivos de Programas\KiXtart e registrará a extensão de arquivo .kix.

Vá para www.kixtart.org/?p=downloads, baixe o KiX2010_460.zip e descompacte-o em uma pasta. Copie o arquivo Install_KiXtart.inf (incluído no download de código que acompanha este artigo) na mesma pasta. Em seguida, clique com o botão direito do mouse em Install_KiXtart.inf e selecione Install (Instalar). Depois, você pode simplesmente instalar o PowerToy ElevateKiXtart.inf.

PowerToy Executar como Outro Usuário

O UAC (Controle de Conta de Usuário) foi criado para tornar o sistema operacional menos vulnerável a malware por fazer com que os usuários, até mesmo os Administradores, executem a maioria dos aplicativos com privilégios de usuário padrão. O UAC oferece potencial de elevação para tarefas administrativas e outras funções de aplicativos. Esse potencial de elevação é fornecido pela opção Executar como Administrador, que você obtém ao clicar com o botão direito do mouse em arquivos executáveis. Os PowerToys de elevação que discuti na edição de junho de 2007 estenderam esse recurso de trabalhar em outro arquivo e tipos de objetos.

A funcionalidade criada no Windows Vista funciona bem para várias tarefas administrativas. No entanto, um cenário importante ficou de fora para o Windows Vista. Vários departamentos de TI possuem uma política na qual os administradores de rede usam uma conta de usuário para suas tarefas diárias (usando email, criando documentos e assim por diante) e outra conta é usada apenas para a administração da rede (ou administração dos computadores locais).

Isso é feito para ajudar a diminuir o risco de que, se um administrador de rede acidentalmente executar malware fazendo suas tarefas diárias, ele não comprometerá seu sistema inteiro — ou o domínio no qual se encontra. Isso foi atingido no Windows XP usando a opção de atalho Executar como... Mas essa opção foi eliminada no Windows Vista porque foi substituída pela opção Executar como Administrador.

A ferramenta de linha de comando runas, no entanto, ainda existe no Windows Vista. Infelizmente, ela não pode ser usada para as tarefas de conta dupla mais comuns — executando snap-ins MMC (Console de Gerenciamento Microsoft®). Por exemplo, digamos que tenham sido delegadas a você algumas tarefas de gerenciamento de conta no Active Directory®. Você está executando como um usuário padrão para as tarefas diárias e sua conta de administração da rede também é membro do grupo de administradores locais (então, você pode instalar ferramentas de gerenciamento da rede quando necessário) em um computador com Windows Vista com UAC habilitado. Agora você deseja iniciar o ADU&C (Usuários e Computadores do Active Directory) com sua conta administrativa do Active Directory, então você tenta o comando runas, como abaixo:

runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"

Infelizmente, isso não faz com que o ADU&C seja iniciado. Em vez disso, você recebe um erro de runas que diz "A operação solicitada requer elevação". O que está acontecendo neste caso é que o MMC executável está marcado para ser executado no nível de privilégio highestAvailable. Como o nível highestAvailable para sua conta de administração da rede é como administrador, iniciar o ADU&C dessa maneira exigiria elevação. Como runas não causa um prompt para elevação, o erro ocorre.

Então, o Windows Vista dificulta esse cenário, pois não fornece um item de menu de contexto para Executar como... e, por não fornecer nenhum meio incorporado para executar um processo como outro usuário, isso requer elevação.

Este seria um artigo frustrante se não houvesse solução para isso, mas, por acaso, um dos meus PowerToys de Elevação originais fornece a chave para resolver o segundo problema e eu incitei outra para resolver o primeiro. (Gostaria de poder reivindicar que eu pensei na solução para o problema da elevação, mas isso foi descoberto por Gov Maharaj da equipe do Windows AppCompat.)

Acontece que o PowerToy de comando de elevação pode ser usado com o comando runas. Onde o comando anterior falhou em causar um prompt de elevação, o seguinte causará o prompt:

runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"

Isso faz com que runas inicie elevate.cmd (tecnicamente, o processo sendo lançado é cmd.exe) como o outro usuário e o comando de elevação cuida de iniciar mmc.exe com um prompt de elevação.

Finalmente, eu adotei esse truque, o combinei com associações de arquivos para arquivos .exe e .msc e forneci a ele uma interface de usuário de aplicativo HTML para criar um PowerToy que cria uma opção Executar como Outro Usuário disponível pelo menu de atalho. Quando você selecionar Executar como Outro Usuário, obtém um aplicativo HTML como o exibido na Figura 1.

Figura 1 Ferramenta Executar como Outro Usuário

Figura 1** Ferramenta Executar como Outro Usuário **(Clique na imagem para uma visão ampliada)

Aqui, apenas digite o nome de usuário e domínio — para uma conta no computador local, marque a caixa de seleção Usar Conta Local. Você pode clicar no botão Executar para iniciar o aplicativo como um usuário padrão ou clicar no botão Executar como Administrador para iniciar o aplicativo com privilégios elevados. Após clicar em um desses dois botões, runas.exe será executado e solicitará uma senha ou PIN do cartão inteligente.

Como esse PowerToy usa o PowerToy do comando de elevação, você precisa instalá-lo primeiro. Em seguida, clique com o botão direito do mouse no arquivo RunAs.inf, selecione Instalar e aprove a elevação. Para desinstalar a ferramenta, use Programas e Recursos do Painel de Controle.

Você descobrirá que alguns dos atalhos para arquivos .msc nas Ferramentas Administrativas (como Gerenciamento do Computador) funcionará com esse PowerToy. Mas observe que se você instalar as ferramentas administrativas do Windows Server® 2003 usando adminpak.msi, os atalhos criados não são atalhos padrão para os arquivos .msc. Em vez disso, eles são atalhos do Windows Installer e, como resultado, o Windows Explorer não exibirá a opção Executar como Outro Usuário para esses atalhos.

Para esses atalhos, você terá que encontrar os arquivos reais .msc e clicar neles com o botão direito do mouse ou criar novos atalhos para os arquivos .msc. Além disso, runas não funciona com o Internet Explorer® devido à maneira com que o Internet Explorer foi rearquitetado para Modo Protegido no Windows Vista (você pode encontrar informações adicionais com relação a esse problema em support.microsoft.com/?id=922980).

Observação: entre o tempo em que concluí esses PowerToys e a publicação deste artigo, o Windows Sysinternals lançou uma nova ferramenta que é funcionalmente muito semelhante ao meu PowerToy Executar como Outro Usuário. Ela é chamada de ShellRunas e pode ser encontrada no site do Windows Sysinternals: technet.microsoft.com/sysinternals/cc300361.

Como a equipe do Sysinternals realmente escreve códigos reais para viver, você pode preferir a ferramenta deles para seu próprio uso. Eu decidi deixar a minha no artigo como um exemplo de como essa tarefa em particular e extensões do shell em geral podem ser feitas usando aplicativos HTML com código de script.

CMD e Prompt Aqui do PowerShell como Sistema

Existem momentos em que é necessário executar programas no contexto do Sistema Local. Por exemplo, várias ferramentas de distribuição de software, como o SCCM (System Center Configuration Manager), usam um agente cliente executado como Sistema Local para realizar suas tarefas.

Para testar o comportamento de um programa de instalação de software executando como Sistema Local, antes de tentar uma distribuição com um produto como o SCCM, pode ser útil iniciar o instalador usando um prompt de comando executando como Sistema Local. Portanto, eu me propus a criar meus PowerToys CMD e Prompt Aqui do PowerShell como Sistema.

Ao usar o Windows XP, com um script de shell de comando, eu costumava alcançar uma função como esta:

@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& 
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem

No entanto, se você tentar executar isso a partir de um prompt de comando elevado no Windows Vista, receberá a seguinte mensagem de erro e o prompt de comando executando como Sistema não será exibido:

AVISO:  O serviço CmdAsSystem é configurado 
como interativo no suporte que está sendo substituído. 
O serviço pode não funcionar adequadamente.

O problema é que esse script tenta criar e iniciar um serviço interativo. Serviços interativos não funcionarão corretamente devido ao Isolamento de sessão 0 no Windows Vista. (Para obter uma explicação sobre o Isolamento de sessão 0, consulte o whitepaper "Serviços no Windows Vista" disponível em microsoft.com/whdc/system/vista/Vista_Services.mspx.)

Para resolver essa limitação, usei a ferramenta Psexec desenvolvida pelo Sysinternals (consulte technet.microsoft.com/sysinternals/bb897553.aspx). Essa ferramenta permite que processos sejam iniciados no contexto do Sistema. Infelizmente, a maioria das ferramentas do Sysinternals não inclui um instalador. Portanto, forneci um arquivo INF (disponível no download do código) para instalar todo o Sysinternals Suite (que inclui Psexec) em Arquivos de Programas\Sysinternals Suite. Como um bônus adicional, esse arquivo INF cria atalhos no menu Iniciar para as ferramentas gráficas do conjunto.

Para instalar o conjunto, baixe primeiro SysinternalsSuite.zip em technet.microsoft.com/sysinternals/bb842062.aspx e descompacte-o em uma pasta. Copie meu arquivo INF (Install_SysinternalsSuite.inf) nessa pasta, clique com o botão direito do mouse em Install_SysinternalsSuite.inf e selecione Instalar. Como esses novos PowerToys usam o PowerToy do comando de elevação, instale esse em seguida. Após fazer isso, você pode instalar CmdHereAsSystem.inf e PowerShellHereAsSystem.inf. Depois que esses PowerToys forem instalados, você terá as opções Prompt CMD Aqui como Sistema e Prompt Aqui do PowerShell como Sistema disponíveis como itens de atalho para pastas e unidades no Windows Explorer, como pode ver na Figura 2.

Figura 2 Opções Prompt CMD Aqui como Sistema e Prompt Aqui do PowerShell como Sistema

Figura 2** Opções Prompt CMD Aqui como Sistema e Prompt Aqui do PowerShell como Sistema **

A Figura 3 mostra um prompt CMD executando um sistema. Selecionei as cores vivas como um lembrete de que esse prompt está executando como Sistema e pode fazer coisas inesperadas (e prejudiciais) ao sistema se os comandos incorretos forem inseridos.

Figura 3 O Prompt CMD como Sistema deve ser usado com responsabilidade

Figura 3** O Prompt CMD como Sistema deve ser usado com responsabilidade **

Finalmente, esses PowerToys adicionam comandos ao sistema para que esses prompts possam ser iniciados na caixa de diálogo Executar ou em um prompt CMD. Por exemplo, executar o seguinte comando a partir de Executar iniciará um prompt CMD como Sistema na pasta do Windows:

cmdassystem "c:\windows"

O comando equivalente para o Windows PowerShellTM é psassystem. Você deve observar que eu também modifiquei os PowerToys Prompt CMD Aqui e o Prompt Aqui do PowerShell como Administrador para instalar comandos similares — cmdasadmin e psasadmin, respectivamente.

Gadget de Elevação

A maioria dos meus PowerToys requer o clique no botão direito do mouse. Mas, como um bônus para essa atualização, eu inclui algo um pouco mais divertido. Esse é um gadget da Barra Lateral do Windows, que chamo de Gadget de Elevação (mostrado na Figura 4). Ele é um gadget de arrastar-e-soltar. Basta arrastar um executável ou um script do Windows Explorer que possui uma ação de runas definida e ele lançará como elevado.

Figura 4 O Gadget de Elevação Arrastar-e-Soltar

Figura 4** O Gadget de Elevação Arrastar-e-Soltar **

Se você instalou meus PowerToys de Elevação anteriores, isso funcionará para scripts do Windows Script Host, scripts do Windows PowerShell, aplicativos HTML e pacotes e patches do Windows Installer (bem como executáveis e scripts do shell de comando com uma ação runas definida por padrão no Windows Vista). E você também pode arrastar mais de um item de uma vez. (Apenas tente arrastar uma pasta até o gadget e veja o que acontece.)

Para instalar o gadget, clique duas vezes em Elevation.gadget (disponível no download do código). Se gostaria de olhar o código para o gadget, basta adicionar a extensão .cab ao nome do arquivo. Você pode então extrair o conteúdo do arquivo Cab.

Conclusão

O download deste artigo contém os novos PowerToys e alguns do artigo original. Fiz alterações pequenas em alguns dos antigos. Por exemplo, as versões originais do Prompt Aqui do Windows PowerShell como Administrador e do Script do WSH de Elevação instalavam suas próprias cópias de elevate.cmd e elevate.vbs. Como vários dos novos PowerToys também dependem desses arquivos, eu alterei essas ferramentas para exigirem que o PowerToy do comando de elevação seja instalado (e eles podem compartilhar essa cópia). Para determinar se um PowerToy requer a instalação do PowerToy do comando de elevação, verifique o cabeçalho no arquivo INF.

Alguns outros PowerToys originais também possuam alterações não-funcionais mínimas. Sempre desinstale a versão antiga de um PowerToy antes de instalar a mais recente. Como essa coleção agora foi expandida para 17 ferramentas, eu incluí scripts de shell de comando para instalar e desinstalar toda a coleção (InstallAllPowerToys.cmd e UninstallAllPowerToys.cmd, respectivamente). Você pode personalizá-los para instalar e desinstalar apenas as ferramentas que precisa usar.

Você deve ter em mente que InstallAllPowerToys.cmd não instala os PowerToys Executar como Administrador para ferramentas de script de terceiros por padrão. Você pode modificar esse script para instalar apenas esses PowerToys para os quais você instalou o software. Quando você executa um deles, ele se iniciará novamente como elevado. UninstallAllPowerToys.cmd deve remover todas as versões antigas dessas ferramentas também.

Como ocorre com todos os meus PowerToys, essas são ferramentas não suportadas, do tipo “use por sua conta e risco”. E não são produtos oficiais da Microsoft — são minhas próprias criações pessoais. Elas apenas foram testadas por mim e alguns outros voluntários com Windows Vista de 32 bits com inglês americano como o idioma padrão. Finalmente, é possível que algum ou todos esses PowerToys não funcionem com futuras atualizações, service packs ou versões do sistema operacional Windows.

Michael Murgolo é consultor sênior de infra-estrutura dos Serviços de Consultoria Microsoft. Ele está focado nas áreas de sistemas operacionais, implantação, serviços de rede, Active Directory, gerenciamento de sistemas, automação e gerenciamento de patches. Ele é um especialista na área de implantação e migração de desktops.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados; é proibida a reprodução parcial ou completa sem autorização..