Права для запуска системных служб

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

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

Простого и удобного встроенного инструмента для управления разрешениями на службы в Windows нет. Мы рассмотрим несколько способ предоставления пользователю прав на службу:

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

Встроенная утилита SC.exe (Service controller)

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

Главная, проблема – зубодробительный синтаксис формата предоставления прав на сервис (формат SDDL).

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

sc.exe sdshow Spooler

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

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

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

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

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

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

Читайте также:  77Налог ру личный кабинет

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

Get-ADUser -Identity ‘iipeshkov’ | select SID

К примеру, права пользователю на службу spooler могут быть предоставлены следующей командой:

SubInACL: назначаем права на службы с помощью утилиты Sysinternals

Гораздо проще воспользоваться консольной утилитой SubInACL из комплекта Sysinternals от Марка Руссиновича (права на которую вместе с автором теперь принадлежат Microsoft). Синтаксис этой утилиты гораздо проще и удобнее для восприятия. Как предоставить права перезапуска на службу с помощью SubInACL:

  1. Скачайте msi со страницы (https://www.microsoft.com/en-us/download/details.aspx? />
  2. В командной строке с правами администратора перейдите в каталог с утилитой: cd “ C:Program Files (x86)Windows Resource KitsTools) ”
  3. Выполните команду: subinacl.exe /service Spooler /grant=contoso user=PTO

Если нужно предоставить права на службу, запущенную на удаленном компьютере, синтаксис будет такой:
subinacl /SERVICE \msk-buh01spooler /grant=contoso user=F

  • Осталось войти в данную систему под учетной записью пользователя и попробовать перезапустить службу командами:
    net stop spooler
    net start spooler
  • Если вы все сделали верно, служба должна остановиться и запуститься заново.

    Process Explorer: Установка разрешений на службу

    Достаточно просто изменить разрешения на службу с помощью еще одной утилиты Sysinternals — Process Explorer. Запустите Process Explorer с правами администратора и найдите в списке процессов процесс нужной вам службы. В нашем примере это spoolsv.exe (диспетчер очереди печати — C:WindowsSystem32spoolsv.exe). Откройте свойства процесса и перейдите на вкладку Services.

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

    Шаблон безопасности (Security Template)

    Более наглядный (но и требующий большего количества действий) графический способ управления правами на службы – с помощью шаблонов безопасности. Для реализации, откройте консоль mmc.exe и добавьте оснастку Security Templates.

    Создадим новый шаблон (New Template).

    Задайте имя нового шаблона и перейдите в раздел System Services. В списке служб выберите свою службу Print Spooler и откройте ее свойства.

    Установите тип запуска (Automatic) и нажмите кнопку Edit Security.

    С помощью кнопки Add добавьте учетную запись пользователя или группы, которым нужно предоставить права. В нашем случае, нам достаточно права Start, Stop and pause.

    Сохраните шаблон (Save).

    Если открыть этот файл, можно увидеть, что данные о правах доступа сохраняются в уже ранее упомянутом SDDL формате. Полученная таким образом строка может быть использована в качестве аргументы команды sc.exe.

    Осталось с помощью оснастки Security Configuration and Analysis создать новую базу данных (Open Database) и импортировать наш шаблон безопасности из файла Spooler User Rights.inf.

    Читайте также:  Съемное устройство для хранения информации

    Применим шаблон, вызвав из контекстного меню команду Configure Computer Now.

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

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

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

    1. Создайте новую или отредактируйте существующую GPO, назначьте ее на нужный контейнер с компьютерами в Active Directory. Перейдите в раздел политик Computer configuration -> Windows Settings -> Security Settings -> System Services.
    2. Найдите службу Spooler и аналогично ранее рассмотренной методике предоставьте права пользователю. Сохраните изменения.

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

    В галерее TechNet имеется отдельный неофициальный модуль PowerShell для управления разрешениями на разные объекты Windows — PowerShellAccessControl Module (скачать его можно здесь). Этот модуль позволяет он управлять правами на службы. Импортируйте модуль в свою сессию:

    Получить эффективные разрешения на конкретную службу из PowerShell можно так:

    Get-Service spooler | Get-EffectiveAccess -Principal corp user

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

    Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp user

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

    Буквально сегодня понадобилось дать человеку возможность перезапускать тестовый вебсервер под виндой.
    Права админа давать естественно давать не хочется.
    «Мощный» юзер не подходит.

    букв много

    и тут на помощь приходит technet, который расcказывает про sc.

    В данном случае нас интересуют 2 команды:
    sc sdshow — показывает права
    sc sdset — устанавливает права

    Для начала узнаем, какие права у нашего сервиса уже есть:
    C:Usersadministrator>sc sdshow service_name

    Как видно, есть 2 интересных префикса:
    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

    По сути, нас будут интересовать последние три опции:
    (A;;RPWPDT;;;)

    Последние 2 буквы обозначают кому мы разрешаем или запрещаем:
    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

    Читайте также:  Internet explorer для ios

    + к этому списку можно явно указать пользователя по SID’у.

    Вот это самое интересное!
    как узнать SID пользователя?
    есть не один способ 🙂

    но, самый простой и удобный (на мой взгляд), написать маленький скриптик на vb:
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\" & strComputer & "
    ootcimv2")

    Set objAccount = objWMIService.Get _
    ("Win32_UserAccount.Name=’username’,Domain=’domain’")
    Wscript.Echo objAccount.SID

    Заменяем имя пользователя и домен по своему вкусу, сохраняем файл с расширением .vbs и запускаем.
    Появляется алерт с SID.

    Копируем в блокнот(или в любое другое место)
    Можно скрипт запустить в консоли, сэкономим время 🙂

    И так. Узнали SID.
    Вставляем в ключ:
    (A;;RPWPDT;;;S-1-5-21-3992622163-2725220152-438995547-4172)

    Теперь подготавливаем команду целиком:
    sc sdset D:(A;;RPWPDT;;;S-1-5-21-3992622163-2725220152-438995547-4172)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
    RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

    Наш ключ вставляем в любое место, но важно чтобы он был перед префиксом S.
    Важно не ошибиться, иначе можем потерять доступ к сервису 🙂
    Запускаем.

    проверяем:
    sc \server stop «service_name»

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

    UPD можно, кстате, использовать группы.
    для того чтобы узнать SID группы — вместо username, напишите имя группы.

    Полезная информация об администрировании пользовательских и серверных ОС Windows.

    Иногда требуется дать пользователю Windows (не администратору) права запускать определенную службу. Чтобы это сделать можно воспользоваться утилитой SubInACL от Microsoft.

    Итак порядок действий такой:

    — запускаем от имени администратора команду:

    «C:Program Files (x86)Windows Resource KitsToolssubinacl.exe» /service ServiceName /grant=DOMAINuser=PTO

    здесь ServiceName — название необходимой службы

    DOMAINuser — имя пользователя в домене, кому необходим доступ на управление этой службой. (можно использовать также имена групп в домене, или локальных пользователей/групп).

    — Теперь пользователь может запустить указанную службу от своего имени, например через bat-файл:

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Adblock detector