У нас есть набор служб Windows, работающих на наших серверах, которые выполняют множество автоматизированных задач независимо друг от друга, за исключением одной службы, которая заботится о других службах.
В случае, если одна из служб не отвечает или зависает, эта служба пытается перезапустить службу и, если во время попытки возникает исключение, вместо этого отправляет электронное письмо в службу поддержки, чтобы они могли сами перезапустить службу.
Проведя небольшое исследование, я наткнулся на несколько «решений», которые варьируются от обходного пути, упомянутого в KB907460, до предоставления учетной записи, под которой служба работает с правами администратора.
Меня не устраивает ни один из этих методов - я не понимаю последствий первого метода, описанного в статье базы знаний Microsoft, но я определенно не хочу предоставлять администратору доступ к учетной записи, под которой работает служба. ,
Я быстро просмотрел Политику локальной безопасности и, кроме политики, которая определяет, может ли учетная запись входить в систему как служба, я не вижу ничего другого, похожего на сервисы.
Мы выполняем это на Server 2003 и Server 2008, поэтому любые идеи или указатели будут любезно приняты!
Пояснение: я не хочу предоставлять возможность запускать / останавливать / перезапускать ВСЕ сервисы для данного пользователя или группы - я хочу иметь возможность предоставлять разрешение на это только для определенных сервисов, для данного пользователя или группы.
Дальнейшее пояснение: серверы, на которые мне необходимо предоставить эти разрешения, не принадлежат домену - это два сервера, подключенных к Интернету, которые принимают файлы, обрабатывают их и отправляют их третьим сторонам, а также обслуживают несколько веб-сайтов, поэтому Групповая политика Active Directory невозможна. Извините, что я не прояснил это.
Ответы:
По-видимому, не существует способа сделать это на основе графического интерфейса, если вы не присоединены к домену - по крайней мере, я не смог найти его где-либо - поэтому я немного покопался и нашел ответ, который подходит для наша ситуация.
Я не понимал, что означает представление строки в статье базы знаний, но немного покопавшись, я понял, что это синтаксис SDDL. Дальнейшие исследования привели меня к этой статье Алуна Джонса, в которой объясняется, как получить дескриптор безопасности для службы и что означает каждый бит. MS KB914392 имеет больше деталей.
Чтобы добавить к существующему дескриптору безопасности службы, используйте
sc sdshow "Service Name"
для получения существующего дескриптора. Если это обычный старый .NET Windows Service - как в нашем случае - дескриптор безопасности должен выглядеть примерно так:Нам нужно было предоставить разрешения
RP
(для запуска службы),WP
(для остановки службы),DT
(для приостановки / продолжения службы) иLO
(для запроса текущего состояния службы). Это можно сделать, добавив нашу учетную запись службы в группу «Опытные пользователи», но я хочу предоставить индивидуальный доступ только к учетной записи, под которой работает служба поддержки.Используя
runas
команду, чтобы открыть командную строку под учетной записью службы, я запустил,whoami /all
который дал мне идентификатор безопасности учетной записи службы, а затем создал дополнительный SDDL ниже:Затем он добавляется в раздел D: строки SDDL выше:
Затем это применяется к службе с помощью
sc sdset
команды:Если все идет по плану, сервис может быть запущен, остановлен, поставлен на паузу, и его статус запрашивается пользователем, определенным SID выше.
источник
SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
CCLCSW
к разрешениям SDDL (в дополнение к RPWPDTLO), чтобы я также мог видеть службу в списке при запуске Get-Service (для чего сначала требуется изменить SDDL для службы диспетчера управления службами scmanager, чтобы можно было перечислять доступные службы) , Мне также нужноSW
было иметь возможность перезапустить определенные службы.У меня просто была такая же проблема.
Вы можете использовать SubInACL.exe из Resource Kit. Загрузите отдельную утилиту здесь: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510.
Используйте
msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo
для извлечения файлов, если вы не хотите устанавливать MSIsubinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP
T = запустить сервис
O = остановить сервис
P = приостановить / продолжить сервис
Полная ссылка: Как предоставить пользователям права на управление службами в Windows 2000
или типа
subinacl /help
Примечание: не пытайтесь, так
subinacl /service SERVICE_NAME /perm
как это может привести к неприятностям (извлеченный урок: P). Имя может вводить в заблуждение (perm! = Разрешение), так как оно удаляет все разрешения для всех пользователей (даже для администратора!).источник
Вы ищете Конфигурация компьютера - Политики - Параметры Windows - Параметры безопасности - Системные службы
Там вы можете не только определить тип запуска службы, но и настроить списки безопасности для каждой службы. По умолчанию интерфейс будет перечислять только те службы, которые установлены на компьютере, на котором запущен редактор GP.
Чтобы добавить службы, которые существуют только на другом компьютере:
источник
gpedit.msc
, поскольку в окне «Управление сервером» не отображается узел политик. Если это так, я не вижу элемента под узлом «Параметры безопасности», который ссылается на «Системные службы», как вы предлагаете выше, либо на Server 2008, либо на Server 2003.Я использовал SubinAcl (как предложено patrx), чтобы иметь возможность запускать MySQL как обычный пользователь домена (не администратор), и он отлично работает! (однако команда должна быть выполнена как -local как минимум-Admin)
Команда:
Просто обратите внимание, что я ввел пользователя без добавления префикса к домену ... в противном случае команда не выполняется при разборе!
источник