Как предоставить обычным пользователям права на запуск/остановку служб Windows?

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

Предположим, нам нужно предоставить доменной учетной записи contosotuser права на перезапуск службы печати (Print Spooler) с системным именем Spooler . При попытке перезапустить службу под пользователей появляется ошибка:

System error 5 has occurred. Access is denied.

В Windows есть несколько способов предоставления пользователю прав на службу:

Какой из них проще и удобнее – решать Вам.

Управление правами на службы из командой строки

Вы можете использовать встроенную утилиту sc.exe (Service Controller) для управления правами служб Windows.

  • sc show — вывести текущие права службы:
  • sc sdset – изменить права на службу
Примечание . Пример использования sc.exe для ручного удаления службы в Windows .

Основной недостаток этого метода – очень сложный формата предоставления прав на сервис (используется формат SDDL — Security Description Definition Language).

Получить текущие разрешения на службу в виде SDDL строки можно так:

sc.exe sdshow Spooler

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) (A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Что значат все эти символы?

S: — System Access Control List (SACL)
D: — Discretionary ACL (DACL)

Первая буква после скобок означает: разрешить (A, Allow) или запретить (D, Deny).

Следующая пачка символов – назначаемые права.

CC — SERVICE_QUERY_CONFIG (запрос настроек служы)
LC — SERVICE_QUERY_STATUS (опрос состояния служы)
SW — SERVICE_ENUMERATE_DEPENDENTS (опрос зависимостей)
LO — SERVICE_INTERROGATE
CR — SERVICE_USER_DEFINED_CONTROL
RC — READ_CONTROL
RP — SERVICE_START (запуск службы)
WP — SERVICE_STOP (остановка службы)
DT — SERVICE_PAUSE_CONTINUE (приостановка, продолжение службы)

Последние 2 буквы — объекты (группа пользователей или SID), котором нужно назначить права. Есть список предустановленных групп.

AU Authenticated Users

AO Account operators
RU Alias to allow previous Windows 2000
AN Anonymous logon
AU Authenticated users
BA Built-in administrators
BG Built-in guests
BO Backup operators
BU Built-in users
CA Certificate server administrators
CG Creator group
CO Creator owner
DA Domain administrators
DC Domain computers
DD Domain controllers
DG Domain guests
DU Domain users
EA Enterprise administrators
ED Enterprise domain controllers
WD Everyone
PA Group Policy administrators
IU Interactively logged-on user
LA Local administrator
LG Local guest
LS Local service account
SY Local system
NU Network logon user
NO Network configuration operators
NS Network service account
PO Printer operators
PS Personal self
PU Power users
RS RAS servers group
RD Terminal server users
RE Replicator
RC Restricted code
SA Schema administrators
SO Server operators
SU Service logon user

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

whoami /user

или для любого пользователя домена с помощью PowerShell комаднлета Get-ADUser :

Get-ADUser -Identity 'iipeshkov' | select SID

SID доменной группы можно получить с помощью командлета Get-ADGroup :

Get-ADGroup -Filter {Name -like "msk-helpdesk*"} | Select SID

Чтобы назначить SDDL строку с правами на определённую службу, используется команда sc sdset. В нашем примере нужно добавить в ACL службы следующую строку:

(A;;RPWPCR;;; S-1-5-21-2927053466-1818515551-2824591131-1110)
  • A – Allow
  • RPWPCR RP (SERVICE_START) + WP (SERVICE_STOP) + CR ( SERVICE_USER_DEFINED_CONTROL)
  • SID – SID пользователя или группы

Добавьте вашу ACL в конец строки, которая вернула sdshow. Чтобы применить новые права доступа на службу, воспользуйтесь командой sc sdset:

sc sdset Spooler "D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY) (A;;RPWPCR;;;S-1-5-21-2927053466-1818515551-2824591131-1110) "

Если вы сформировали корректный DACL, команда вернет:

[SC] SetServiceObjectSecurity SUCCESS

Если вы указали несуществующий SID или ошиблись в синтаксисе SDDL, появится ошибка:

No mapping between account names and security IDs was done.

Проверьте, что пользователь теперь может остановить и запустить службу:

net stop spooler && net start spooler


Чтобы вывести текущие права на службу в более удобном виде, воспользуйтесь утилитой psservice.exe ( https://learn.microsoft.com/en-us/sysinternals/downloads/psservice )
psservice.exe security spooler

Теперь вы видите права на службу в более удобном виде.

SERVICE_NAME: Spooler_x000D_DISPLAY_NAME: Print Spooler_x000D_ ACCOUNT: LocalSystem_x000D_ SECURITY:_x000D_ [ALLOW] NT AUTHORITYAuthenticated Users_x000D_ Query status_x000D_ Query Config_x000D_ Interrogate_x000D_ Enumerate Dependents_x000D_ User-Defined Control_x000D_ Read Permissions_x000D_ [ALLOW] NT AUTHORITYSYSTEM_x000D_ Query status_x000D_ Query Config_x000D_ Interrogate_x000D_ Enumerate Dependents_x000D_ Pause/Resume_x000D_ Start_x000D_ Stop_x000D_ User-Defined Control_x000D_ Read Permissions_x000D_ [ALLOW] RESOURCEa.ivanov_x000D_ Change Config_x000D_ Start_x000D_ Stop_x000D_ User-Defined Control_x000D_ Read Permissions_x000D_ [ALLOW] BUILTINAdministrators_x000D_ All_x000D_

В предыдущих версиях Windows для управления правами на службы можно было воспользоваться консольной утилитой SubInACL (входила в Windows Resource Kit).

Чтобы разрешить перезапуск службы пользователю, выполните:

subinacl.exe /service Spooler /grant=contosotuser=PTO

В данном случае мы дали пользователю права на приостановку (Pause/Continue), запуск (Start) и остановку (Stop) службы. Полный список доступных разрешений:

F : Full Control_x000D_R : Generic Read_x000D_W : Generic Write_x000D_X : Generic eXecute_x000D_L : Read controL_x000D_Q : Query Service Configuration_x000D_S : Query Service Status_x000D_E : Enumerate Dependent Services_x000D_C : Service Change Configuration_x000D_T : Start Service_x000D_O : Stop Service_x000D_P : Pause/Continue Service_x000D_I : Interrogate Service_x000D_U : Service User-Defined Control Commands

Чтобы лишить пользователя назначенных прав на службу в subinacl.exe используется параметр /revoke . Например:

subinacl.exe /service Spooler /revoke=contosotuser

Однако сейчас SubInACL недоступна для загрузки на сайте Microsoft, поэтому мы не будем рекомендовать использовать ее.

Назначаем разрешения на службу с помощью PowerShell

Вы можете изменить разрешения службы с помощью PowerShell. Встроенный командлет управления службами Set-Service позволяет по аналогии с sc sdset задать права на слуюбу с помощью формата SDDL:

$SDDL = "D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;RPWPCR;;;S-1-5-21-2927053466-1818515551-2824591131-1110)"
Set-Service -Name Spooler -SecurityDescriptorSddl $SDDL

Данный командлет доступен только после установки (обновления) PowerShell Core . В Windows PowerShell 5.1 эта команда вернет ошибку:
Set-Service : A parameter cannot be found that matches parameter name 'SecurityDescriptorSddl'.

Теперь можно под пользователем проверить, что у него появились права на управление службой Print Spooler.

Также вы можете использовать модуль Carbon из PowerShell Gallery для управления разрешениями на разные объекты Windows. Он в том числе позволяет управлять правами на службы. Установите модуль:

Install-Module -Name 'Carbon'Import-Module 'Carbon'

Чтобы предоставить права на службу, выполните команду:

Grant-CServicePermission -Identity remontkakbuldogov -Name spooler -QueryStatus -EnumerateDependents -Start -Stop

Чтобы вывести текущий ACL службы:

Get-ServicePermission -Name spooler|fl

Process Explorer: Изменить права разрешений на службу

Для управления правами на службу из графического интерфейса можно использовать утилиту Process Explorer ( https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer (. Запустите Process Explorer с правами администратора и найдите в списке процессов процесс нужной вам службы. В нашем примере это spoolsv.exe (диспетчер очереди печати — C:WindowsSystem32spoolsv.exe). Откройте свойства процесса и перейдите на вкладку Services .

Нажмите на кнопку Permissions. В окне появится текущий ACL службы. По умолчанию для локальных пользователей доступен только просмотр службы (Read).

Добавьте пользователя или группу, которой нужно предоставить права на сервис. Теперь нужно выбрать назначить уровень полномочий. По умолчанию доступны только Full Control, Write и Read).

Чтобы разрешить запуск/остановку службы, можно предоставить право Write . Однако это позволит пользователю изменить настройки службы или удалить ее.

Чтобы разрешить только запуск/остановку службы, нажмите кнопку Advanced -> выберите вашего пользователя и нажмите Edit -> щелкните Show Advanced permissions. Оставьте в списке прав только Start , Stop , Read , Query Status и User-Defined Control .

Сохраните изменения.
Теперь выбранный пользователь может перезапускать службу.

Управление правами на службы через групповые политики

Если нужно раздать пользователям права запуска/остановку службы сразу на всех северах или компьютерах домена, проще всего воспользоваться возможностями групповых политик (GPO).

  1. Создайте новую или отредактируйте существующую GPO, назначьте ее на нужный контейнер с компьютерами в Active Directory. Перейдите в раздел политик Computer configuration -> Windows Settings -> Security Settings -> System Services ;
  2. Найдите службу Print Spooler и откройте ее свойства;
  3. Включите опцию Define this policy settings , включите автозапуск для службы и нажмите Edit Security ;
  4. В открывшемся окне добавьте пользователя или доменную группу, которым нужно предоставить права на службу. Предоставьте разрешение Start, stop and pause и Read;
  5. Осталось дождаться обновления политик на клиентских компьютерах и проверить что ваш пользователь теперь может перезапускать службу.
Где хранятся разрешения службы Windows ?

Настройки безопасности для все служб, для которых вы изменили разрешения по-умолчанию хранятся в собственной ветке реестра HKLMSystemCurrentControlSetServices<servicename>Security в параметре Security типа REG_BINARY.

Это означает, что одним из способов установки аналогичных разрешений на других компьютерах может быть экспорт/импорт данного параметра реестра (в том числе через GPO ).

Итак, мы разобрали несколько способов управления правами на службы Windows, позволяющих предоставить произвольному пользователю любые права на системные службы. Если нужно, чтобы пользователь могу перезапускать службу удаленно (без предоставления права локального входа в систему ), нужно разрешить пользователю удаленно опрашивать Service Control Manager .

admin

Share
Published by
admin

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

7 дней ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago