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

61

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

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

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

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

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

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


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


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

abitgone
источник
Вы также можете взглянуть на эту статью из MS, которая также указывает на модификации GP: support.microsoft.com/kb/256345
3
Извини, что скучал по тебе ... Я был занят. Вы искали что-то вроде этого: serverfault.com/questions/15147/…
Эван Андерсон
Я знаю, что это очень старый вопрос, но рассматривали ли вы возможность использования параметров восстановления в диспетчере служб Windows?
Тим Лонг

Ответы:

51

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

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

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

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который дал мне идентификатор безопасности учетной записи службы, а затем создал дополнительный 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 выше.

abitgone
источник
10
Для более простого способа сделать то же самое, вы должны взглянуть на использование SetACL.exe . Вот пример того, как использовать его для установки разрешений для службы:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Мейсон Дж. Жвити
2
Вы можете использовать Process Hacker ( processhacker.sourceforge.net ) для графического интерфейса пользователя для настройки всех служб. Он включает в себя скрытые сервисы и позволяет вам настроить дополнительные параметры сервиса, такие как двоичный путь - и разрешения.
ygoe
1
CoreTech GUI работал для меня. Трудно поверить, что GUI не существует в Windows уже. Читая ответы здесь, как это может быть так сложно? Большой провал от имени Microsoft.
MikeKulls
Я хотел бы добавить CCLCSWк разрешениям SDDL (в дополнение к RPWPDTLO), чтобы я также мог видеть службу в списке при запуске Get-Service (для чего сначала требуется изменить SDDL для службы диспетчера управления службами scmanager, чтобы можно было перечислять доступные службы) , Мне также нужно SWбыло иметь возможность перезапустить определенные службы.
Baodad
34

У меня просто была такая же проблема.
Вы можете использовать SubInACL.exe из Resource Kit. Загрузите отдельную утилиту здесь: 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! = Разрешение), так как оно удаляет все разрешения для всех пользователей (даже для администратора!).

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

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

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

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

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

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

Команда:

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

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

Махиеддин М. Ичир
источник