Búsqueda de sitios web

Cómo ejecutar el programa sin privilegios de administrador y omitir el aviso de UAC


Cuando se inician, algunos programas requieren la elevación de permisos (el escudo junto al icono de la aplicación), pero en realidad no necesitan privilegios de administrador para su funcionamiento normal. Por ejemplo, puede otorgar permisos manualmente a sus usuarios en la carpeta de la aplicación en ProgramFiles y/o claves de registro utilizadas por el programa. Si el Control de cuentas de usuario está habilitado en la computadora, aparecerá un mensaje de UAC y Windows le pedirá al usuario que ingrese la contraseña de administrador si intenta ejecutar dicho programa como un usuario estándar.

Para eludir este mecanismo, muchos administradores simplemente deshabilitan UAC o otorgan derechos de administrador agregando una cuenta de usuario al grupo local "Administradores". Por supuesto, ambos métodos no son seguros. Ninguno de estos métodos se recomienda para un uso generalizado porque reducen la seguridad de Windows. En este artículo, veremos cómo ejecutar un programa que requiere permisos de administrador como usuario estándar y suprimir el aviso de elevación de UAC.

Configurar permisos para usuarios que no son administradores para ejecutar un programa

Un programa de Windows puede solicitarle permisos de administrador cuando se inicia si:

  • El programa necesita acceder a un directorio del sistema o un archivo para el cual los permisos NTFS no se han otorgado a usuarios sin privilegios;

  • Si el programa se compiló con un indicador especial que requiere elevación al inicio (

    requireAdministrator

    ).

En el primer caso, todo lo que se requiere para resolver el problema es otorgar permisos de usuario de RW o Full Control al directorio del programa o al directorio/archivo del sistema requerido. Por ejemplo, un programa almacena sus archivos (registros, archivos de configuración, etc.) en su propia carpeta en

C:\Program Files (x86)\SomeApp

o algún directorio del sistema. El usuario debe tener permiso para escribir en estos archivos para que el programa funcione correctamente. Para que este programa funcione normalmente, se requieren permisos de administrador.

Para permitir que el programa se ejecute como un usuario que no es administrador, basta con otorgar manualmente al usuario (o al grupo Usuarios integrado) el permiso para modificar/escribir un archivo/directorio en el nivel del sistema de archivos NTFS.

Para encontrar una lista de archivos, carpetas y claves de registro a las que accede el programa, utilice el Monitor de procesos (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Habilite el filtro por el nombre del proceso del programa y encuentre todos los recursos, si intenta acceder a ellos, se muestra Acceso denegado. Otorgue los permisos necesarios a carpetas/archivos/claves de registro.

Nota. En realidad, no se recomienda almacenar los datos de aplicación cambiantes en el directorio C:\Program Files. Es mejor almacenar los datos de la aplicación en el perfil de usuario. Pero es una cuestión de pereza e incompetencia de los desarrolladores de aplicaciones.

Permitir que los usuarios estándar ejecuten un programa que requiera privilegios de administrador

Anteriormente describimos cómo deshabilitar un aviso de UAC para un programa específico usando el parámetro RunAsInvoker. Sin embargo, este método no es lo suficientemente flexible.

Veamos una forma más sencilla de forzar la ejecución de cualquier programa sin privilegios de administrador (sin ingresar la contraseña de administrador) y con UAC habilitado (nivel 4, 3 o 2 del control deslizante de UAC).

Tomemos como ejemplo el Editor del Registro: regedit.exe (se encuentra en la carpeta C:\Windows\). Observe el escudo UAC junto al icono de la aplicación. Este ícono significa que se requiere la elevación de UAC para ejecutar esta aplicación.

cuando corres

regedit.exe

, verá un mensaje de Control de cuentas de usuario que le solicitará las credenciales de administrador (

Do you want to allow this app to make changes to your device?

). Si no proporciona una contraseña y no confirma la elevación, la aplicación no se iniciará.

Intentemos eludir la solicitud de UAC para este programa. Cree el archivo de texto run-as-non-admin.bat que contiene el siguiente código en su escritorio:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Para obligar a regedit.exe a ejecutarse sin privilegios de administrador y suprimir el aviso de UAC, simplemente arrastre el archivo EXE que desea ejecutar a este archivo BAT en el escritorio.

El Editor del registro debe iniciarse sin un aviso de UAC y sin ingresar una contraseña de administrador. Si abre el Administrador de tareas y agrega la columna Elevado, verá que existe el proceso regedit.exe sin el estado elevado (se ejecuta con permisos de usuario que no son de administrador).

Intente editar cualquier elemento en la sección de registro HKEY_LOCAL_MACHINE. Como puede ver, un usuario no puede editar el elemento en esta clave de registro (el usuario no tiene permisos de escritura para las claves de registro del sistema). Sin embargo, puede agregar o editar claves de registro y parámetros en su subárbol de usuario (HKEY_CURRENT_USER).

De la misma manera, puede ejecutar cualquier aplicación utilizando el archivo BAT. Simplemente especifique la ruta al ejecutable.

ejecutar-aplicación-como-no-administrador.bat

Set ApplicationPath="C:\Program Files\SomeApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

También puede agregar un menú contextual que permita ejecutar todas las aplicaciones sin elevación. Para hacerlo, cree el archivo RunAsUser.REG, copie el siguiente código en él, guárdelo e impórtelo al registro de Windows haciendo doble clic en el archivo reg (necesitará permisos de administrador para aplicar este cambio).

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run as user without UAC privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Después de eso, para ejecutar cualquier aplicación sin privilegios de administrador, simplemente seleccione "Ejecutar como usuario sin elevación de privilegios UAC" en el menú contextual del Explorador de archivos de Windows.

Puede implementar este elemento de menú en todos los equipos del dominio importando los parámetros de registro mediante GPO.

Me gustaría recordarles que usar

RUNASINVOKER

El modo para el programa no le permitirá elevar los permisos. RunAsInvoker suprime el indicador de UAC y le dice al programa que debe ejecutarse con los privilegios del usuario actual y no solicitar la elevación de privilegios. Si un programa realmente necesita privilegios elevados para editar la configuración del sistema o los archivos, no funcionará o volverá a solicitar permisos de administrador.

¿Cómo omitir UAC con la opción RunAsInvoker en CMD?

La variable de entorno __COMPAT_LAYER le permite establecer diferentes niveles de compatibilidad para las aplicaciones (la pestaña Compatibilidad en las propiedades de un archivo EXE). Esta variable le permite especificar la configuración de compatibilidad con la que desea ejecutar el programa. Por ejemplo, para iniciar una aplicación en el modo de compatibilidad de Windows 8 con una resolución de 640 × 480, configure lo siguiente:

set __COMPAT_LAYER=Win8RTM 640x480

La variable __COMPAT_LAYER tiene algunas opciones que nos interesan. Existen los siguientes parámetros:

  • RunAsInvoker: ejecuta una aplicación con los privilegios de un proceso principal sin un aviso de UAC;

  • RunAsHighest: ejecute un programa con el permiso de nivel más alto disponible para el usuario (aparecerá el aviso de UAC si un usuario tiene privilegios de administrador);

  • RunAsAdmin: ejecute una aplicación como administrador (siempre aparecerá el aviso de UAC).

Esto significa que el parámetro RunAsInvoker no otorga privilegios de administrador, solo suprime el aviso de UAC.

Los siguientes comandos habilitan el modo RunAsInvoker para el proceso actual y ejecutan el programa especificado sin elevación:

set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"

Habilite el modo RunAsInvoker en el manifiesto del archivo EXE

Como se mencionó anteriormente, Windows muestra el ícono del escudo UAC para los programas que requieren privilegios elevados para ejecutarse. Los desarrolladores establecen este requisito al compilar la aplicación en el programa manifiesto

Puede editar el manifiesto de cualquier archivo EXE y deshabilitar el requisito de ejecutar el programa en modo elevado.

Utilice la herramienta gratuita Resource Hacker para editar el manifiesto del programa. Abra el ejecutable del programa en Resource Hacker.

En este ejemplo, editaré el manifiesto del

Autologon.exe

herramienta de Sysinternals, que se puede utilizar para iniciar sesión automáticamente en Windows sin contraseña.

En el árbol de la izquierda, vaya a la sección Manifiesto y abra el manifiesto del programa. Preste atención a la siguiente sección XML:

<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>

Con la opción requireAdministrator habilitada, Windows siempre ejecuta este programa con derechos de administrador.

Cambie requireAdministrator a asInvoker y guarde los cambios en el archivo .exe.

Tenga en cuenta que ahora el escudo UAC ha desaparecido del icono del programa y puede ejecutarlo como el usuario actual sin pedir la contraseña de administrador.

Si el archivo de la aplicación ejecutable está firmado con una firma digital (certificado de firma de código), luego de modificar el archivo exe, puede dejar de funcionar o mostrar una advertencia.

En este caso, puede obligar al programa a utilizar un archivo de manifiesto externo. Cree un archivo de texto sin formato appname.exe.manifest (por ejemplo,

Autologon.exe.manifest

) en el directorio con el archivo exe y copie el código de manifiesto de Resource Hacker en él. Reemplace requireAdministrator con asInvoker. Guarde el archivo de manifiesto.

Para que Windows siempre intente usar un archivo de manifiesto externo al iniciar archivos EXE, habilite un parámetro de registro especial:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f

Reinicie Windows y asegúrese de que el programa esté usando un archivo de manifiesto externo y se esté ejecutando sin privilegios de administrador.

Cree un acceso directo para ejecutar el programa con una contraseña de administrador guardada

Si los métodos para ejecutar un programa con el indicador RunAsInvoker no funcionan para su aplicación heredada, puede intentar ejecutar dicha aplicación en una sesión de usuario utilizando las credenciales de administrador guardadas. Esta es la forma menos segura de ejecutar programas sin otorgar al usuario privilegios de administrador local, por lo que la hemos dejado deliberadamente para el final.

Para abrir el programa, cree un nuevo acceso directo en su escritorio. Especifique el nombre de la computadora, el nombre del administrador local y la ruta completa al ejecutable de la aplicación de destino.

Por ejemplo:

runas /user:wks-123\root /savecred "C:\CorpApp\myapp.exe"

Cuando ejecute el programa por primera vez, se abrirá un símbolo del sistema en el que se le pedirá que ingrese la contraseña de administrador.

El comando RunAs, cuando se ejecuta con la opción /SAVECRED, guarda el nombre de usuario y la contraseña en el Administrador de credenciales de Windows.

La próxima vez que se ejecute el acceso directo, la herramienta runas obtendrá automáticamente la contraseña guardada del Administrador de credenciales y la usará para ejecutar la aplicación con la cuenta de administrador local especificada (no se le solicitará la contraseña cada vez que abra el acceso directo).

El siguiente comando enumera las contraseñas guardadas en Credential Manager:

RunDll32.exe keymgr.dll,KRShowKeyMgr

Se produce un error al iniciar dicho acceso directo en Windows 11:

RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe
740: The requested operation requires elevation.

Para solucionar esto, cambie el comando en las propiedades del acceso directo. Reemplázalo con:

C:\Windows\System32\runas /profile /user:WKS-123\root /savecred "cmd.exe /C C:\CorpApp\myapp.exe"

Usar la opción /savecred no es seguro, como mencionamos anteriormente. Esto se debe a que un usuario que tiene la contraseña de administrador guardada en su perfil puede usarla para ejecutar cualquier programa o comando con permisos elevados, o incluso para restablecer la contraseña de la cuenta de administrador. Las contraseñas almacenadas en Credential Manager también se pueden volcar en texto sin formato mediante herramientas como Mimikatz, por lo que es mejor deshabilitar el uso de contraseñas guardadas.

En Windows, puede deshabilitar el guardado de la contraseña en Credential Manager mediante la opción de directiva de grupo Acceso a la red: no permitir el almacenamiento de contraseñas y credenciales para la autenticación de red (Configuración del equipo -> Configuración de Windows -> Configuración de seguridad -> Políticas locales -> Opciones de seguridad).

Hay varias herramientas de terceros que le permiten evitar el inconveniente de usar una contraseña de administrador almacenada en runas. Por ejemplo, AdmiLink, RunAsRob, RunAsSpc. Estas aplicaciones le permiten almacenar la contraseña de administrador cifrada y ejecutar el programa de forma segura con privilegios de administrador. Estas herramientas no permitirán que el usuario ejecute ninguna aplicación o comando con las credenciales guardadas porque verifican la ruta y la suma de verificación del archivo ejecutable cuando se inicia.

Artículos relacionados