За замовчуванням звичайні користувачі, що не володіють правами адміністратора системи, не можуть управляти системними (і більшістю прикладних) службами Windows. Це означає, що вони не можуть зупиняти, запускати (перезапускати), змінювати налаштування і дозволу таких служб. У деяких випадках все-таки потрібно, щоб у користувача були права на перезапуск і управління певними службами. У цій статті ми розберемо кілька способів управління правами на служби Windows. Зокрема, ми покажемо, як надати звичайному користувачеві, без прав адміністратора Windows, права на запуск, зупинку і перезапуск певної служби.
Припустимо, нам потрібно надати доменної облікового запису contoso\ tuser права на перезапуск служби друку (Print Spooler) з системним ім'ям Spooler.
Простого і зручного вбудованого інструменту для управління дозволами на служби в Windows немає. Ми розглянемо кілька спосіб надання користувачеві прав на службу:
зміст:
- Вбудована утиліта SC.exe (Service controller)
- SubInACL: призначаємо права на служби за допомогою утиліти Sysinternals
- Process Explorer: Установка дозволів на службу
- Шаблон безпеки (Security Template)
- Управління правами служб через групові політики
- Призначаємо дозволу на службу за допомогою PowerShell
Який з них простіше і зручніше - вирішувати Вам.
Вбудована утиліта SC.exe (Service controller)
Стандартний, вбудований в Windows спосіб управління правами на служби системи передбачає використання утиліти sc.exe (Service Controller).
Примітка. Приклад використання sc.exe для ручного видалення служби в Windows.Головна, проблема - зубодробильний синтаксис формату надання прав на сервіс (формат 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 UsersAO 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
Можна замість попередньо встановленою групи явно вказати користувача або групу по SID. Отримати SID користувача для поточного користувача можна за допомогою команди:
whoami / user
або для будь-якого користувача домену за допомогою PowerShell комаднлета Get-ADUser:
Get-ADUser -Identity 'iipeshkov' | select SID
Наприклад, права користувачеві на службу spooler можуть бути надані за допомогою такої команди:
sc sdset Spooler "D: (A ;; CCLCSWRPWPDTLOCRRC ;;; SY) (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; BA) (A ;; CCLCSWLOCRRC ;;; IU) (A ;; CCLCSWLOCRRC ;;; SU) (A ;; RPWPCR ;;; S-1-5-21-2133228432-2794320136-1823075350-1000) S: (AU; FA; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; WD) "
SubInACL: призначаємо права на служби за допомогою утиліти Sysinternals
Набагато простіше скористатися консольної утилітою SubInACL з комплекту Sysinternals від Марка Руссиновича (права на яку разом з автором тепер належать Microsoft). Синтаксис цієї утиліти набагато простіше і зручніше для сприйняття. Як надати права перезапуску на службу за допомогою SubInACL:
- скачайте msi зі сторінки (https://www.microsoft.com/en-us/download/details.aspx?id=23510) і встановіть її на цільовій системі.
- У командному рядку з правами адміністратора перейдіть в каталог з утилітою:
cd "C: \ Program Files (x86) \ Windows Resource Kits \ Tools \)
" - Виконайте команду:
subinacl.exe / service Spooler / grant = contoso \ tuser = PTO
Примітка. В даному випадку ми дали користувачеві права на припинення (Pause / Continue), запуск (Start) і зупинку (Stop) служби. Повний список доступних дозволів:F: Full Control
R: Generic Read
W: Generic Write
X: Generic eXecute
L: Read controL
Q: Query Service Configuration
S: Query Service Status
E: Enumerate Dependent Services
C: Service Change Configuration
T: Start Service
O: Stop Service
P: Pause / Continue Service
I: Interrogate Service
U: Service User-Defined Control CommandsЯкщо потрібно надати права на службу, запущену на віддаленому комп'ютері, синтаксис буде такою:
subinacl / SERVICE \\ msk-buh01 \ spooler / grant = contoso \ tuser = F
- Залишилося увійти в цю систему під обліковим записом користувача і спробувати перезапустити службу командами:
net stop spooler
net start spooler
Якщо ви все зробили правильно, служба повинна зупинитися і запуститися заново.
Process Explorer: Установка дозволів на службу
Досить просто змінити дозволу на службу за допомогою ще однієї утиліти Sysinternals - Process Explorer. Запустіть Process Explorer з правами адміністратора і знайдіть в списку процесів процес потрібної вам служби. У нашому прикладі це spoolsv.exe (диспетчер черги друку - C: \ Windows \ System32 \ spoolsv.exe). Відкрийте властивості процесу і перейдіть на вкладку Services.
Натисніть на кнопку Permissions і у вікні, додайте користувача або групу, якій потрібно надати права на сервіс і рівень повноважень.
Шаблон безпеки (Security Template)
Наочніший (але і вимагає більшої кількості дій) графічний спосіб управління правами на служби - за допомогою шаблонів безпеки. Для реалізації, відкрийте консоль mmc.exe і додайте оснащення Security Templates.
Створимо новий шаблон (New Template).
Задайте ім'я нового шаблону і перейдіть в розділ System Services. У списку служб виберіть свою службу Print Spooler і відкрийте її властивості.
Встановіть тип запуску (Automatic) І натисніть кнопку Edit Security.
За допомогою кнопки Add додайте обліковий запис користувача або групи, яким потрібно надати права. У нашому випадку, нам достатньо права Start, Stop and pause.
Збережіть шаблон (Save).
Примітка. Вміст шаблона безпеки зберігається в inf файлі в каталозі C: \ Users \ username \ Documents \ Security \ TemplatesЯкщо відкрити цей файл, можна побачити, що дані про права доступу зберігаються в уже раніше згаданому SDDL форматі. Отримана таким чином рядок може бути використана в якості аргументи команди sc.exe.
[Unicode] Unicode = yes [Version] signature = "$ CHICAGO $" Revision = 1 [Service General Setting] "Spooler", 2, "D: AR (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; SY) (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO; ;; BA) (A ;; CCLCSWLOCRRC ;;; IU) (A ;; RPWPDTRC ;;; S-1-5-21-3243688314-1354026805-3292651841-1127) S: (AU; FA; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; WD ) "
Залишилося за допомогою оснастки Security Configuration and Analysis створити нову базу даних (Open Database) і імпортувати наш шаблон безпеки з файлу Spooler User Rights.inf.
Застосуємо шаблон, викликавши з контекстного меню команду Configure Computer Now.
Тепер можна під користувачем перевірити, що у нього з'явилися права на управління службою Print Spooler.
Управління правами служб через групові політики
Якщо потрібно роздати користувачам права запуску / зупинки сервісу відразу на безлічі сєверов або комп'ютерах домену, найпростіше скористатися можливостями групових політик (GPO).
- Створіть нову або відредагуйте існуючу GPO, призначте її на потрібний контейнер з комп'ютерами в Active Directory. Перейдіть в розділ політик Computer configuration -> Windows Settings -> Security Settings -> System Services.
- Знайдіть службу Spooler і аналогічно раніше розглянутої методикою надайте права користувачеві. збережіть зміни.Примітка. Раніше ми показували, як за допомогою аналогічної GPO можна приховати від всіх користувачів системи будь-яку службу Windows.
- Залишилося дочекатися застосування політик на клієнтських комп'ютерах і перевірити застосування налаштувань прав служби.
Призначаємо дозволу на службу за допомогою PowerShell
У галереї TechNet є окремий неофіційний модуль PowerShell для керування дозволами на різні об'єкти Windows - PowerShellAccessControl Module (скачати його можна тут). Цей модуль дозволяє він управляти правами на служби. Імпорт модуль в свою сесію:
Import-Module PowerShellAccessControl
Отримати ефективні дозволу на конкретну службу з PowerShell можна так:
Get-Service spooler | Get-EffectiveAccess -Principal corp \ tuser
Щоб надати звичайному користувачеві права на запуск і зупинку служби, виконайте:
Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start, Stop -Principal corp \ tuser
Отже, ми розібрали кілька способів управління правами на служби Windows, що дозволяють надати безпідставного користувачеві будь-які права на служби системи. У тому випадку, якщо користувачеві потрібно віддалений доступ до служби, без надання йому прав локального входу в систему, потрібно дозволити користувачеві віддалено опитувати Service Control Manager.