Compartir a través de


Ejecución con privilegios de administrador

El primer paso para establecer en qué tipo de cuenta debe ejecutarse la aplicación es examinar los recursos que usará la aplicación y qué API con privilegios llamará. Es posible que la aplicación, o partes grandes de ella, no requieran privilegios de administrador. Escribir código seguro, de Michael Howard y David LeBlanc ofrece una excelente descripción de cómo llevar a cabo esta evaluación y es muy recomendable. (Es posible que este recurso no esté disponible en algunos idiomas y países).

Puede proporcionar los privilegios que necesita la aplicación con menos exposición a ataques malintencionados mediante uno de los métodos siguientes:

  • Ejecute en una cuenta con menos privilegios. Una manera de hacerlo es usar PrivilegeCheck para determinar qué privilegios están habilitados en un token. Si los privilegios disponibles no son adecuados para la operación actual, puede deshabilitar ese código y pedir al usuario que inicie sesión en una cuenta con privilegios de administrador.
  • Divida en funciones de aplicación independientes que requieran permisos de administrador. Puede proporcionar al usuario un acceso directo que ejecute el comando RunAs. Para obtener instrucciones detalladas sobre cómo configurar el acceso directo, busque "runas" en la Ayuda. Mediante programación, puede configurar el comando RunAs en la clave del Registro appId Key para la aplicación.
  • Autentique al usuario llamando a CredUIPromptForCredentials (GUI) o CredUICmdLinePromptForCredentials (línea de comandos) para obtener el nombre de usuario y la contraseña. Para obtener un ejemplo, vea Preguntar al usuario por las credenciales.
  • Suplantar al usuario. Un proceso que se inicia en una cuenta con privilegios elevados, como System, puede suplantar una cuenta de usuario llamando a ImpersonateLoggedOnUser o funciones suplantadas similares, lo que reduce el nivel de privilegios. Sin embargo, si se inserta una llamada a RevertToSelf en el subproceso, el proceso vuelve a los privilegios del sistema originales.

Si ha determinado que la aplicación debe ejecutarse en una cuenta con privilegios de administrador y que se debe almacenar una contraseña de administrador en el sistema de software, consulte Control de contraseñas para los métodos de hacerlo de forma segura.