Как я могу выключить систему, когда у меня нет SeShutdownPrivilege

пользователи в Windows могут быть предоставлены различные льготы

привилегии определяют тип системных операций, которые может выполнять учетная запись пользователя. Администратор назначает привилегии учетным записям пользователей и групп. Права доступа каждого пользователя включают права, предоставленные пользователю и группам, к которым он принадлежит.

в настоящее время существует 35 привилегий. Некоторые из наиболее интересных are:

  • SeSystemtimePrivilege: изменить системное время.
  • SeTimeZonePrivilege: требуется настроить часовой пояс, связанный с внутренними часами компьютера
  • разрешенные: эта привилегия заставляет систему предоставлять все управление доступом на чтение любому файлу, независимо от списка управления доступом (ACL), указанного для папка.
  • SeCreatePagefilePrivilege: требуется для создания файла подкачки.
  • SeRemoteShutdownPrivilege: требуется для завершения работы системы с помощью сетевого запроса.
  • SeDebugPrivilege: требуется для отладки и настройки памяти процесса, принадлежащего другой учетной записи.

но тот, который меня интересует:

  • SeShutdownPrivilege: требуется для выключения локальная система.

я заметил, что на самом деле я не есть эта привилегия. Из командной строки:

>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
   ...

Это подтверждается при использовании Process Explorer изучить маркер безопасности с повышенными процесс, работающий, как и я:

enter image description here

а еще я can выключить систему. Почему?

групповая политика говорит, что я должен это

при использовании локального редактора политики безопасности snapin (secpol.msc), вы видите, что я должны есть привилегия:

  • secpol.msc

    • Параметры Безопасности
    • Локальные Политики
    • Назначение Прав Пользователя
    • выключить систему

      enter image description here

Explaination привилегии:

выключить систему

этот параметр безопасности определяет, какие пользователи вошли в систему локально
компьютер, завершить работу операционной системы, используя закрыли
команда. Неправильное применение этого права пользователя может привести к отказу в обслуживании.

по умолчанию на рабочих станциях: администраторы, операторы архива, опытные пользователи.

по умолчанию на серверах: администраторы, резервное копирование Операторы.

по умолчанию на контроллерах домена: администраторы операторы резервного копирования ,
Операторы Сервера, Операторы Печати.

Я пользователей. Иногда я администратор, а я NotAdministrator.

возможно, вопрос должен быть, почему не у меня есть привилегия.

но реальность такова, что у меня нет привилегий, и все же, когда локально войти в систему я может выключить локальную систему.

почему?


<!-У@Mehrdad был хороший ответ, который он удалил, который, я думаю, заслуживает внимания и отвечает на вопрос красиво и лаконично:

вы есть привилегии. По умолчанию он просто отключен. Если вы
тогда не было привилегии он не будет указан вообще.

уведомления
это SE_PRIVILEGE_REMOVED отличается от отсутствия
SE_PRIVILEGE_ENABLED или SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Бонус Чтение

15
задан Ian Boyd
07.02.2023 6:14 Количество просмотров материала 2425
Распечатать страницу

2 ответа

у вас есть разрешение, но это отключен. Это то, что PowerShell говорит вам.

для завершения работы системы вы используете функцию Win32API называется InitiateSystemShutdown или ExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

эти функции Примечание:

завершить работу локального компьютера, вызывая нить должны иметь привилегию SE_SHUTDOWN_NAME. По умолчанию пользователи могут включить SE_SHUTDOWN_NAME привилегии на компьютере, на котором они вошли в систему, и администраторы могут включить привилегию SE_REMOTE_SHUTDOWN_NAME на удаленных компьютерах.

Как видите, Windows проверяет нить привилегии (любой поток имеет маркер с привилегиями). Если вы позвоните ExitWindowsEx без SE_SHUTDOWN_NAME привилегии, функция завершится с ошибкой:

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

потоки, создаваемые по умолчанию, наследуют привилегии; но программа может включить отключенные привилегии, которые были предоставлены с помощью 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);

изменение привилегий в токене говорит:

AdjustTokenPrivileges не удалось добавить или удалить привилегии от маркера. Это может включить только существующие привилегии, которые в настоящее время отключены или отключить существующие привилегии, которые в настоящее время включены


так, почему эта привилегия отключена по умолчанию? Чтобы убедиться, что ни одна программа не может выключить Windows случайно. Приложения должны запрашивать это явно.

есть древняя, но очень хорошая книга:https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ обо всем этом.

29
отвечен user996142 2023-02-08 14:02

это потому, что пользователь принадлежит к группе, которая имеет эту привилегию включен.

чтобы увидеть для себя, какая группа(ы):

  • Откройте командную строку PowerShell от имени администратора.
  • Run secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • просмотр содержимого OutFile.cfg в блокноте или так и искать SeShutdownPrivilege запись. Вы увидите (должны) пару / несколько идентификаторов безопасности для пользователей и / или групп с включенными привилегиями.

так у меня три короткие Sid перечислены. Короткие Sid обычно являются учетными записями/группами на уровне компьютера. Например, один из них S-1-5-32-545.

С помощью PowerShell мы можем определить, какую учетную запись или группу представляет SID:

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

возвращает BUILTIN\Users.

так как вы пользователь на этом компьютере, вы автоматически являетесь членом этой группы, то есть вы можете выключить компьютер.

два других у меня есть S-1-5-32-544 и S-1-5-32-551. Эти стандарт BUILTIN\Administrators группы и BUILTIN\Backup Operators группы. Какая линия с группами, которые вы видите в secpol.msc диалог.

5
отвечен Ƭᴇcʜιᴇ007 2023-02-08 16:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх