La respuesta anterior no parecía abordar las preguntas directamente, así que pensé en agregarla.
- Mi plan es que el servicio se ejecute como la cuenta predeterminada de "Servicio local". Voy a establecer explícitamente los privilegios de "Control total" para la cuenta de "Servicio local" en la carpeta en la que estoy leyendo / escribiendo. Creo que lo anterior es un buen plan.
Personalmente, no veo un gran problema con este plan. Con BUILTINs, la elección es entre:
- Se ejecuta como LOCALSYSTEM, por lo que si este servicio se ve comprometido, el atacante es el propietario de todo e inmediatamente.
- Se ejecuta como LOCALSERVICE, por lo que si este servicio, o cualquiera de los muchos otros servicios que se ejecutan bajo esta cuenta, se ve comprometido, el atacante tiene acceso a un directorio adicional. *
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
si Modify
realmente no es suficiente.
2. Mi pregunta es, para la carpeta en la que estoy leyendo y escribiendo, ¿necesito configurar un rol 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".
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.
3.Puedo estar malinterpretando lo que hace la cuenta del "Servicio de red".
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.