У нас есть несколько серверов Windows, на которых запущены различные службы, и иногда эти службы просто останавливаются. Для мониторинга этих служб я написал службу Windows, которая использует ServiceController для просмотра подозрительных служб и проверки их текущего состояния. Это отлично работает, когда я настраиваю новую службу для запуска под учетной записью, имеющей права локального администратора на рассматриваемых серверах, но это не идеально с точки зрения безопасности, поскольку предоставляет привилегии, отличные от видимости служб на этих машинах. В идеале я хотел бы создать учетную запись AD, которая может «видеть» и опрашивать службы на всех серверах (список серверов в области действия обязательно расширится в будущем), но не иметь других привилегий на этих серверах — возможно ли это вообще, и если да, то каковы настройки для такой учетной записи?
Прошу прощения, если это описание немного расплывчато, поэтому предположим, что написанная мной служба будет установлена на ServerA и должна иметь возможность использовать ServiceController для опроса службы "MSSQLSERVER" на ServerB, службы "MSSQL$OTHERINSTANCE" на ServerC и служб "SOMEOTHERSERVICE" и "RUNNINGOUTOFIDEAS" на ServerD. В дополнение к этому, список служб для опроса хранится в базе данных MS SQL Server на ServerZ, поэтому учетная запись должна иметь возможность подключаться к этой базе данных на этом сервере, поэтому для моих целей она должна быть стандартной учетной записью AD, видимой как пользователь в безопасности SQL Server.
Есть ли у кого-нибудь идеи? Спасибо заранее за любые предложения, и спасибо, что уделили время, чтобы прочитать это. Обратите внимание: фрейм-вызов типа "зачем ты вообще это делаешь? Тебе следует делатьчто«был бы столь же желателен, как и прямой ответ, поскольку я не уверен, что нет лучшего способа, и я всегда рад учиться.
решение1
Для удаленного мониторинга всех служб машины учетной записи потребуется следующий доступ к scmanager:
Эту строку необходимо будет внедрить в текущий ACL scmanager:
(A;;CCLCRPRC;;;<AccountSID>)
A: Allow
CC - SC_MANAGER_CONNECT - remotely connect
LC - SC_MANAGER_ENUMERATE_SERVICE - list all services
RP - SC_MANAGER_QUERY_LOCK_STATUS - interogate the status of each
RC - STANDARD_RIGHTS_READ - read the permissions of scmanager and services
ACL хранится по адресуHKLM:\SYSTEM\CurrentControlset\Control\ServiceGroupOrder\Security
Вам нужно будет определить текущий ACL в scmanager и включить указанную выше строку в соответствующее место — где-то посередине, в конце дискреционного ACL и перед системным ACL, например:
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
В зависимости от того, как вы его развертываете и какова ваша система для автоматизированного развертывания, вам может быть проще использовать команду sc.exe
. «Служба», которой вы управляете с помощью sc.exe, на самом деле не является службой, это менеджер управления службами (scmanager):
sc.exe sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"
Технически это избыточный доступ, поскольку он предоставляет учетной записи разрешение запрашивать статус и разрешения любой службы, а не только нескольких.