He creado un servicio de ventana que monitorea archivos en un directorio específico en nuestro sistema operativo Windows. Cuando se detecta un archivo, el servicio realiza algunas E / S de archivo, lee los archivos, crea subdirectorios, etc. Este servicio también utiliza la conectividad de la base de datos para conectarse a otro servidor. Mi plan es que el servicio se ejecute como la cuenta predeterminada de "Servicio local". Como necesito permitir privilegios de escritura / lectura, lo que aparentemente no hace la cuenta de "Servicio local" de manera predeterminada, voy a establecer explícitamente los privilegios de "Control total" para la cuenta de "Servicio local" en la carpeta que estoy Lectura / escritura desde y hacia.
Creo que lo anterior es bueno. Mi pregunta es, para la carpeta en la que estoy leyendo y escribiendo, ¿necesito configurar una función de "Servicio de red" con acceso de control total? Me pregunto si mi servicio utiliza la conectividad de la base de datos a otro servidor, si necesitaré la configuración de la cuenta "Servicio de red".
Puedo estar malinterpretando lo que hace la cuenta de "Servicio de red".
fuente
LocalService
está comprometido, tendría acceso a cualquier cosa para la que se abrióLocalService
, mientras que normalmente no tendría acceso a nada. Este ha sido el procedimiento operativo estándar de seguridad informática desde los años 70 .LocalSystem
tiene más derechos y privilegios que las cuentas de administrador regulares.La respuesta anterior no parecía abordar las preguntas directamente, así que pensé en agregarla.
Personalmente, no veo un gran problema con este plan. Con BUILTINs, la elección es entre:
Podría decirse que es preferible agregar algunas ACL adicionales para poder usar la segunda opción. Sí, la opción más segura para un servicio de bajo privilegio pero altamente sensible a la seguridad sería ejecutarlo bajo una cuenta personalizada de servicio de bajo privilegio. Pero a menos que desee crear una nueva cuenta / administrar contraseñas para cada servicio que implemente, usar LocalService para tareas menores no sensibles no es tan terrible. Solo necesita tomar una decisión responsable basada en estas consideraciones, como lo que está en ese directorio o esa base de datos, el impacto si se violan, etc.
Aunque nuevamente, por principio de privilegio mínimo, solo debe establecer
Full Control
siModify
realmente no es suficiente.Si su base de datos requería inicio de sesión de Windows Integrated / SSPI, entonces sí, necesitaría usar NetworkService (o una cuenta de servicio de dominio) en todas partes, es decir, RunAs y permisos de directorio. Suponiendo que también otorgó a su nombre de computadora $ o acceso de cuenta de dominio a esta base de datos. Dudo que lo esté haciendo, así que si usa la autenticación normal de nombre de usuario / pwd, debería poder hacer todo con LocalService. Debe otorgar solo un derecho de cuenta en ese directorio, el que use en sus RunAs, no ambos.
LocalService / NetworkService son cuentas casi idénticas en la computadora local. La diferencia es principalmente lo que pueden hacer en la red. NS puede acceder a algunos recursos de red porque aparece en la red como una cuenta real (computadora). Pero LS aparecerá como ANÓNIMO, por lo que se le negará principalmente todo en la red.
Por cierto, deberías estar usando una Tarea Programada para esto, no un servicio.
* Desde Vista en adelante, debido al aislamiento del servicio , un proceso LocalService comprometido no puede atacar fácilmente a otro. Cada instancia / proceso de servicio LocalService / NetworkService obtiene su propio SID de sesión de inicio de sesión único (propietario único), a diferencia de Windows 2003. Pero no estoy seguro de que esto sea perfecto y mitigue por completo la vulnerabilidad DACL en archivos y recursos. Los SID restringidos y los tokens con restricción de escritura se mencionan en este contexto.
fuente
Las otras respuestas confirman lo que dice sobre el uso del Servicio local. Para resumir, el Servicio local es la cuenta recomendada para usar con su servicio, a menos que necesite las características adicionales de Active Directory SSPI del Servicio de red.
Sin embargo, para restringir el acceso de lectura / escritura a una carpeta específica, puede hacerlo mejor que simplemente dar acceso a la cuenta genérica del Servicio local. El problema, como han señalado otros, es que esto también daría acceso de lectura / escritura a todos los demás servicios que se ejecutan como Servicio local y, si todos los servicios lo hicieran, gradualmente el Servicio local recibiría acceso a recursos cada vez más importantes.
La solución es en cambio ACL su carpeta usando su SID de servicio específico. Solo su propio proceso de servicio tiene su SID de servicio asociado, por lo que esto bloquea su recurso aún más. Puede ver el servicio SID usando
sc showsid <service name>
. El SID del servicio se genera a partir del nombre del servicio, por lo que será el mismo en todas las máquinas.Para habilitar el uso del servicio SID por su servicio, use
ChangeServiceConfig2
con laSERVICE_SID_INFO
estructura para establecerSERVICE_SID_TYPE_UNRESTRICTED
. También puede configurarSERVICE_SID_TYPE_RESTRICTED
para obtener un SID aún más restringido que solo permita el acceso de escritura a los recursos permitidos explícitamente con su SID de servicio.Este enlace tiene las descripciones de alto nivel de los SID de servicio y los SID de servicio restringido: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)
fuente