MAZIN.UZ

Блог Дмитрия Мазина

Я рад вас видеть на моем блоге!

Полезные заметки в личном блоге Дмитрия Мазина.
                    Заходите, читайте, подписывайтесь.

Разрешить пользователю перезапускать сервисы

Автор: Дмитрий Мазин Опубликовано: 11 - февраля - 2011

Существует несколько способов разрешить пользователям перезапускать сервисы. Приведу два из них.

Первый.

С помощью  subinacl — это утилита из Resource Kit. Нашел на sysadmins.ru

subinacl /service <имя_сервиса> /grant=<домен>\<пользователь>=TO

Второй.

С Помощью sc. Нашел на хабре.

Сыылка на Microsoft Technet про SC.

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

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

C:\Users\administrator>sc sdshow service_name

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Без изысков.

Как видно, есть 2 интересных префикса:
S: — System Access Control List (SACL) — это нас сейчас не интересует.
D: — Discretionary ACL (DACL) — здесь указываются права для всех и всего.

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

Мы разрешаем:
(A;;;;;)

И потом видим комбинации из двух букв:
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

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

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

но, самый простой и удобный (на мой взгляд), написать маленький скриптик на vb:

strComputer = «.»
Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\cimv2»)

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, напишите имя группы.

Автор: mrpsycho

За что ему отдельное спасибо!

Комментариев к записи: 4

  1. Glad I’ve finally found soemhintg I agree with!

  2. Hok:

    спасибо!
    скажите пожалуйста, как можно с помощью subinacl получить доступ к съёмному hdd? Не могу зайти в Documents and Setting — Access Denied.А то большинство статей — как получить доступ к папке на компе:( А у меня hdd в usb-коробке.

  3. Дмитрий Мазин:

    Вот так пробовал?

  4. wolf:

    Статья помогла в целом написано правильно, но скрипт получения SID не возможно запустить
    1. непонятные символы юникод, которые портят код (символ ковычек).
    2. ошибки в вызовах методов — лень самому было искать.

    поэтому добыл SID другим способом — (http://dentnt.windowsfaq.ru/?p=143 не сочти за рекламу — реально первая ссылка в Яндексе)
    Открытл редактор реестра и перешел в:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \ProfileList
    В разделе ProfileList список идентификаторов безопасности (SID). Выбирая каждый по-очереди нужно смотреть на значение ProfileImagePath
    Дальше нажал правой мышкой по разделу и скопировал раздел в текстовый файл …
    остальное получилось огромное спасибо!

Оставить комментарий