¿La diferencia entre la cuenta 'Sistema local' y la cuenta 'Servicio de red'?

386

He escrito un servicio de Windows que genera un proceso separado. Este proceso crea un objeto COM. Si el servicio se ejecuta bajo la cuenta 'Sistema local', todo funciona bien, pero si el servicio se ejecuta bajo la cuenta 'Servicio de red', el proceso externo se inicia pero no puede crear el objeto COM. El error devuelto por la creación del objeto COM no es un error COM estándar (creo que es específico del objeto COM que se está creando).

Entonces, ¿cómo determino cómo difieren las dos cuentas, 'Sistema local' y 'Servicio de red'? Estas cuentas integradas parecen muy misteriosas y nadie parece saber mucho sobre ellas.

jmatthias
fuente

Respuestas:

701

Como hay tanta confusión sobre la funcionalidad de las cuentas de servicio estándar, intentaré agotar rápidamente.

Primero las cuentas reales:

  • Cuenta de servicio local (preferida)

    Una cuenta de servicio limitada que es muy similar al Servicio de red y está destinada a ejecutar servicios estándar con los menos privilegios. Sin embargo, a diferencia del Servicio de red, accede a la red como usuario anónimo .

    • Nombre: NT AUTHORITY\LocalService
    • la cuenta no tiene contraseña (se ignora cualquier información de contraseña que proporcione)
    • HKCU representa la cuenta de usuario LocalService
    • tiene privilegios mínimos en la computadora local
    • presenta credenciales anónimas en la red
    • SID : S-1-5-19
    • tiene su propio perfil bajo la clave de registro HKEY_USERS ( HKEY_USERS\S-1-5-19)

     

  • Cuenta de servicio de red

    Cuenta de servicio limitada destinada a ejecutar servicios privilegiados estándar. Esta cuenta es mucho más limitada que el sistema local (o incluso el administrador), pero aún tiene derecho a acceder a la red como máquina (consulte la advertencia anterior).

    • NT AUTHORITY\NetworkService
    • la cuenta no tiene contraseña (se ignora cualquier información de contraseña que proporcione)
    • HKCU representa la cuenta de usuario de NetworkService
    • tiene privilegios mínimos en la computadora local
    • presenta las credenciales de la computadora (p MANGO$. ej. ) a servidores remotos
    • SID : S-1-5-20
    • tiene su propio perfil bajo la clave de registro HKEY_USERS ( HKEY_USERS\S-1-5-20)
    • Si intenta programar una tarea con ella, ingrese NETWORK SERVICEen el cuadro de diálogo Seleccionar usuario o grupo

     

  • Cuenta LocalSystem (¡peligroso, no lo use!)

    Cuenta completamente confiable, más que la cuenta de administrador. No hay nada en un solo cuadro que esta cuenta no pueda hacer, y tiene derecho a acceder a la red como máquina (esto requiere Active Directory y otorgarle permisos a la cuenta de la máquina para algo)

    • Nombre: .\LocalSystem(también puede usar LocalSystemo ComputerName\LocalSystem)
    • la cuenta no tiene contraseña (se ignora cualquier información de contraseña que proporcione)
    • SID : S-1-5-18
    • no tiene ningún perfil propio ( HKCUrepresenta el usuario predeterminado )
    • tiene amplios privilegios en la computadora local
    • presenta las credenciales de la computadora (p MANGO$. ej. ) a servidores remotos

     

Arriba, cuando se habla de acceder a la red, esto se refiere únicamente a SPNEGO (Negotiate), NTLM y Kerberos y no a ningún otro mecanismo de autenticación. Por ejemplo, el procesamiento que se está ejecutando LocalServiceaún puede acceder a Internet.

El problema general con la ejecución de una cuenta estándar fuera de la caja es que si modifica cualquiera de los permisos predeterminados, está ampliando el conjunto de cosas que todo lo que se ejecuta como esa cuenta puede hacer. Entonces, si le otorga DBO a una base de datos, su servicio que se ejecuta como Servicio local o Servicio de red no solo puede acceder a esa base de datos, sino que todo lo demás que se ejecuta como esas cuentas también puede hacerlo. Si cada desarrollador hace esto, la computadora tendrá una cuenta de servicio que tiene permisos para hacer prácticamente cualquier cosa (más específicamente el superconjunto de todos los diferentes privilegios adicionales otorgados a esa cuenta).

Siempre es preferible desde una perspectiva de seguridad ejecutar como su propia cuenta de servicio que tiene exactamente los permisos que necesita para hacer lo que hace su servicio y nada más. Sin embargo, el costo de este enfoque es configurar su cuenta de servicio y administrar la contraseña. Es un acto de equilibrio que cada aplicación necesita administrar.

En su caso específico, el problema que probablemente esté viendo es que la activación de DCOM o COM + está limitada a un conjunto de cuentas dado. En Windows XP SP2, Windows Server 2003 y superiores, el permiso de activación se restringió significativamente. Debe usar el componente MMC de Servicios de componentes para examinar su objeto COM específico y ver los permisos de activación. Si no está accediendo a nada en la red como la cuenta de la máquina, debería considerar seriamente usar el Servicio local (no el Sistema local, que es básicamente el sistema operativo).


En Windows Server 2003 no puede ejecutar una tarea programada como

  • NT_AUTHORITY\LocalService (también conocido como la cuenta de servicio local) o
  • NT AUTHORITY\NetworkService (también conocido como la cuenta del Servicio de red).

Esa capacidad solo se agregó con Task Scheduler 2.0 , que solo existe en Windows Vista / Windows Server 2008 y versiones posteriores.

Un servicio que se ejecuta como NetworkServicepresenta las credenciales de la máquina en la red. Esto significa que si se llamó a su computadora mango, se presentaría como la cuenta de la máquina MANGO$ :

ingrese la descripción de la imagen aquí

Peter Oehlert
fuente
77
Creo que las cuentas de servicio administrado eliminan parte del dolor de configurar la cuenta y administrar la contraseña (o más bien pasarla a un administrador o delegado de dominio)
Carl G
1
Hola gracias por la explicacion Sin embargo, tengo una pregunta: el uso de la cuenta del sistema local / servicio de red es posible agregar / eliminar entradas a los contenedores en el directorio activo (siempre que el contenedor en el directorio activo haya otorgado permisos completos a la computadora en la que se ejecutan estos servicios de Windows). Tenga en cuenta que todo funciona cuando ejecuté el servicio como uno de los usuarios del dominio, pero no como un sistema local / servicio de red (para más detalles stackoverflow.com/questions/20943436/… ) Saludos
Dreamer
1
Sí, debería. Contestaré su pregunta directamente ya que esta pregunta es más abstracta y esa es una implementación específica.
Peter Oehlert
77
Tenga en cuenta que el usuario "anónimo" no es solo miembro de "usuarios autenticados", no es miembro de "todos" en Windows. En las redes de Windows, 'anónimo' solo tiene acceso a los recursos que se han otorgado explícitamente a 'anónimo'; de forma predeterminada, nada.
David
1
@HakamFostok No tengo mucha referencia. Si no recuerdo mal, Dan Brown lo cubrió en su libro Programming Windows Security. Hay mucho en la ayuda de Windows y en los documentos de MSDN, pero no tengo una referencia específica. El (los) libro (s) de Jeff Richter sobre ventanas de programación, así como Inside Windows (3rd o 4th Ed) de Soloman & Russinovich también tiene algunos.
Peter Oehlert