Seguridad

Nuevos PowerToys de elevación para Windows Vista

Michael Murgolo

 

De un vistazo:

  • Ejecución como administrador para herramientas de scripting de terceros
  • Ejecución como otro usuario
  • Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema
  • Gadget de elevación de arrastrar y colocar

Descargar el código de este artículo: Elevation2008_06.exe (197KB)

Esta es otra edición de los PowerToys de elevación para Windows Vista. Analicé este tema en el número de junio de 2007 de TechNet Magazine. Y aquí estamos, un año más tarde. Esta vez, quiero mostrar cómo amplié la funcionalidad de ejecución como administrador para que funcione con algunas

de mis herramientas favoritas de scripting de terceros, mostrar cómo reemplazar una función útil de Windows® XP que se eliminó de Windows Vista® y analizar algunas de la herramientas útiles que se incluyen en los PowerToys de elevación.

Ejecución como administrador para herramientas de scripting adicionales

Un tema que traté en el artículo anterior (disponible en technet.microsoft.com/magazine/cc162321.aspx) fue la habilitación de la opción de ejecución como administrador para las herramientas nativas de scripting de Windows. Para este artículo, creé PowerToys de ejecución como administrador para algunas herramientas de scripting de terceros:

El código para cada una de estas herramientas se incluye en la descarga de este artículo, disponible en technetmagazine.com. Los archivos reales se denominan ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf y ElevateKiXtart.inf, respectivamente. Para AutoIt v3, AutoHotkey y ActivePerl, la instalación es muy sencilla. Sólo tiene que descargar la aplicación correspondiente e instalarla en la ubicación predeterminada. Una vez instaladas las aplicaciones deseadas, puede instalar el PowerToy de ejecución como administrador adecuado para cada herramienta.

Lamentablemente, KiXtart 2010 no ofrece un instalador. Por lo tanto, para asegurarse de que KiXtart se instala en una ubicación estándar para el correcto funcionamiento del PowerToy, he proporcionado un archivo INF que instalará KiXtart 2010 (V 4.60) en Archivos de Programa\KiXtart y registrará la extensión de archivo de .kix.

Vaya a www.kixtart.org/?p=downloads, descargue el archivo KiX2010_460.zip y descomprímalo en una carpeta. Copie el archivo Install_KiXtart.inf (que se incluye en la descarga de código que acompaña este artículo) en la misma carpeta. A continuación, haga clic con el botón secundario del mouse en Install_KiXtart.inf y seleccione Install. Entonces, podrá instalar PowerToy ElevateKiXtart.inf.

PowerToy de ejecución como otro Usuario

La opción Control de cuentas de usuario (UAC) se creó para reducir la vulnerabilidad del sistema operativo ante malware al obligar a los usuarios, incluso los administradores, a ejecutar la mayoría de las aplicaciones con privilegios estándar de usuario. UAC ofrece elevación eficaz para tareas administrativas y otras funciones de aplicación. Este potencial de elevación se proporciona a través de la opción de ejecución como administrador, que se obtiene al hacer clic con el botón secundario del mouse en archivos ejecutables. Los PowerToys de elevación que traté en el número de junio de 2007 ampliaron esta capacidad para que funcione en otros tipos de archivo y objetos.

La funcionalidad integrada en Windows Vista funciona muy bien para muchas tareas administrativas. Sin embargo, una situación importante ha quedado fuera en Windows Vista. Un gran número de departamentos de TI tienen una directiva en la que los administradores de red usan una cuenta de usuario para sus tareas diarias (correo electrónico, creación de documentos, etc.) y otra cuenta que se usa sólo para administración de red (o la administración de equipos locales).

Esto sirve para ayudar a reducir el riesgo de forma que si un administrador de red ejecutase accidentalmente malware durante sus tareas diarias, no ponga en peligro todo el sistema o el dominio en el que se encuentra. Esto se logró en Windows XP mediante la opción contextual Ejecutar como... Pero esta opción desapareció en Windows Vista porque se reemplazó con la opción Ejecutar como administrador.

Sin embargo, la herramienta de línea de comandos runas aún existe en Windows Vista. Lamentablemente, no se puede usar para las tareas más comunes de cuenta doble: la ejecución de complementos de Microsoft® Management Console. Por ejemplo, supongamos que es responsable de realizar algunas tareas de administración de cuentas en Active Directory®. Ejecuta como usuario estándar para las tareas diarias y la cuenta de administración de red también es miembro del grupo de administradores local (de modo que puede instalar herramientas de administración de red cuando sea necesario) en un equipo Windows Vista con UAC habilitado. Ahora desea iniciar usuarios y equipos de Active Directory (ADU&C) con la cuenta de administración de Active Directory, por lo que intenta usar el comando runas, tal como se indica a continuación:

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

Lamentablemente, eso no inicia ADU&C. En cambio, recibe un error runas "La operación solicitada requiere elevación". Lo que sucede en este caso es que el archivo ejecutable de MMC está marcado para ejecutar en el nivel del privilegio highestAvailable. Dado que el nivel highestAvailable de la cuenta de administración de red se ejecuta como administrador, el inicio de ADU&C de esta manera requeriría elevación. Puesto que runas no provoca ningún mensaje para la elevación, se produce el error.

Por lo tanto, Windows Vista dificulta esta situación porque no ofrece ningún elemento de menú contextual para la opción Ejecutar como... ni ningún medio integrado para ejecutar un proceso como otro usuario que requiere la elevación.

Si no hubiera solución, sería un artículo frustrante pero, por suerte, uno de los PowerToys de elevación originales proporciona la clave para resolver el segundo problema, y he creado otro para resolver el primero. (Me gustaría poder decir que la solución al problema de elevación era mía, pero fue idea de Gov Maharaj del equipo de Windows AppCompat.)

Resulta que el PowerToy de elevación del comando se puede usar con el comando runas. Donde el comando anterior no creó ningún mensaje de elevación, el código siguiente provocará el mensaje:

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

Esto hace que runas inicie eleva.cmd (técnicamente, el proceso que se inicia es cmd.exe) como el otro usuario, y el comando de elevación se encarga de iniciar mmc.exe con un mensaje de elevación.

Por último, yo he tomé esta artimaña, la combiné con asociaciones de archivo .exe y .msc y le asigné una IU de aplicación HTML para crear un PowerToy que crea una opción de ejecución como otro usuario disponible a través del menú contextual. Al seleccionar Ejecutar como otro usuario, obtiene una aplicación HTML como la que se muestra en la figura 1.

Figura 1 Herramienta de ejecución como otro usuario

Figura 1** Herramienta de ejecución como otro usuario **(Hacer clic en la imagen para ampliarla)

Aquí, simplemente escriba el nombre de usuario y el dominio; para una cuenta en el equipo local, active la casilla Use Local Account. A continuación, puede hacer clic en el botón Run para iniciar la aplicación como usuario estándar, o bien puede hacer clic en el botón Run as Admin para iniciar la aplicación con privilegios elevados. Tras hacer clic en cualquiera de estos dos botones, runas.exe ejecutará y solicitará una contraseña o código PIN de tarjeta inteligente.

Dado que este PowerToy usa el PowerToy de comandos de elevación, deberá instalarlo primero. A continuación, haga clic con el botón secundario del mouse en el archivo RunAs.Inf, seleccione Install y autorice la elevación. Para desinstalar la herramienta, use la función Programas y características del Panel de control.

Verá que algunos de los accesos directos a los archivos .msc de las herramientas administrativas, tal como Administración de equipos, funcionará con este PowerToy. Sin embargo, tenga en cuenta que si instala las herramientas administrativas de Windows Server® 2003 mediante adminpak.msi, los accesos directos creados no serán los estándar a los archivos .msc. En cambio, son accesos directos de Windows Installer y, como resultado, Explorador de Windows no mostrará la opción de ejecución como otro usuario para ellos.

Para dichos accesos directos, deberá buscar los archivos .msc reales y hacer clic con el botón secundario del mouse en ellos o crear accesos directos nuevos a archivos .msc. Además, runas no funciona con Internet Explorer® debido a la manera en que se cambió la estructura de Internet Explorer para la opción de modo protegido de Windows Vista (encontrará información adicional relacionada con este problema en support.microsoft.com/?id=922980).

