Conta AD para monitorar serviços em servidores

Conta AD para monitorar serviços em servidores

Temos alguns servidores Windows que executam vários serviços e temos uma situação em que às vezes esses serviços simplesmente param. Para monitorar esses serviços, escrevi um serviço do Windows que usa o ServiceController para examinar os serviços suspeitos e verificar seu status atual. Isso funciona bem quando configuro o novo serviço para ser executado em uma conta que tenha permissões de administrador local para os servidores em questão, mas isso não é ideal do ponto de vista da segurança, pois concede outros privilégios além da visão dos serviços nessas máquinas. Idealmente, eu gostaria de ter uma conta AD criada que pudesse "ver" e interrogar os serviços em todos os servidores (os servidores no escopo são uma lista que será ampliada no futuro), mas não tenha outros privilégios nesses servidores - é isso é até possível e, em caso afirmativo, quais são as configurações dessa conta?

Peço desculpas se esta descrição é um pouco vaga, então digamos que o serviço que escrevi será instalado no ServerA e precisa ser capaz de usar o ServiceController para interrogar o serviço "MSSQLSERVER" no ServerB, serviço "MSSQL$OTHERINSTANCE" no ServerC e serviços "SOMEOTHERSERVICE" e "RUNNINGOUTOFIDEAS" no ServerD. Além disso, a lista de serviços a serem interrogados é mantida em um banco de dados MS SQL Server no ServerZ, portanto, a conta precisaria ser capaz de se conectar a esse banco de dados naquele servidor, portanto, para meus propósitos, seria necessário ser uma conta AD padrão, visível como usuário na segurança do SQL Server.

Alguém tem alguma idéia? Agradecemos antecipadamente por qualquer sugestão e obrigado por reservar um tempo para ler isto. Observação: um desafio de quadro como "por que você está fazendo isso? Você deveria estar fazendoque"seria tão bem-vindo como uma resposta direta, pois não estou convencido de que não exista uma maneira melhor e estou sempre feliz em aprender.

Responder1

A conta precisará do seguinte acesso no scmanager para monitorar remotamente todos os serviços de uma máquina:

Esta String que precisaria ser injetada na ACL do scmanager atual: (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

A ACL é armazenada emHKLM:\SYSTEM\CurrentControlset\Control\ServiceGroupOrder\Security

Você desejará determinar qual é a ACL atual no scmanager e incluir a string acima no local apropriado - que está em algum lugar no meio, no final da ACL discricionária e antes da ACL do sistema, assim:

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)

Dependendo de como você o implanta e de qual é o seu sistema para implantação automatizada, pode ser mais fácil aproveitar o sc.execomando. O "serviço" que você gerencia com sc.exe não é realmente um serviço, é o gerenciador de controle de serviço (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)"


Este é um acesso tecnicamente excessivo, pois concede à conta permissão para consultar o status e as permissões de qualquer serviço, não apenas de alguns.

informação relacionada