¿Qué hace exactamente ‘Ejecutar como administrador’?

En Windows 7, tengo un progtwig de línea de comandos que falla debido a errores de permisos de escritura de archivos y apareciendo molestos diálogos de UAC cada vez que ejecuto progtwigs de línea de comandos que son de un ‘editor desconocido’.

Sin embargo, si inicio mi consola haciendo clic con el botón derecho y seleccionando ‘ejecutar como administrador‘, la instalación funciona bien, incluso si los cuadros de diálogo de UAC aún están presentes.

Mi usuario ya es miembro del grupo de ‘administradores’, entonces ¿qué hace exactamente ‘ejecutar como administrador’ que hace que mi instalación funcione?

Mi pregunta específica es precisamente: ¿Qué hace ‘ejecutar como administrador’? Ninguna de las respuestas hasta ahora aborda esto. (por ejemplo, ¿ejecuta el nuevo proceso como el usuario “Administrador” o ejecuta el proceso como el usuario actual, pero con privilegios elevados? De ser así, ¿qué privilegios? ¿Cómo difiere eso de los privilegios que obtengo de mi usuario que está en el grupo ‘Administradores’?

(Específicamente, estoy usando la ‘Consola’ de SourceForge , no una ventana CMD normal, pero no creo que eso sea importante. Esto es todo mientras se instala el paquete ‘distribuir’ de Python ejecutando ‘python distributed_setup.py’ en un recién instalado Python3 MSI de python.org. Es un Python de 32 bits en Windows de 64 bits. Consulte Instalar Python y distribuirlo en Windows 7 da “Permiso de escritura … permiso denegado” )

Cuando inicia sesión, Windows crea un token de acceso. Esto lo identifica a usted, a los grupos de los que es miembro y sus privilegios. Y tenga en cuenta que el hecho de que un usuario sea o no administrador depende de si el usuario es miembro del grupo Administradores.

Sin UAC, cuando ejecuta un progtwig obtiene una copia del token de acceso, y esto controla a lo que puede acceder el progtwig.

Con UAC, cuando ejecuta un progtwig obtiene un token de acceso restringido. Este es el token de acceso original con “Administradores” eliminado de la lista de grupos (y algunos otros cambios). Aunque su usuario es miembro del grupo Administradores, el progtwig no puede usar privilegios de administrador.

Cuando selecciona “Ejecutar como administrador” y su usuario es un administrador, el progtwig se inicia con el token de acceso no restringido original. Si su usuario no es un administrador, se le solicitará una cuenta de administrador y el progtwig se ejecutará bajo esa cuenta.

Entonces … más cavando, con el resultado. Parece que aunque ejecuté un proceso normal y uno como “Administrador”, tuve el UAC desactivado. Convertir el UAC a medio me permitió ver diferentes resultados. Básicamente, todo se reduce a niveles de integridad, que son 5.

Los navegadores, por ejemplo, se ejecutan en el nivel bajo (1), mientras que los servicios (el usuario del sistema) se ejecutan en el nivel del sistema (4). Todo está muy bien explicado en Windows Integrity Mechanism Design . Cuando UAC está habilitado, los procesos se crean con nivel medio (SID S-1-16-8192 AKA 0x2000 se agrega) mientras que cuando “Ejecutar como administrador”, el proceso se crea con nivel alto (SID S-1-16-12288 aka 0x3000).

Entonces, el ACCESS_TOKEN correcto para un usuario normal (nivel de Integridad Media) es:

 0:000:x86> !token Thread is not impersonating. Using process token... TS Session ID: 0x1 User: S-1-5-21-1542574918-171588570-488469355-1000 Groups: 00 S-1-5-21-1542574918-171588570-488469355-513 Attributes - Mandatory Default Enabled 01 S-1-1-0 Attributes - Mandatory Default Enabled 02 S-1-5-32-544 Attributes - DenyOnly 03 S-1-5-32-545 Attributes - Mandatory Default Enabled 04 S-1-5-4 Attributes - Mandatory Default Enabled 05 S-1-2-1 Attributes - Mandatory Default Enabled 06 S-1-5-11 Attributes - Mandatory Default Enabled 07 S-1-5-15 Attributes - Mandatory Default Enabled 08 S-1-5-5-0-1908477 Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 Attributes - Mandatory Default Enabled 10 S-1-5-64-10 Attributes - Mandatory Default Enabled 11 S-1-16-8192 Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: LocadDumpSid failed to dump Sid at addr 000000000266b458, 0xC0000078; try own SID dump. s-1-0x515000000 Privs: 00 0x000000013 SeShutdownPrivilege Attributes - 01 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 02 0x000000019 SeUndockPrivilege Attributes - 03 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 04 0x000000022 SeTimeZonePrivilege Attributes - Auth ID: 0:1d1f65 Impersonation Level: Anonymous TokenType: Primary Is restricted token: no. 

Ahora, las diferencias son las siguientes:

 S-1-5-32-544 Attributes - Mandatory Default Enabled Owner 

para “Como administrador”, mientras

 S-1-5-32-544 Attributes - DenyOnly 

para no administrador

Tenga en cuenta que S-1-5-32-544 es BUILTIN \ Administrators. Además, hay menos privilegios, y lo más importante es notar:

administración:

 S-1-16-12288 Attributes - GroupIntegrity GroupIntegrityEnabled 

mientras que para no administrador:

 S-1-16-8192 Attributes - GroupIntegrity GroupIntegrityEnabled 

Espero que esto ayude.

Lectura adicional: http://www.blackfishsoftware.com/blog/don/creating_processes_sessions_integrity_levels

Cosas como “eleva los privilegios”, “token de acceso restringido”, “privilegio de administrador” … ¿qué diablos es privilegio de administrador de todos modos? son tonterías.

Aquí hay un ACCESS_TOKEN para un proceso que normalmente se ejecuta desde un usuario que pertenece al grupo Administradores.

 0: kd> !process 0 1 test.exe PROCESS 87065030 SessionId: 1 Cid: 0d60 Peb: 7ffdf000 ParentCid: 0618 DirBase: 2f22e1e0 ObjectTable: a0c8a088 HandleCount: 6. Image: test.exe VadRoot 8720ef50 Vads 18 Clone 0 Private 83. Modified 0. Locked 0. DeviceMap 8936e560 Token 935c98e0 0: kd> !token -n 935c98e0 _TOKEN 935c98e0 TS Session ID: 0x1 User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped) User Groups: 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Attributes - Mandatory Default Enabled 01 S-1-1-0 (Well Known Group: localhost\Everyone) Attributes - Mandatory Default Enabled 02 S-1-5-32-544 (Alias: BUILTIN\Administrators) Attributes - Mandatory Default Enabled Owner 03 S-1-5-32-545 (Alias: BUILTIN\Users) Attributes - Mandatory Default Enabled 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE) Attributes - Mandatory Default Enabled 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON) Attributes - Mandatory Default Enabled 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users) Attributes - Mandatory Default Enabled 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization) Attributes - Mandatory Default Enabled 08 S-1-5-5-0-85516 (no name mapped) Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 (Well Known Group: localhost\LOCAL) Attributes - Mandatory Default Enabled 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication) Attributes - Mandatory Default Enabled 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level) Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Privs: 05 0x000000005 SeIncreaseQuotaPrivilege Attributes - 08 0x000000008 SeSecurityPrivilege Attributes - 09 0x000000009 SeTakeOwnershipPrivilege Attributes - 10 0x00000000a SeLoadDriverPrivilege Attributes - 11 0x00000000b SeSystemProfilePrivilege Attributes - 12 0x00000000c SeSystemtimePrivilege Attributes - 13 0x00000000d SeProfileSingleProcessPrivilege Attributes - 14 0x00000000e SeIncreaseBasePriorityPrivilege Attributes - 15 0x00000000f SeCreatePagefilePrivilege Attributes - 17 0x000000011 SeBackupPrivilege Attributes - 18 0x000000012 SeRestorePrivilege Attributes - 19 0x000000013 SeShutdownPrivilege Attributes - 20 0x000000014 SeDebugPrivilege Attributes - 22 0x000000016 SeSystemEnvironmentPrivilege Attributes - 23 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 24 0x000000018 SeRemoteShutdownPrivilege Attributes - 25 0x000000019 SeUndockPrivilege Attributes - 28 0x00000001c SeManageVolumePrivilege Attributes - 29 0x00000001d SeImpersonatePrivilege Attributes - Enabled Default 30 0x00000001e SeCreateGlobalPrivilege Attributes - Enabled Default 33 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 34 0x000000022 SeTimeZonePrivilege Attributes - 35 0x000000023 SeCreateSymbolicLinkPrivilege Attributes - Authentication ID: (0,14e4c) Impersonation Level: Anonymous TokenType: Primary Source: User32 TokenFlags: 0x2000 ( Token in use ) Token ID: d166b ParentToken ID: 0 Modified ID: (0, d052f) RestrictedSidCount: 0 RestrictedSids: 00000000 OriginatingLogonSession: 3e7 