Nota: desde que terminé estos PowerToys hasta la publicación de este artículo, Windows Sysinternals lanzó al mercado una nueva herramienta que funcionalmente es muy similar al PowerToy de ejecución como otro usuario. Se llama ShellRunas y se encuentra en el sitio de Windows Sysinternals: technet.microsoft.com/sysinternals/cc300361.

Dado que la gente de Sysinternals se dedica a la escritura de código verdadero, quizás prefiera usar esa herramienta. Decidí dejar la mía en el artículo como ejemplo de cómo se puede realizar esta tarea en particular y las extensiones de shell en general mediante aplicaciones HTML con código script.

Símbolo del sistema de CMD y PowerShell aquí como sistema

A veces, es necesario ejecutar programas en el contexto de sistema local. Por ejemplo, muchas herramientas de distribución de software, tal como System Center Configuration Manager (SCCM), usan un agente de cliente que se ejecuta como sistema local para realizar sus tareas.

Para probar el comportamiento de un programa de instalación de software que se ejecuta como sistema local antes de intentar una distribución con un producto como, por ejemplo SCCM, puede ser útil iniciar el instalador mediante un símbolo del sistema que se ejecute como sistema local. Por lo tanto, comencé la creación del Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema.

Cuando usaba Windows XP, lograba una función de este tipo con un script de shell de comandos:

@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

Sin embargo, si intenta ejecutar esto desde un símbolo del sistema elevado en Windows Vista, aparecerá el siguiente mensaje de error y no aparecerá el símbolo del sistema que se ejecuta como sistema:

ADVERTENCIA:  El servicio CmdAsSystem está configurado como interactivo y se desaprueba su soporte técnico. Puede que el servicio no funcione correctamente.

El problema es que este script intenta crear e iniciar un servicio interactivo. Los servicios interactivos no funcionarán correctamente debido al aislamiento de la sesión 0 en Windows Vista. (Para obtener una explicación del aislamiento de la sesión 0, consulte el artículo acerca de los servicios de Windows Vista disponible en microsoft.com/whdc/system/vista/Vista_Services.mspx.)

Para resolver esta limitación, usé la herramienta Psexec desarrollada por Sysinternals (consulte technet.microsoft.com/sysinternals/bb897553.aspx). Esta herramienta permite iniciar procesos en el contexto del sistema. Lamentablemente, la mayoría de las herramientas de Sysinternals no incluye instalador. Por lo tanto, proporcionó un archivo INF (disponible en la descarga de código) para instalar el conjunto de Sysinternals Suite (que incluye Psexec) en Archivos de Programa\Sysinternals Suite. Como beneficio extra, este archivo INF crea accesos directos de menú de inicio para las herramientas gráficas del conjunto.

Para instalar el conjunto, primero descargue el archivo SysinternalsSuite.zip de technet.microsoft.com/sysinternals/bb842062.aspx y descomprímalo en una carpeta. Copie el archivo INF (Install_SysinternalsSuite.inf) en la misma carpeta, haga clic con el botón secundario del mouse en Install_SysinternalsSuite.inf y seleccione Install. Dado que estos nuevos PowerToy usan el PowerToy de comandos de elevación, instale ahora dicho componente. A continuación, puede instalar CmdHereAsSystem.inf y PowerShellHereAsSystem.inf. Una vez instalados dichos PowerToys, tendrá disponibles las opciones de Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema como elementos de menú contextual para las carpetas y las unidades de disco en Explorador de Windows, tal como se puede observar en la figura 2.

Figura 2 Opciones de Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema

Figura 2** Opciones de Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema **

La figura 3 muestra un símbolo del sistema de CMD que se ejecuta como sistema. Seleccioné colores brillantes como recordatorio que este símbolo del sistema se ejecuta como sistema y puede hacer cosas inesperadas (y malintencionadas) al sistema si se entran comandos incorrectos.

Figura 3 El símbolo del sistema de CMD como Sistema se debe usar de manera responsable

Figura 3** El símbolo del sistema de CMD como Sistema se debe usar de manera responsable **

Por último, estos PowerToys agregan comandos al sistema para que los símbolos del sistema se puedan iniciar en el cuadro de diálogo Ejecutar o en un símbolo del sistema de CMD. Por ejemplo, si se ejecuta el siguiente comando desde el cuadro Ejecutar, se iniciará un símbolo del sistema CMD como sistema en la carpeta Windows:

