windows – ¿Cómo otorgo permisos de inicio / detención / reinicio en un servicio a un usuario o grupo arbitrario en un servidor que no pertenece al dominio?

Pregunta:

Tenemos un conjunto de servicios de Windows que se ejecutan en nuestros servidores y que realizan un montón de tareas automatizadas de forma independiente entre sí, con la excepción de un servicio que se ocupa de los otros servicios.

En caso de que uno de los servicios no responda o se cuelgue, este servicio intenta reiniciar el servicio y, si se produce una excepción durante el intento, envía un correo electrónico al equipo de soporte para que puedan reiniciar el servicio ellos mismos.

Después de investigar un poco, me encontré con algunas 'soluciones' que van desde la solución alternativa mencionada en KB907460 hasta otorgar derechos de administrador a la cuenta bajo la cual se ejecuta el servicio.

No me siento cómodo con ninguno de estos métodos: no entiendo las consecuencias del primer método como se describe en el artículo de la base de conocimientos de Microsoft, pero definitivamente no quiero otorgar acceso de administrador a la cuenta bajo la cual se ejecuta el servicio. .

He echado un vistazo rápido a la Política de seguridad local y, aparte de la política que define si una cuenta puede iniciar sesión como servicio, no puedo ver nada más que parezca que se refiere a servicios.

Estamos ejecutando esto en Server 2003 y Server 2008, por lo que cualquier idea o sugerencia será bien recibida.


Aclaración: no quiero otorgar la capacidad de iniciar / detener / reiniciar TODOS los servicios a un usuario o grupo determinado; quiero poder otorgar el permiso para hacerlo solo en servicios específicos , a un usuario o grupo determinado.


Aclaración adicional: Los servidores a los que necesito otorgar estos permisos no pertenecen a un dominio; son dos servidores conectados a Internet que reciben archivos, los procesan y los envían a terceros, además de servir a un par de sitios web, por lo que La directiva de grupo de Active Directory no es posible. Siento no haber dejado esto más claro.

Respuesta:

No parece haber una forma basada en GUI de hacer esto a menos que esté unido a un dominio, al menos no uno que pueda encontrar en ningún lado, así que investigué un poco más y encontré una respuesta que funciona para Nuestra situación.

No entendí qué significaba la representación de cadena en el artículo de la base de conocimientos, pero investigar un poco me llevó a descubrir que es sintaxis SDDL. Investigar más me llevó a este artículo de Alun Jones que explica cómo obtener el descriptor de seguridad para un servicio y lo que significa cada bit. MS KB914392 tiene más detalles.

Para agregar al descriptor de seguridad existente del servicio, use sc sdshow "Service Name" para obtener el descriptor existente. Si se trata de un servicio de Windows .NET antiguo, como es el caso del nuestro, el descriptor de seguridad debería verse así:

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)

Necesitábamos otorgar permisos RP (para iniciar el servicio), WP (para detener el servicio), DT (para pausar / continuar el servicio) y LO (para consultar el estado actual del servicio). Esto podría hacerse agregando nuestra cuenta de servicio al grupo Usuarios avanzados, pero solo quiero otorgar acceso individual a la cuenta bajo la cual se ejecuta el servicio de mantenimiento.

Usando runas para abrir un símbolo del sistema en la cuenta de servicio, ejecuté whoami /all que me dio el SID de la cuenta de servicio, y luego construí el SDDL adicional a continuación:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Esto luego se agrega a la sección D: de la cadena SDDL anterior:

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)

Esto luego se aplica al servicio usando el comando sc sdset (antes del texto S: 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)

Si todo va de acuerdo con el plan, el servicio puede iniciarse, detenerse, pausarse y el usuario definido por el SID anterior puede consultar su estado.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım