batch file - por - Proceso de inicio como usuario limitado desde script elevado
echo off bat (2)
Realmente no es mi área de especialización, pero ¿ START RUNAS ...
o tal vez AT
la cuenta?
Tengo una consola elevada ejecutando algunos archivos bat. Tener esta consola ejecutándose en modo elevado es obligatoria para que pueda realizar algunas tareas como administrar recursos compartidos de red, etc. sin pedir permisos. Pero a veces los scripts también tienen que iniciar algunas aplicaciones que no se desean ejecutar en forma elevada. Así que queremos que nuestros murciélagos elevados comiencen la aplicación en modo no elevado. ¿Hay alguna forma incorporada de hacer esto en Windows? Los procesos se iniciaron con el comando DOS START hasta la fecha.
Por cierto, la máquina es una Windows 7 Ultimate Edition x64.
Sé que esto ya se ha discutido programáticamente en muchas preguntas ( esto recopila muchas de ellas ), pero nuestros requisitos son scripts bat que se ejecutan en cmd, y cualquier ejecutable independiente que pueda ayudar en nuestras tareas, como nircmd, 7z, etc.
Aclaración: ya tenemos una tarea programada que inicia la consola elevada, y elevar la consola no es el problema de esta respuesta.
La forma integrada de Windows : START RUNAS ...
permite ejecutar un proceso como usuario limitado. Aquí hay un ejemplo:
runas /trustlevel:0x20000 cmd.exe
De todos modos, existen algunas diferencias internas entre los permisos de ejecución en un proceso ejecutado de esa manera y otro iniciado desde la UI con UAC habilitado (explorer.exe mediante interacción normal del usuario, es decir, ejecución desde el explorador de archivos o desde el menú de inicio).
- En el proceso iniciado vía runas (derecha) perdemos algunos permisos deshabilitados:
- En el proceso iniciado vía runas (derecha) Los administradores tienen algunos permisos establecidos sobre el proceso:
La forma de aplicación de terceros : podemos lograr nuestro objetivo utilizando PSExec , un ejecutable independiente que podemos encontrar en PSTools desde Windows Sysinternals. Aquí hay un ejemplo:
psexec -l -d cmd.exe
He profundizado en el tema y no he notado ninguna diferencia en ninguno de los permisos de ejecución o indicadores de seguridad.
De los blogs de Microsoft Technet :
PsExec utiliza la API CreateRestrictedToken para crear un contexto de seguridad, llamado token, que es una versión simplificada propia, que elimina los privilegios administrativos y la pertenencia a un grupo. Después de generar un token que se parece a uno que Windows asigna a usuarios estándar, Process Explorer llama a CreateProcessAsUser para iniciar el proceso de destino con el nuevo token.
Estas son las mejores conslusiones que he logrado obtener después de muchas horas de investigación; cualquiera que pueda proporcionar más detalles será bienvenido.