cmdassystem "c:\windows"

El comando equivalente para Windows PowerShellTM es psassystem. Debe tener en cuenta que también modifiqué el Símbolo del sistema de CMD y PowerShell aquí como PowerToys del sistema para instalar comandos similares; cmdasadmin y psasadmin, respectivamente.

Gadget de elevación

La mayor parte de los PowerToys requieren hacer clic en el botón secundario del mouse. Pero como beneficio extra para esta actualización, he incluido algo un poco más divertido. Es un gadget de la barra lateral de Windows, que he denominado Gadget de elevación (figura 4). Se trata de un objetivo de arrastrar y colocar. Simplemente arrastre desde Explorador de Windows un archivo ejecutable o script con acción runas definida y se iniciará como elevado.

Figura 4 Gadget de elevación de arrastrar y colocar

Figura 4** Gadget de elevación de arrastrar y colocar **

Si instaló los PowerToys de elevación anteriores, entonces esto funcionará para los scripts de Windows Script Host, los scripts de Windows PowerShell, las aplicaciones HTML y los paquetes y las revisiones de Windows Installer (así como los archivos ejecutables y scripts de shell de comandos que tienen una acción runas definida de forma predeterminada en Windows Vista). Además, también puede arrastrar más de un elemento a la vez. (Intente arrastrar una carpeta al gadget y vea que sucede.)

Para instalar el gadget, haga doble clic en Elevation.gadget (disponible en la descarga de código). Si desea echar un vistazo al código del gadget, agregue la extensión .cab al nombre de archivo. A continuación, podrá extraer el contenido del archivo CAB.

Conclusión

La descarga de este artículo contiene tanto los PowerToys nuevos y como los del artículo original. He realizado pequeños cambios a algunos de los anteriores. Por ejemplo, las versiones originales de Símbolo del sistema Windows PowerShell aquí como Administrador y de Elevación de script WSH instalaban sus propias copias de elevate.cmd y elevate.vbs. Dado que un gran número de los nuevos PowerToys también dependen de estos archivos, cambié estas herramientas de modo que requieren la instalación del PowerToy de comandos de elevación (par que puedan compartir dicha copia). Para determinar si un PowerToy requiere la instalación del PowerToy de comandos de elevación, compruebe el encabezado del archivo INF.

Algunos otros PowerToy originales también fueron sometidos a pequeños cambios no funcionales. Siempre desinstale la versión anterior de un PowerToy antes de instalar la nueva. Dado que esta colección ahora se ha ampliado a 17 herramientas, he incluido scripts de shell de comandos para instalar y desinstalar todo el conjunto (InstallAllPowerToys.cmd y UninstallAllPowerToys.cmd, respectivamente). Puede personalizar estos scripts para instalar y desinstalar sólo las herramientas que necesita usar.

Debe tener en cuenta que, de manera predeterminada, InstallAllPowerToys.cmd no instala los PowerToys de ejecución como administrador para las herramientas de scripting de terceros. Puede modificar este script para instalar sólo los PowerToys para los que tiene instalado el software. Cuando ejecute cualquiera de ellos, se volverá a iniciar como elevado. UninstallAllPowerToys.cmd también debería eliminar todas las versiones anteriores de estas herramientas.

Al igual que todos los PowerToys, son herramientas no compatibles que debe usar bajo su propia responsabilidad. Y no se trata de productos oficiales de Microsoft; son mis propias creaciones personales. Únicamente yo y algunos voluntarios los han probado en Windows Vista de 32 bits con inglés de EE. UU. como idioma predeterminado. Por último, es posible que alguno o todos estos PowerToys no funcionen con futuras actualizaciones de Windows, Service Packs o versiones de sistema operativo.

Michael Murgolo es consultor jefe de infraestructuras de Servicios de consultoría de Microsoft (Microsoft Consulting Services, MCS). Su trabajo se centra en sistemas operativos, implementación, servicios de red, Active Directory, administración de sistemas, automatización y administración de revisiones. Es un experto en materia de implementación y migración de escritorios.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos. Queda prohibida la reproducción parcial o total sin previa autorización.