Usuários do Windows podem receber vários privilégios
Privilégios determinam o tipo de operações do sistema que uma conta de usuário pode executar. Um administrador atribui privilégios a contas de usuário e grupo. Os privilégios de cada usuário incluem aqueles concedidos ao usuário e aos grupos aos quais o usuário pertence.
Atualmente existem 35 privilégios. Alguns dos mais interessantes são:
- SeSystemtimePrivilege : Necessário para modificar a hora do sistema.
- SeTimeZonePrivilege : necessário para ajustar o fuso horário associado ao relógio interno do computador
- SeBackupPrivilege : esse privilégio faz com que o sistema conceda todo o controle de acesso de leitura a qualquer arquivo, independentemente da lista de controle de acesso (ACL) especificada para o arquivo.
- SeCreatePagefilePrivilege : Necessário para criar um arquivo de paginação.
- SeRemoteShutdownPrivilege : necessário para desligar um sistema usando uma solicitação de rede.
- SeDebugPrivilege : necessário para depurar e ajustar a memória de um processo pertencente a outra conta.
Mas o que mais me interessa é:
- SeShutdownPrivilege : necessário para desligar um sistema local.
Percebi que na verdade não tenho esse privilégio. Em um prompt de comando 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
...
Isso é confirmado ao usar o Process Explorer para examinar o token de segurança de um processo elevado em execução como eu:
E ainda assim eu posso desligar o sistema. Por quê?
A Diretiva de Grupo diz que eu deveria tê-lo
Se você usar o editor de diretiva de segurança local snapin ( secpol.msc
), poderá ver que eu deveria ter o privilégio:
secpol.msc
A explicação do privilégio:
Desligue o sistema
Essa configuração de segurança determina quais usuários com logon local no computador podem desligar o sistema operacional usando o comando Desligar. O uso indevido deste direito de usuário pode resultar em negação de serviço.
Padrão nas estações de trabalho: administradores, operadores de backup, usuários.
Padrão em servidores: administradores, operadores de backup.
Padrão nos controladores de domínio: Administradores, Operadores de backup, Operadores de servidor, Operadores de impressão.
Eu sou um usuário . Às vezes sou administrador e outras vezes não sou administrador .
Talvez a pergunta deva ser por que não tenho o privilégio.
Mas a realidade é que não tenho o privilégio; e ainda assim, quando conectado localmente, posso desligar o sistema local.
Por quê?
@Mehrdad teve uma boa resposta, que ele excluiu, o que eu acho que merece atenção e responde à pergunta de maneira bem e sucinta:
Você tem o privilégio. É apenas desativado por padrão. Se você não tivesse o privilégio, ele não seria listado .
Observe queSE_PRIVILEGE_REMOVED
é diferente de faltaSE_PRIVILEGE_ENABLED
ouSE_PRIVILEGE_ENABLED_BY_DEFAULT
.
Leitura de bônus
fonte
Respostas:
Você tem a permissão, mas está desativada . É isso que o PowerShell está lhe dizendo.
Para desligar o sistema, use a função Win32API chamada
InitiateSystemShutdown
ouExitWindowsEx
:Essas funções observam:
Como você pode ver, o Windows verifica os privilégios de thread (qualquer thread possui token com privilégios). Se você ligar
ExitWindowsEx
sem o privilégio SE_SHUTDOWN_NAME , a função falhará com o erro:Os threads que você cria por padrão herdam seus privilégios; mas um programa pode habilitar um privilégio desabilitado que foi concedido usando
AdjustTokenPrivileges
:Alterar privilégios em um token diz:
Então, por que esse privilégio está desativado por padrão? Para garantir que nenhum programa possa desligar o Windows por acidente. Os aplicativos devem solicitar isso explicitamente.
Existe um livro antigo, mas muito bom: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ sobre tudo isso.
fonte
É porque seu usuário pertence a um grupo que tem esse privilégio ativado.
Para ver por si mesmo quais grupos:
secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG
.SeShutdownPrivilege
entrada. Você (deve) verá alguns / poucos SIDs para usuários e / ou grupos com esse privilégio ativado.Então, eu tenho três SIDs curtos listados. SIDs curtos são geralmente contas / grupos no nível do computador. Por exemplo, um deles é
S-1-5-32-545
.Usando o PowerShell, podemos determinar qual conta / grupo que o SID representa:
Isso retorna
BUILTIN\Users
.Como você é um usuário desse computador, automaticamente é membro desse grupo, o que significa que você pode desligar o computador.
Os outros dois que eu tenho são
S-1-5-32-544
eS-1-5-32-551
. Estes são oBUILTIN\Administrators
grupo padrão e oBUILTIN\Backup Operators
grupo. Qual alinhar com os grupos que você está vendo nasecpol.msc
caixa de diálogo.fonte