Tenemos un conjunto de servicios de Windows que se ejecutan en nuestros servidores que realizan un montón de tareas automatizadas independientemente el uno del otro, con la excepción de un servicio que se ocupa de los otros servicios.
En el caso de que uno de los servicios no responda o se bloquee, este servicio intentará reiniciar el servicio y, si se produce una excepción durante el intento, enviará un correo electrónico al equipo de soporte para que puedan reiniciar el servicio ellos mismos.
Después de investigar un poco, me he encontrado con algunas 'soluciones' que van desde la solución mencionada en KB907460 hasta dar a la cuenta bajo la cual el servicio ejecuta derechos de administrador.
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 conocimiento de Microsoft, pero definitivamente no quiero dar acceso de administrador a la cuenta en la que 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 un servicio, no puedo ver nada más que parezca que se refiere a servicios.
Estamos ejecutando esto en el Servidor 2003 y el Servidor 2008, por lo que cualquier idea o puntero sería gratamente recibido.
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 en los que necesito otorgar estos permisos no pertenecen a un dominio: son dos servidores con conexión 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. Lamento no haberlo aclarado.
fuente
Respuestas:
No parece haber una forma de hacer esto basada en la GUI a menos que esté unido a un dominio, al menos no uno que pueda encontrar en cualquier lugar, así que investigué un poco más y encontré una respuesta que funciona para Nuestra situación.
No entendí lo que significaba la representación de cadena en el artículo de la base de conocimiento, pero al investigar un poco, descubrí que se trata de la sintaxis SDDL. Más excavaciones me llevaron a este artículo de Alun Jones que explica cómo obtener el descriptor de seguridad para un servicio y qué 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 antiguo servicio de Windows .NET, como es el caso con el nuestro, el descriptor de seguridad debería verse así:Necesitábamos otorgar permisos
RP
(para iniciar el servicio),WP
(para detener el servicio),DT
(pausar / continuar el servicio) yLO
(para consultar el estado actual del servicio). Esto podría hacerse agregando nuestra cuenta de servicio al grupo de Usuarios avanzados, pero solo quiero otorgar acceso individual a la cuenta bajo la cual se ejecuta el servicio de mantenimiento.Utilizando
runas
para abrir un símbolo del sistema en la cuenta de servicio, ejecuté lowhoami /all
que me dio el SID de la cuenta de servicio, y luego construí el SDDL adicional a continuación:Esto luego se agrega a la sección D: de la cadena SDDL anterior:
Esto se aplica al servicio utilizando el
sc sdset
comando:Si todo va de acuerdo con el plan, el servicio se puede iniciar, detener, pausar y hacer que su estado sea consultado por el usuario definido por el SID anterior.
fuente
SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
CCLCSW
a los permisos SDDL (además de RPWPDTLO) para que también pueda ver el servicio enumerado cuando ejecuto Get-Service (que primero requiere modificar el SDDL para que el servicio scmanager service control manager pueda enumerar servicios accesibles) . También necesitabaSW
poder reiniciar ciertos servicios.Acabo de tener el mismo problema.
Puede usar SubInACL.exe del Kit de recursos. Descargue la utilidad independiente aquí: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510
Use
msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo
para extraer los archivos si no desea instalar el .msisubinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP
T = Iniciar servicio
O = Detener servicio
P = Pausar / continuar servicio
Referencia completa: Cómo otorgar a los usuarios derechos para administrar servicios en Windows 2000
o escribir
subinacl /help
Nota: no intentes,
subinacl /service SERVICE_NAME /perm
ya que podría meterte en problemas (lección aprendida: P). El nombre puede ser engañoso (perm! = Permiso), ya que elimina todos los permisos para todos los usuarios (¡incluso Admin!).fuente
Estás buscando Configuración del equipo - Políticas - Configuración de Windows - Configuración de seguridad - Servicios del sistema
Allí no solo puede definir el tipo de inicio del servicio, sino que también puede configurar las ACL de seguridad para cada servicio. Por defecto, la interfaz solo enumerará los servicios que están instalados en la máquina en la que está ejecutando GP Editor.
Para agregar servicios que solo existen en otra máquina:
fuente
gpedit.msc
, ya que la ventana "Administrar servidor" no muestra un nodo de políticas. Si es así, no puedo ver un punto por debajo del nodo Configuración de seguridad que hace referencia a "Servicios del sistema" como usted sugiere más arriba, a ambos Server 2008 o Server 2003.Usé SubinAcl (como lo sugiere patrx) para poder iniciar MySQL como un usuario de dominio regular (no administrador) y ¡funciona perfectamente! (sin embargo, el comando debe ejecutarse como -Al menos local- Admin)
El comando es:
Solo tenga en cuenta que ingresé al usuario sin prefijarlo con el dominio ... de lo contrario, el comando falla al analizar el comando.
fuente