20 votos

Cómo soy capaz de apagar el sistema cuando yo don ' tiene SeShutdownPrivilege

Los usuarios de Windows pueden ser otorgado diversos privilegios

Los privilegios de determinar el tipo de sistema de operaciones que una cuenta de usuario puede realizar. Un administrador asigna privilegios de cuentas de usuario y grupo. Cada uno de los privilegios del usuario incluyen los otorgados para el usuario y los grupos a los que pertenece el usuario.

Actualmente hay 35 privilegios. Algunas de las más interesantes son:

  • SeSystemtimePrivilege: se Requiere para modificar la hora del sistema.
  • SeTimeZonePrivilege: Requiere el ajuste de la zona horaria asociada con el reloj interno del ordenador
  • SeBackupPrivilege: Este privilegio, hace que el sistema para conceder a todos los de control de acceso a cualquier archivo, independientemente de la lista de control de acceso (ACL) de la especificada para el archivo.
  • SeCreatePagefilePrivilege: se Requiere para crear un archivo de paginación.
  • SeRemoteShutdownPrivilege: se Requiere para apagar un sistema mediante una solicitud de red.
  • SeDebugPrivilege: Necesarios para depurar y ajustar la memoria de un proceso que pertenece a otra cuenta.

Pero el que más me interesa es:

  • SeShutdownPrivilege: se Requiere para apagar un sistema local.

Me di cuenta de que yo en realidad no tienen este 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 cuando se utiliza el Explorador de Procesos para examinar el token de seguridad de un elevado proceso de ejecución como a mí:

enter image description here

Y sin embargo, me puede apagar el sistema. Por qué?

La Directiva de Grupo dice que debo tener

Si utiliza el editor de directivas de Seguridad complemento (secpol.msc), se puede ver que yo debería tener el privilegio:

  • secpol.msc

    • La Configuración De Seguridad
    • Las Políticas Locales
    • Asignación De Derechos De Usuario
    • Apagar el sistema

      enter image description here

La Explicación de los privilegios:

Apagar el sistema

Esta configuración de seguridad determina que los usuarios que hayan iniciado sesión localmente el equipo puede apagar el sistema operativo con el Cierre hacia Abajo comando. El mal uso de este derecho de usuario puede resultar en una denegación de servicio.

Por defecto en las Estaciones de trabajo: Administradores, Operadores de Copia de seguridad de los Usuarios.

Por defecto en los Servidores: Administradores, Operadores de Copia de seguridad.

Predeterminada de controladores de Dominio: Administradores, Operadores de Copia de seguridad, Servidor, Operadores De Impresión.

Soy un Usuario. A veces soy un Administrador, y otras veces soy un NotAdministrator.

Tal vez la pregunta debería ser ¿por qué no tengo el privilegio.

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

Por qué?


@Mehrdad tenía una buena respuesta, que se eliminan, lo que creo que merece la atención y responde a la pregunta muy bien y de manera sucinta:

Usted tiene el privilegio. Es simplemente deshabilitada de forma predeterminada. Si no tienen el privilegio entonces no estaría en la lista.
Aviso que SE_PRIVILEGE_REMOVED es diferente de la que carecen SE_PRIVILEGE_ENABLED o SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Bono De Lectura

29voto

erelender Puntos 3634

Usted tiene el permiso, pero está deshabilitado. Eso es lo que PowerShell está diciendo.

Para apagar el sistema utiliza el Win32API función llamada InitiateSystemShutdown o ExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

Estas funciones nota:

Para apagar el equipo local, el llamado hilo debe tener el privilegio SE_SHUTDOWN_NAME. De forma predeterminada, los usuarios pueden habilitar los SE_SHUTDOWN_NAME privilegio en el equipo se registran en, y los administradores pueden habilitar la SE_REMOTE_SHUTDOWN_NAME privilegio en equipos remotos.

Como se puede ver, Windows comprueba hilo de privilegios (en cualquier hilo ha token con privilegios). Si usted llama a ExitWindowsEx sin la SE_SHUTDOWN_NAME privilegio, la función va a fallar con el error:

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

Los hilos que se crean por defecto heredar de sus privilegios; pero un programa puede activar algún privilegio que le ha sido otorgada mediante AdjustTokenPrivileges:

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);

Cambio de Privilegios en un Token dice:

AdjustTokenPrivileges no se puede agregar o quitar privilegios de los token. Se puede solo que los privilegios que se encuentran deshabilitadas o desactivar las existentes privilegios que actualmente están habilitados


Así que, ¿por qué este privilegio desactivado por defecto? Para asegurarse de que ningún programa puede apagar de Windows por accidente. Las aplicaciones deben pedir esto de forma explícita.

Hay una antigua pero muy buen libro: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ acerca de todas las cosas.

5voto

Brandon Puntos 2580

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

A ver por ti mismo qué grupo(s):

  • Abrir un PowerShell (o Comando) símbolo del sistema como Administrador.
  • Ejecutar secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • Ver el contenido de OutFile.cfg con el Bloc de notas o similar, y buscar la SeShutdownPrivilege de entrada. Usted (debe) ver un par/par de Sid para los usuarios y/o grupos que tienen ese privilegio habilitado.

Así que tengo tres cortos Sid de la lista. Corta los Peid son generalmente de computadora a nivel de cuentas/grupos. Por ejemplo, uno de ellos es S-1-5-32-545.

El uso de PowerShell podemos determinar que de cuenta de grupo que SID representa:

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

Esto devuelve BUILTIN\Users.

Puesto que usted es un usuario de ese equipo, usted es automáticamente un miembro de ese grupo, lo que significa que puede apagar el equipo.

Los otros dos que tengo son S-1-5-32-544y S-1-5-32-551. Estos son los estándar BUILTIN\Administrators de grupo, y el BUILTIN\Backup Operators grupo. Que se alinean con los grupos a los que estamos viendo en la secpol.msc cuadro de diálogo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: