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


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

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

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

Мне не нравится какой-либо из этих методов - я не понимаю последствий первого метода, описанного в статье базы знаний Microsoft, но я определенно не хочу предоставлять администратору доступ к учетной записи, под которой работает служба ,

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

Мы запускаем это на Server 2003 и Server 2008, поэтому любые идеи или указатели будут любезно приняты!


Разъяснение: Я не хочу предоставлять возможность запускать / останавливать / перезапускать ВСЕ сервисы данному пользователю или группе - я хочу, чтобы иметь возможность разрешить это делать конкретный услуг только определенному пользователю или группе.


Дальнейшее уточнение: Серверы, которым я должен предоставить эти разрешения, не принадлежат к домену - это два интернет-сервера, которые получают файлы, обрабатывают их и отправляют третьим лицам, а также обслуживают несколько веб-сайтов, поэтому группа Active Directory Политика невозможна. Извините, что я не сделал это яснее.


56
2017-10-04 13:16


Источник


вы можете также взглянуть на эту статью из ms, которая также указывает на модификации GP: support.microsoft.com/kb/256345
К сожалению, я скучал по тебе ... Я был занят. Вы искали что-то вроде этого: serverfault.com/questions/15147/... - Evan Anderson
Я знаю, что это очень старый вопрос, но подумали ли вы об использовании параметров «восстановления» в диспетчере служб Windows? - Tim Long


Ответы:


Кажется, что это не похоже на GUI-способ, если вы не присоединяетесь к домену - по крайней мере, я не могу найти нигде, поэтому я немного поработал, и я нашел ответ, который работает для наше сито.

Я не понимал, что представляет собой строковое представление в статье базы знаний, но, делая немного копания, я обнаружил, что это синтаксис SDDL. Дальнейшее копание привело меня к эта статья Алуна Джонса в котором объясняется, как получить дескриптор безопасности для службы и что означает каждый бит. MS KB914392 имеет более подробную информацию.

Чтобы добавить к существующему дескриптору безопасности службы, используйте sc sdshow "Service Name" для получения существующего дескриптора. Если это обычная старая служба Windows Windows - как и в случае с нашими, дескриптор безопасности должен выглядеть примерно так:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Нам нужно было предоставить разрешения RP (для запуска службы), WP (для остановки службы), DT (для приостановки / продолжения обслуживания) и LO(для запроса текущего состояния службы). Это можно сделать, добавив нашу учетную запись службы в группу «Властные пользователи», но я хочу только предоставить индивидуальный доступ к учетной записи, в которой работает служба технического обслуживания.

С помощью runas чтобы открыть командную строку под учетной записью службы, я побежал whoami /all который дал мне SID учетной записи службы, а затем построил дополнительный SDDL ниже:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Затем это добавляется к D: раздел строки SDDL выше:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Затем это применяется к услуге с использованием sc sdset команда:

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Если все идет в соответствии с планом, служба может быть запущена, остановлена, приостановлена ​​и запрошена статусом пользователя, определенного SID выше.


49
2017-10-05 12:23



Для более простого способа сделать то же самое, вы должны посмотреть на использование SetACL.exe, Вот пример того, как использовать его для установки разрешений на службу: SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop" - Mason G. Zhwiti
Вы можете использовать Process Hacker (processhacker.sourceforge.net) для GUI для настройки всех служб. Он включает скрытые службы и позволяет настраивать дополнительные параметры службы, такие как двоичный путь, и разрешения. - ygoe
CoreAch gui работал для меня. Трудно поверить, что GUI уже не существует в окнах. Читая ответы, как это может быть так сложно? Большие неудачи от имени Microsoft. - MikeKulls


У меня была такая же проблема.
Вы можете использовать SubInACL.exe из набора ресурсов. Загрузите автономную утилиту здесь: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

использование msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo для извлечения файлов, если вы не хотите устанавливать .msi

  1. Откройте командную строку как администратор
  2. Перейдите в каталог, в который вы разместили .exe
  3. Бег subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = начать сервис
O = Остановка обслуживания
P = Пауза / продолжение службы

Полная ссылка: Как предоставить пользователям права на управление службами в Windows 2000 
или типа subinacl /help

Заметка: не пытайтесь subinacl /service SERVICE_NAME /perm так как это может вызвать у вас неприятности (извлеченный урок: P). Имя может вводить в заблуждение (perm! = Разрешение), поскольку оно удаляет все разрешения для всех пользователей (даже Admin!).


29
2017-08-26 22:17



Невозможно объединить счета SO и SF. - Chopper3
@ Chopper3 Спасибо за ваш ответ. На самом деле у меня есть 2 счета SO: один зарегистрирован и связан с этой учетной записью SF; другой - незарегистрированный Соотношение, которое у меня было до регистрации (использовалось одна и та же адрес электронной почты). Я надеялся, что их можно объединить, чтобы я мог отслеживать сообщение, которое я делал раньше. Как уже упоминалось Вот Я попытался отметить сообщение, но не смог сделать это на SO (1 репутация). Вот почему я отметил этот пост. Я также попытался отправить по электронной почте team@stackoverflow.com более двух недель назад, но не получил никакого ответа. Не могли бы вы направить меня в нужное место / лицо, пожалуйста? - patrx
Ознакомьтесь с деталями этой процедуры в MSDN: support.microsoft.com/?kbid=288129 - Marc Climent


Ты ищешь Конфигурация компьютера - Политики - Параметры Windows - Параметры безопасности - Системные службы

Там вы можете не только определить тип запуска службы, но и настроить ACL для каждой службы. По умолчанию интерфейс отображает только службы, которые установлены на компьютере, на котором запущен редактор GP.

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

  • экспортировать ключ реестра службы с другой машины
  • импорт на машину gpedit
  • применять политику
  • удалить импортированный ключ

4
2017-10-04 15:57



Я надеюсь, вы хотите сделать это через gpedit.msc, так как окно «Управление сервером» не отображает узел политики. Если это так, я не вижу элемент под узлом «Параметры безопасности», который ссылается на «Системные службы», как вы предлагаете выше, на сервере Server 2008 или Server 2003. - abitgone
О да. Я предположил, что вы планируете внести эти изменения в групповую политику. - Ryan Bolger
Действительно - это не серверы-члены. Есть ли способ нацеливаться на это с помощью локальной политики или какого-либо другого метода? - abitgone


Я использовал SubinAcl (как предложил patrx), чтобы иметь возможность запускать MySQL в качестве обычного пользователя домена (а не администратора), и он отлично работает! (однако команда должна выполняться как -local по крайней мере-Admin)

Команда:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Просто имейте в виду, что я ввел пользователя без префикса его с доменом ... иначе команда не работает при разборе команды!


2
2018-05-11 08:24