Tenemos algunos servidores de Windows que ejecutan varios servicios y tenemos una situación en la que a veces esos servicios simplemente se detienen. Para monitorear estos servicios, escribí un servicio de Windows que usa ServiceController para observar los servicios sospechosos y verificar su estado actual. Esto funciona bien cuando configuro el nuevo servicio para que se ejecute bajo una cuenta que tiene permisos de administrador local para los servidores en cuestión, pero eso no es ideal desde el punto de vista de la seguridad, ya que otorga privilegios distintos a los de ver los servicios en esas máquinas. Idealmente, me gustaría crear una cuenta AD que pueda "ver" e interrogar los servicios en todos los servidores (los servidores dentro del alcance son una lista que seguramente se ampliará en el futuro) pero no tener otros privilegios en esos servidores. ¿Es esto? Incluso es posible y, de ser así, ¿cuáles son las configuraciones para dicha cuenta?
Pido disculpas si esta descripción es un poco vaga, así que digamos que el servicio que he escrito se instalará en el ServidorA y debe poder usar ServiceController para interrogar al servicio "MSSQLSERVER" en el ServidorB, al servicio "MSSQL$OTHERINSTANCE" en el ServidorC. y servicios "SOMEOTHERSERVICE" y "RUNNINGOUTOFIDEAS" en ServerD. Además de esto, la lista de servicios para interrogar se guarda en una base de datos de MS SQL Server en ServerZ, por lo que la cuenta debería poder conectarse a esa base de datos en ese servidor, por lo que, para mis propósitos, tendría que estar una cuenta AD estándar, visible como usuario en la seguridad de SQL Server.
¿Alguien tiene alguna idea? Gracias de antemano por cualquier sugerencia y gracias por tomarse el tiempo de leer esto. Tenga en cuenta: un desafío de marco como "¿por qué estás haciendo esto? Deberías estar haciendoeso"Sería tan bienvenido como una respuesta directa, ya que no estoy convencido de que no haya una manera mejor y siempre estoy feliz de aprender.
Respuesta1
La cuenta necesitará el siguiente acceso en scmanager para monitorear de forma remota todos los servicios de una máquina:
Esta cadena que debería inyectarse en la ACL actual de 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
La ACL se almacena enHKLM:\SYSTEM\CurrentControlset\Control\ServiceGroupOrder\Security
Querrá determinar cuál es la ACL actual en scmanager e incluir la cadena anterior en la ubicación adecuada, que se encuentra en algún lugar en el medio, al final de la ACL discrecional y antes de la ACL del sistema, así:
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)
Dependiendo de cómo lo implemente y cuál sea su sistema para la implementación automatizada, puede que le resulte más fácil aprovechar el sc.exe
comando. El "servicio" que administra con sc.exe no es realmente un servicio, es el administrador de control de servicios (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 es un acceso técnicamente excesivo, ya que otorga a la cuenta el permiso para consultar el estado y los permisos de cualquier servicio, no solo de unos pocos.