La política de grupo dice que debería tenerlo.

La política de grupo dice que debería tenerlo.

A los usuarios de Windows se les pueden conceder variasprivilegios

Los privilegios determinan el tipo de operaciones del sistema que puede realizar una cuenta de usuario. Un administrador asigna privilegios a cuentas de usuarios y grupos. Los privilegios de cada usuario incluyen los otorgados al usuario y a los grupos a los que pertenece el usuario.

Actualmente hay 35 privilegios. Algunos de los más interesantes son:

  • SeSystemtimePrivilegio: Requerido para modificar la hora del sistema.
  • SeTimeZonePrivilegio: Requerido para ajustar la zona horaria asociada con el reloj interno de la computadora
  • Privilegio SeBackup: Este privilegio hace que el sistema otorgue control de acceso de lectura a cualquier archivo, independientemente de la lista de control de acceso (ACL) especificada para el archivo.
  • Privilegio SeCreatePagefile: Necesario para crear un archivo de paginación.
  • Privilegio de apagado remoto Se: Necesario para apagar un sistema mediante una solicitud de red.
  • Privilegio SeDebug: Necesario para depurar y ajustar la memoria de un proceso propiedad de otra cuenta.

Pero el que me interesa es:

  • SeShutdownPrivilegio: Necesario para apagar un sistema local.

Me di cuenta de que en realidad notenereste privilegio. Desde un símbolo del sistema elevado:

>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                  Description                               State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege        Adjust memory quotas for a process        Disabled
SeSecurityPrivilege             Manage auditing and security log          Disabled
SeTakeOwnershipPrivilege        Take ownership of files or other objects  Disabled
   ...
SeShutdownPrivilege             Shut down the system                      Disabled
   ...

Esto se confirma al utilizarExplorador de procesospara examinar el token de seguridad de un proceso elevado que se ejecuta como yo:

ingrese la descripción de la imagen aquí

Y sin embargo yopodercerrar el sistema. ¿Por qué?

La política de grupo dice que debería tenerlo.

Si usa el complemento del editor de Política de seguridad local ( secpol.msc), puede ver quedeberíatener el privilegio:

  • secpol.msc

    • Configuraciones de seguridad
    • Políticas locales
    • Asignación de derechos de usuario
    • Apagar el sistema

      ingrese la descripción de la imagen aquí

ElExplicacióndel privilegio:

Apagar el sistema

Esta configuración de seguridad determina qué usuarios que han iniciado sesión localmente en la computadora pueden apagar el sistema operativo usando el comando Apagar. El mal uso de este derecho de usuario puede resultar en una denegación de servicio.

Valor predeterminado en las estaciones de trabajo: administradores, operadores de respaldo, usuarios.

Valor predeterminado en servidores: administradores, operadores de respaldo.

Valor predeterminado en los controladores de dominio: administradores, operadores de respaldo, operadores de servidor, operadores de impresión.

soy unUsuario. A veces soy unAdministrador, y otras veces soy unNo administrador.

Quizás la pregunta debería ser por quénoTengo el privilegio.

Pero la realidad es que no tengo el privilegio; y, sin embargo, cuando inicio sesión localmente puedo cerrar el sistema local.

¿Por qué?


@Mehrdad tuvo una buena respuesta, que eliminó, que creo que merece atención y responde la pregunta de manera agradable y sucinta:

tenerel privilegio. Simplemente está deshabilitado de forma predeterminada. Si no tuvieras el privilegio entoncesno estaría en la lista en absoluto.
Aviso eso SE_PRIVILEGE_REMOVEDes diferente de faltar SE_PRIVILEGE_ENABLEDo SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Lectura adicional

Respuesta1

Tienes el permiso, pero es así.desactivado. Eso es lo que te dice PowerShell.

Para apagar el sistema se utiliza la función Win32API llamadaInitiateSystemShutdownoExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

Estas funciones notan:

Para apagar la computadora local, la persona que llamahilodebe tener el privilegio SE_SHUTDOWN_NAME. Por defecto,los usuarios pueden habilitar SE_SHUTDOWN_NAMEprivilegio en la computadora en la que iniciaron sesión, y los administradores pueden habilitar el privilegio SE_REMOTE_SHUTDOWN_NAME en computadoras remotas.

Como puede ver, Windows compruebahiloprivilegios (cualquier hilo tiene token con privilegios). Si llamas ExitWindowsExsinSE_SHUTDOWN_NAMEprivilegio, la función fallará con el error:

Error code: 1314
A required privilege is not held by the client

Los hilos que crea de forma predeterminada heredan sus privilegios; pero un programa puede habilitar un privilegio deshabilitado que se le ha otorgado usandoAdjustTokenPrivileges:

TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = LookupPrivilegeValue(NULL, "SeShutdownPrivilege");
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

HANDLE processToken = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES);
AdjustTokenPrivileges(processToken, FALSE, &tp, 0, NULL, NULL);
CloseHandle(processToken);

Cambiar privilegios en un tokendice:

AdjustTokenPrivileges No se pueden agregar ni eliminar privilegios.de la ficha. Puedehabilitar solo los privilegios existentes que están actualmente deshabilitadoso deshabilitar los privilegios existentes que están actualmente habilitados


Entonces, ¿por qué este privilegio está deshabilitado de forma predeterminada? Para asegurarse de que ningún programa pueda cerrar Windows por accidente. Las aplicaciones deben solicitarlo explícitamente.

Hay un libro antiguo pero muy bueno:https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/sobre todas esas cosas.

Respuesta2

Es porque su usuario pertenece a un grupo que tiene ese privilegio habilitado.

Para ver usted mismo qué grupo(s):

  • Abra un símbolo de PowerShell (o Comando) como administrador.
  • Correr secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • Vea el contenido de OutFile.cfg en el Bloc de notas o similar y busque la SeShutdownPrivilegeentrada. Verá (debería) ver un par o algunos SID para usuarios y/o grupos que tienen ese privilegio habilitado.

Entonces tengo tres SID cortos en la lista. Los SID cortos suelen ser cuentas/grupos a nivel de computadora. Por ejemplo, uno de ellos es S-1-5-32-545.

Usando PowerShell podemos determinar qué cuenta/grupo representa ese SID:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-32-545")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value

Esto regresa BUILTIN\Users.

Como eres usuario de esa computadora, automáticamente eres miembro de ese grupo, lo que significa que puedes apagar la computadora.

Los otros dos que tengo son S-1-5-32-544y S-1-5-32-551. Estos son el BUILTIN\Administratorsgrupo estándar y el BUILTIN\Backup Operatorsgrupo. Que se alinean con los grupos que estás viendo en el secpol.mscdiálogo.

información relacionada