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

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

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

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

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

  • SeSystemtimePrivilege: Требуется для изменения системного времени.
  • SeTimeZonePrivilege: Требуется для настройки часового пояса, связанного с внутренними часами компьютера.
  • SeBackupPrivilege: Эта привилегия позволяет системе предоставлять полный контроль доступа на чтение любому файлу независимо от списка управления доступом (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
   ...

Это подтверждается при использованииОбозреватель процессовдля проверки токена безопасности процесса с повышенными правами, запущенного от моего имени:

введите описание изображения здесь

И все же яможетвыключить систему. Зачем?

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

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

  • secpol.msc

    • Настройки безопасности
    • Местная политика
    • Назначение прав пользователя
    • Выключите систему.

      введите описание изображения здесь

TheОбъяснениепривилегии:

Выключите систему.

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

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

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

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

ЯПользователь. Иногда яАдминистратор, а иногда яНеАдминистратор.

Возможно, вопрос должен быть таким: почему?неУ меня есть такая привилегия.

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

Почему?


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

Тыиметьпривилегия. Она просто отключена по умолчанию. Если у вас не было привилегии, тоего вообще не будет в списке.
Уведомление это SE_PRIVILEGE_REMOVEDотличается от отсутствия SE_PRIVILEGE_ENABLEDили SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Бонусное чтение

решение1

У вас есть разрешение, но этонеполноценныйВот что вам говорит 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/обо всем этом.

решение2

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

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

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

Итак, у меня есть три коротких 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диалоговом окне.

Связанный контент