… y aquí hay un ACCESS_TOKEN para un proceso normalmente ejecutado por el mismo usuario con “Ejecutar como administrador”.

 TS Session ID: 0x1 User: S-1-5-21-2452432034-249115698-1235866470-1000 (no name mapped) User Groups: 00 S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Attributes - Mandatory Default Enabled 01 S-1-1-0 (Well Known Group: localhost\Everyone) Attributes - Mandatory Default Enabled 02 S-1-5-32-544 (Alias: BUILTIN\Administrators) Attributes - Mandatory Default Enabled Owner 03 S-1-5-32-545 (Alias: BUILTIN\Users) Attributes - Mandatory Default Enabled 04 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE) Attributes - Mandatory Default Enabled 05 S-1-2-1 (Well Known Group: localhost\CONSOLE LOGON) Attributes - Mandatory Default Enabled 06 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users) Attributes - Mandatory Default Enabled 07 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization) Attributes - Mandatory Default Enabled 08 S-1-5-5-0-85516 (no name mapped) Attributes - Mandatory Default Enabled LogonId 09 S-1-2-0 (Well Known Group: localhost\LOCAL) Attributes - Mandatory Default Enabled 10 S-1-5-64-10 (Well Known Group: NT AUTHORITY\NTLM Authentication) Attributes - Mandatory Default Enabled 11 S-1-16-12288 (Label: Mandatory Label\High Mandatory Level) Attributes - GroupIntegrity GroupIntegrityEnabled Primary Group: S-1-5-21-2452432034-249115698-1235866470-513 (no name mapped) Privs: 05 0x000000005 SeIncreaseQuotaPrivilege Attributes - 08 0x000000008 SeSecurityPrivilege Attributes - 09 0x000000009 SeTakeOwnershipPrivilege Attributes - 10 0x00000000a SeLoadDriverPrivilege Attributes - 11 0x00000000b SeSystemProfilePrivilege Attributes - 12 0x00000000c SeSystemtimePrivilege Attributes - 13 0x00000000d SeProfileSingleProcessPrivilege Attributes - 14 0x00000000e SeIncreaseBasePriorityPrivilege Attributes - 15 0x00000000f SeCreatePagefilePrivilege Attributes - 17 0x000000011 SeBackupPrivilege Attributes - 18 0x000000012 SeRestorePrivilege Attributes - 19 0x000000013 SeShutdownPrivilege Attributes - 20 0x000000014 SeDebugPrivilege Attributes - 22 0x000000016 SeSystemEnvironmentPrivilege Attributes - 23 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default 24 0x000000018 SeRemoteShutdownPrivilege Attributes - 25 0x000000019 SeUndockPrivilege Attributes - 28 0x00000001c SeManageVolumePrivilege Attributes - 29 0x00000001d SeImpersonatePrivilege Attributes - Enabled Default 30 0x00000001e SeCreateGlobalPrivilege Attributes - Enabled Default 33 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - 34 0x000000022 SeTimeZonePrivilege Attributes - 35 0x000000023 SeCreateSymbolicLinkPrivilege Attributes - Authentication ID: (0,14e4c) Impersonation Level: Anonymous TokenType: Primary Source: User32 TokenFlags: 0x2000 ( Token in use ) Token ID: ce282 ParentToken ID: 0 Modified ID: (0, cddbd) RestrictedSidCount: 0 RestrictedSids: 00000000 OriginatingLogonSession: 3e7 

Como puede ver, la única diferencia es la ID del token:

 Token ID: d166b ParentToken ID: 0 Modified ID: (0, d052f) 

vs

 Token ID: ce282 ParentToken ID: 0 Modified ID: (0, cddbd) 

Lo siento, no puedo agregar mucha luz a esto todavía, pero todavía estoy cavando.

ACTUALIZAR

“Ejecutar como administrador” es solo un comando que permite al progtwig continuar algunas operaciones que requieren privilegios de administrador, sin mostrar las alertas de UAC.

Incluso si su usuario es miembro del grupo de administradores, algunas aplicaciones como la suya necesitan privilegios de administrador para continuar ejecutándose, ya que la aplicación no se considera segura, si está realizando alguna operación especial, como editar un archivo de sistema u otra cosa. Esta es la razón por la cual Windows necesita el privilegio de administrador para ejecutar la aplicación y le notifica con una alerta de UAC. No todas las aplicaciones necesitan una cuenta de administrador para ejecutarse, y algunas aplicaciones, como la suya, necesitan privilegios de administrador.

Si ejecuta la aplicación con el comando ‘ejecutar como administrador’, está notificando al sistema que su aplicación está segura y haciendo algo que requiere privilegios de administrador, con su confirmación.

Si desea evitar esto, solo desactive el UAC en el Panel de control.

Si desea ir más lejos, lea la pregunta Diferencia entre “Ejecutar como administrador” y el Grupo de administradores de Windows 7 en el foro de Microsoft o esta pregunta de Superusuario.

Windows 7 requiere que solicites ciertos privilegios intencionalmente para que un progtwig malicioso no pueda hacerte las cosas mal. Si la calculadora gratuita que descargó debe ejecutarse como administrador, sabrá que algo está sucediendo. Hay comandos del sistema operativo para elevar el privilegio de su aplicación (que solicitará la confirmación del usuario).

Una buena descripción se puede encontrar en:

http://msdn.microsoft.com/en-us/magazine/cc163486.aspx#S4

El comando Ejecutar como * Cualquier cosa le evita cerrar la sesión e iniciar sesión como el usuario para el que utiliza el comando runas.

La razón por la cual los progtwigs piden este privilegio elevado comenzó con Black Comb y la carpeta Panther. Hay 0 acceso al Kernel en Windows a menos que a través de la solicitud de administrador y luego solo sea una relación virtual con el kernel de O / S.

Hoorah!

Un poco más claro … Un progtwig de software que tiene acceso en modo kernel tiene acceso total a todos los datos de la computadora y su hardware.

Desde Windows Vista Microsoft ha detenido todos y cada uno de los procesos de E / S para acceder al núcleo (anillo 0) directamente otra vez. Lo más cerca que nos encontramos es una carpeta creada como una partición virtual de acceso al kernel, pero técnicamente no tiene acceso al núcleo en sí mismo; el núcleo se encuentra a medio camino.

Esto se debe a que el software dicta qué token usar, por lo que si solicita un token de acceso de administrador, en lugar de permitir comunicaciones con kernel como en Windows XP, se le pedirá que permita el acceso al kernel, todas y cada una de las veces. El cambio de UAC podría reducir las solicitudes, pero nunca las solicitudes del kernel.

Incluso cuando inicia sesión como administrador, está ejecutando procesos como un usuario estándar hasta que se le pida que eleve los derechos que tiene. Creo que inicié sesión ya que el administrador lo salva de ingresar las credenciales. Pero también escribe en la estructura de la carpeta de usuarios administradores.

El acceso al kernel es similar al acceso raíz en Linux. Cuando elevas tus permisos, te estás aislando de la raíz de C: \ y cualesquiera variables de entorno encantadoras que contengan.

Si recuerda los BSOD, este fue el cierre del sistema operativo cuando creyó que una E / S mala llegó al kernel.

De acuerdo, volvamos a iterar …

La pregunta real (y excelente en eso)

¿Qué hace ‘ejecutar como administrador’ lo que hace que ser miembro del grupo de administradores no lo haga?

(Respuesta 1. Le permite invocar los derechos de administrador mientras está en una sesión de usuario.

Nota: la pregunta es incorrecta; uno es un comando y el otro es un objeto grupal para aplicar políticas.

Abra un símbolo del sistema y escriba runas /? .

Esto mostrará una lista de todos los switches que la línea de comando de runas puede usar.

En cuanto al grupo de administradores, esto se basa en GPEDIT o SECPOL y si un administrador de dominio está presente o no, o si hay una red presente o no.

Por lo general, estas cosas aplicarán restricciones en las computadoras que no afectan al grupo de administradores.

La pregunta debe ser

¿Qué hace el administrador de runas que se ejecuta como el usuario no?

O

¿Qué hace el grupo de administradores que un grupo de usuarios personalizado no puede?

Estás mezclando manzanas y naranjas.