La Beta de RunAsAdmin Explorer Shim V2 beta10 se ha liberado!
Una herramienta para usar cuentas sin privilegios y aplicarlos si se necesitan, o al revés, usar cuentas con privilegios y lanzar programas con cuentas sin ellos.
La Beta de RunAsAdmin Explorer Shim V2 beta10 se ha liberado!
Una herramienta para usar cuentas sin privilegios y aplicarlos si se necesitan, o al revés, usar cuentas con privilegios y lanzar programas con cuentas sin ellos.
Monitorizar la fiabilidad de los servicios
Monitorizar la fiabilidad de los servicios nos ayudará en su seguimiento y en la medición del tiempo medio existente entre fallos. Este tiempo medio nos indica el tiempo de espera desde que falla un servicio hasta que vuelve a estar operativo. Conociéndolo, tal vez seamos capaces de impedir que ocurran problemas antes de producirse. Por ejemplo, si sabemos que un servicio falla cada 10 días, más que esperar a que falle (momento que podría ser inconveniente para los usuarios) podemos programarlo para que se detenga y reinicie periódicamente; además podemos seguirlo para ver si la solución nos sirve (a veces hay que echar mano de lo que sea).
Este seguimiento también nos puede indicar el tiempo que tarda un servicio en recuperarse del fallo.
Los métodos para seguir la fiabilidad:
Si lo hacemos mediante script podemos usar: Shell script (EventQuery.vbs (es), EventTriggers.exe(es), WMI (Colecciones Win32_Service y Win32_NTLogEvent).
Monitorizar los cambios en el estado de un servicio con una suscripción de suceso temporal
1: 'Este script sirve para comprobar cambios de estado de los servicios
2: ' usando una suscripción temporal a event log y volcado en un archivo de texto
3:
4: '(c) Juansa 29-11-2008
5:
6:
7:
8: Const ForReading = 1, ForWriting = 2
9: Dim TabStop, NewLine
10: TabStop = Chr(9)
11: NewLine = Chr(10)
12: Set objFSO = CreateObject("Scripting.FileSystemObject")
13: Set objFile = objFSO.OpenTextFile("C:scriptsCambio_Servicios.txt", ForWriting, True)
14:
15:
16: StrComputer = "."
17: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\" & strComputer & "rootcimv2")
18: Set objwmiEventSource = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceModificationEvent " & "WITHIN 3 WHERE TargetInstance ISA 'Win32_Service'")
19:
20: Do
21: Set objService = objwmiEventSource.NextEvent
22: If objService.TargetInstance.State <> objService.PreviousInstance.State Then
23: objFile.WriteLine Date & TabStop & objService.TargetInstance.DisplayName & " está " & objService.TargetInstance.State & ". Anteriormente estaba " & objService.PreviousInstance.State & "."
24: end if
25: Loop
26:
Este script se ejecuta de continuo, para detenerlo hay que abrir el Administrador de Tareas y matar el proceso wscript.exe que se crea al ejecutarlo.
Se ejecuta y no escribe nada en el archivo, pero yo hago una prueba manual: abro services.msc desde inicio->ejecutar y detengo el servicio (el que sea) Background Intelligent Transfer Service(BITS) y luego lo vuelvo a iniciar. Al echar un vistazo al archivo donde le he dicho que me guarde los cambios, veo:
¿Qué hace el script?
Su cuerpo, ya conocemos la creación y preparación del archivo donde guardará la info, Creamos la variable para el equipo local (StrComputer), Usamos GetObject y conectamos con el espacio de nombres rootcimv2 con nivel impersonate.
Usamos el método ExecNotificationQuery para registrar la notificación de cada vez que una instancia se modifica. Como sólo queremos los cambios en los servicios, usamos una cláusula WHERE para limitar la monitorización de los datos que nos devuelve la clase Win32_Service.
Creamos un bucle que ejecutará el script indefinidamente (podemos detenerlo como he indicado arriba, o con Taskkill.exe, Cerrando la sesión también se detiene).
Usamos el método NextEvent para recuperar el suceso cuando ocurre.
Así, cada vez que un servicio se modifica de alguna forma, el script comprueba el estado actual con el estado anterior, si no ha cambiado sigue a la espera, si es diferente lo graba en el archivo Cambios_servicios.txt.
Muchas de las operaciones que hace un equipo (especialmente un servidor) es ejecutar servicios. Esto hace que debamos ser cuidadosos con monitorizar los servicios que se ejecutan en los equipos de nuestra red. Una de las maneras más prácticas de monitorización es el uso de scripts.
Muchos de los servicios (DNS, DHCP,…) son críticos y un error en un único servidor puede tener un impacto en cientos, incluso miles, de usuarios, impidiéndoles iniciar sesión o acceder a los recursos de la red.
Como normas más generales de monitorización:
La definición exacta de disponibilidad depende de lo que se espera de cada servicio. Si un recurso debe estar disponible todos los días de 22:00 a 06:00 horas y éste fallase un domingo a las 8:00 de la mañana, no se consideraría fallo de disponibilidad.
La fiabilidad se calcula mediante la división del tiempo que el servicio está en funcionamiento por el número total de días en un año. Por ejemplo,un servicio que ha sufrido paradas en 6 días durante un año tendría una fiabilidad de 98,3% ((359 días disponible)/365 días en un año)
Cuando monitorizamos la disponibilidad de un servicio, comprobamos sólo que el servicio se esté ejecutando. Si necesitamos saber si el servicio se ejecuta con máxima eficiencia, necesitamos usar otro tipo de monitorización (el rendimiento). Aunque relativamente es simple, la monitorización de disponibilidad es muy importante; otras cuestiones, como si el servicio se comporta en el nivel esperado, no tienen sentido si no se está ejecutando.
Esta monitorización comprende normalmente una prueba que nos devolverá el estado del servicio. Guardando el resultado de cada prueba en una BD podemos calcular la disponibilidad de un servicio. Si realizamos 100 pruebas y el servicio responde 97 veces, someramente, está disponible un 97%.
La disponibilidad frecuentemente se expresa con la media de tiempo que durante un año el servicio no ha estado disponible.
Para incrementar la disponibilidad de un servicio podemos intentar:
Podemos usar scripts de Shell (sc.exe y net.exe), WSH, WMI (Scriptomatic utility) y ADSI (ADSI Scriptomatic).
Informar sobre la disponibilidad de los servicios puede hacerse mediante:
Informar del estado de todos los servicios.
1: 'Este script sirve para comprobar el estado de todos los servicios
2: 'en un archivo de texto
3:
4: '(c) Juansa 28-11-2008
5:
6: Const ForReading = 1, ForWriting = 2
7: Dim TabStop, NewLine
8: TabStop = Chr(9)
9: NewLine = Chr(10)
10: Set objFSO = CreateObject("Scripting.FileSystemObject")
11: Set objFile = objFSO.OpenTextFile("C:scriptsEstado_Servicios.txt", ForWriting, True)
12:
13: StrComputer = "."
14: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\" & strComputer & "rootcimv2")
15: Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service")
16: For each objService in colServices
17: 'escribimos el nombre y el estado del servicio
18: objFile.WriteLine Date & TabStop & objService.DisplayName
19: objFile.WriteLine objService.State
20:
21: Next
22:
23: Wscript.Echo "FINALIZADO"
El resultado:
* Podemos incluirlo en una tarea programada y realizar la comprobación diaria o a horas determinadas. Se puede incluir además de la fecha, la hora en la que se realiza la comprobación en el script.
Informar sólo de aquéllos servicios que no están en ejecución
1: 'Este script sirve para listar los servicios en estado detenido en un archivo de texto
2:
3: '(c) Juansa 28-11-2008
4:
5: Const ForReading = 1, ForWriting = 2
6: Dim TabStop, NewLine
7: TabStop = Chr(9)
8: NewLine = Chr(10)
9: Set objFSO = CreateObject("Scripting.FileSystemObject")
10: Set objFile = objFSO.OpenTextFile("C:scriptsServicios_detenidos.txt", ForWriting, True)
11:
12: StrComputer = "."
13: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\" & strComputer & "rootcimv2")
14: Set colserviciosdetenidos = objWMIService.ExecQuery("SELECT DisplayName, State FROM Win32_Service WHERE State <> 'Running'")
15: 'escribimos el título en el archivo
16: objFile.WriteLine "LISTADO DE SERVICIOS QUE NO SE ESTÁN EJECUTANDO EN FECHA: " & Date
17: objFile.WriteLine
18: For each objService in colserviciosdetenidos
19: 'escribimos el nombre y el estado del servicio
20: objFile.WriteLine objService.DisplayName & ": " & objService.State
21:
22: Next
23:
24: Wscript.Echo "FINALIZADO"
* El cambio es evidente, hemos modificado la consulta (SELECT) para que sólo devuelva los servicios que no tengan un estado Running.
Crear una tarea en Windows para que se ejecute el script diariamente
Para facilitar la implantación y administración de configuración de seguridad en la red de la organización, Windows Server 2003 incluye el complemento de Plantillas de seguridad. Este complemento permite a los administradores definir plantillas estándar y aplicarlas uniformemente a múltiple equipos o usuarios.
Una plantilla de seguridad es una representación física de una configuración de seguridad, un archivo en el que un grupo de valores de seguridad pueden almacenarse. Windows Server 2003 incluye un conjunto de plantillas estándar, cada una apropiada para la función de un equipo. El rango de plantillas va desde una configuración de baja seguridad para clientes de dominio hasta alta seguridad para controladores de dominio. Podemos usar estas plantillas como están o modificarlas, o usarlas como base de plantillas para crearlas nosotros.
La herramienta de análisis y configuración de seguridad es el compañero del complemento de Plantillas de Seguridad. Se usa para aplicar las restricciones definidas en una plantilla a los sistemas reales. También para analizar la seguridad de un sistema y compararlo con la configuración de equipos que han sido desplegados para asegurarnos que cumple con los estándares de la compañía.
Las plantillas predefinidas en Windows Server 2003 (Fuente KnowledgeBase de Microsoft):
Las plantillas Highly Secure especifican restricciones adicionales no definidas por las plantillas Secure, como niveles de cifrado y la firma necesarios para la autenticación y el intercambio de datos a través de canales seguros, y entre los clientes y servidores de Bloque de mensajes del servidor (SMB).
Internet Explorer Security ACLs
Las plantillas Secure definen configuraciones de seguridad mejorada que es menos probable que afecten a la compatibilidad de programas. Por ejemplo, las plantillas Secure definen configuraciones más seguras de contraseñas, bloqueo y auditoría. Además, las plantillas limitan el uso de LAN Manager y los protocolos de autenticación NTLM configurando los clientes para enviar únicamente respuestas de NTLMv2 y configurando los servidores para que rechacen las respuestas de LAN Manager.
Hay dos plantillas Secure predefinidas en Windows Server 2003: Securews.inf para las estaciones de trabajo y Securedc.inf para los controladores de dominio. Para obtener información adicional acerca de cómo utilizar estas plantillas y otras plantillas de seguridad, busque «plantillas de seguridad predefinidas» en el Centro de ayuda y soporte técnico.
La plantilla Setup security.inf se crea durante la instalación y es específica de cada equipo. Varía de un equipo a otro, dependiendo de si se trata de una instalación limpia o de una actualización. Setup security.inf representa la configuración de seguridad predeterminada que se aplica durante la instalación del sistema operativo, incluyendo los permisos de archivo para la raíz de la unidad del sistema. Puede utilizarse en servidores y en equipos cliente; no puede aplicarse a controladores de dominio. Puede aplicar partes de esta plantilla para la recuperación tras desastres.
No aplique Setup security.inf utilizando Directiva de grupo. Si lo hace, puede disminuir el rendimiento.
En el procedimiento descrito para añadir el complemento de Configuración y análisis de seguridad, nos sirve para añadir también las plantillas de seguridad, en el paso 3 buscamos el complemento y lo agregamos de igual modo que lo hemos hecho con Configuración y análisis de seguridad. Así en la misma consola podemos tener ambos complementos.
Crear y definir una plantilla de seguridad nueva
1. En la consola, extendemos Plantillas de seguridad.
2. clic derecho en %raíz_del_sistema%SecurityTemplates y después, clic en Nueva plantilla.
3. En el cuadro Nombre, escribimos uno para la plantilla nueva.
clic en Aceptar.
La plantilla de seguridad aparece en la lista de plantillas de seguridad. Ver que aún no se define la configuración de seguridad para esta plantilla. Cuando extendemos la plantilla se extienden además cada componente de la misma y seguidamente, doble clic en cada valor que muestre el estado No Definido en la columna Configuración del equipo.
4. Para directivas de Directivas de cuenta, Directivas locales o registro de sucesos:
a. Extendemos el componente que contiene la configuración de seguridad que queremos configurar.
b. A la derecha, doble clic en la configuración de seguridad a configurar.
c. clic para seleccionar la casilla de verificación Definir esta configuración de directiva en la plantilla, especificamos la opción o configuración que creeemos que es la apropiada en la configuración de seguridad y después, clic en Aceptar.
5. Para definir una directiva Grupos restringidos:
. clic derecho en Grupos restringidos y seguidamente, clic en Agregar grupo.
a. clic en Examinar.
b. En el cuadro de diálogo Seleccionar grupos, escribimos el nombre del grupo al que queremos restringir el acceso, clic en Aceptar y después, clic en Aceptar.
c. En el cuadro de diálogo Propiedades Nombre de Grupo bajo miembros de este grupo, clic en Agregar miembros para agregar los miembros que queramos al grupo.
Para agregar este grupo como miembro de otro grupo, en Este grupo es miembro de, clic en Agregar grupos.
d. clic en Aceptar.
6. Para definir directiva de Servicios del sistema:
. Extendemos Servicios del sistema.
a. A la derecha, doble clic en el servicio a configurar.
b. Especificamos las opciones que queremos y seguidamente, clic en Aceptar.
7. Para definir seguridad para claves de Registro:
. clic derecho en Registro y después, clic en Agregar clave.
a. En el cuadro de diálogo Seleccionar clave de registro, clic en la clave de Registro a la que queremos definir seguridad y después, clic en Aceptar.
b. En el cuadro de diálogo Seguridad de base de datos para Clave Seleccionada especificamos los permisos para la clave de Registro y después, clic en Aceptar.
c. En el cuadro de diálogo Agregar objeto, especificamos cómo queremos los permisos para esta clave heredada, clic en Aceptar y después, clic en Aceptar.
8. Para definir seguridad para archivos o carpetas:
. clic derecho Sistema de archivos y después, clic en Agregar archivo.
a. En el cuadro de diálogo Agregar archivo o carpeta, clic en una carpeta o en un archivo al que queremos agregar seguridad y después, clic en Aceptar.
b. En el cuadro de diálogo Seguridad de base de datos para Nombre archivo o Nombre carpeta especificamos los permisos que queremos, clic en Aceptar y después, clic en Aceptar.
Copiar configuración de seguridad de una plantilla predefinida en otra plantilla
1. Extendemos una plantilla predefinida que contenga las configuraciones que queremos copiar, clic derecho en el componente a copiar y después, clic en Copiar.
2. Extendemos la plantilla personalizada, clic derecho en el componente apropiado y luego, clic en Pegar.
Cree una plantilla nueva de seguridad basada en una plantilla predefinida
1. clic derecho en la plantilla a copiar y seguidamente, clic en Guardar como.
2. En Guardar como, escribimos un nombre y después, clic en Guardar.
La plantilla de seguridad nueva aparece en la lista de plantilla de seguridad. Configurar la plantilla con las configuraciones deseadas.
Cada servicio dispone de permisos especiales que podemos asignar o denegar a cada usuario o grupo. Podemos establecer permisos para servicios individuales con sc.exe, directivas, o plantillas de seguridad. Podemos establecer permisos para grupos mediante el complemento de consola Usuarios y Equipos de Active Directory.
Los servicios deben iniciar sesión con una cuenta para acceder a recursos y objetos. Algunos servicios están configurados de forma predeterminada con la cuenta LocalSystem, que es una cuenta privilegiada con acceso completo al sistema. Si un servicio inicia sesión con esta cuenta en un controlador de dominio, el servicio tiene acceso al dominio entero. Otros servicios lo están con las cuentas LocalService o NetworkService, que son cuentas especiales integradas similares a una cuenta de usuario autenticado. Estas cuentas tienen el mismo nivel de acceso a los recursos y objetos que los miembros de grupos de usuarios. Este acceso limitado salvaguarda el sistema si se ven comprometidos servicios o procesos individuales.
Lista de permisos de un servicio
Implementando seguridad en los servicios del sistema en Windows Server 2003 nos permite controlar quien puede administrarlos en un equipo cliente, servidor miembro o controlador de dominio. Actualmente, el único camino para cambiar un servicio del sistema es mediante la configuración de directivas. Si implementamos directivas en la Default Domain Policy, la directiva se aplica a todos los equipos del dominio, si la implementamos en la Default Domain Controllers Policy, se aplica sólo a los servidores en la OU de controladores de dominio. Podemos crear OUs que contengan equipos a los que aplicarles la directiva.
El procedimiento paso a paso podría resumirse en:
La configuración de directivas locales no proporcionan la capacidad de configurar servicios. Si queremos configurar equipos aleatorios y restringir a un usuario detener o iniciar un servicio, usaremos el complemento plantillas de seguridad para definir una. Aplicaremos la plantilla al equipo mediante la herramienta Security Configuration and Analisys o la de línea de comandos Secedit.exe.
NOTA Si el usuario no es miembro del dominio, no podremos configurar servicios con directiva de grupo ya que no podemos definir la configuración de un servicio a menos qué seamos capaces de seleccionar el usuario desde el editor ACL. Con una cuenta específica de un equipo no es práctico crear una directiva de grupo y aplicarla a otros equipos que no reconocen la cuenta.
Un usuario del dominio puede usar la infraestructura de directivas de grupo para configurar múltiples equipos. Nosotros definimos la configuración de un servicio de la misma forma que con las plantillas de seguridad, excepto que usamos el editor de directivas y la misma se aplica automáticamente.
Herramientas del resource kit Windows 2000
Exetype herramienta en línea de comandos del resource kit de Windows 2000, puedes descargarla desde Exetype.zip.
Creas un directorio, por ejemplo, C:TOOLS, y lo añades al path, y vas guardandote las herramientas en éste directorio.
Esta herramienta nos indica a que tipo de ejecutable pertenece el programa exe que consultamos, si es un programa GUI o es de consola, y otras pequeñas curiosidades. Abrimos una ventana cmd y tecleamos el comando y sus parámetros:
exetype programa_exe
Incluso me ha funcionado en un Vista.
Dependency walker herramienta GUI del mismo resource kit, puedes descargarla desde Dependency Walker Tool.
Podemos ver las dependencias, en la imagen las de NTOSKRNL.exe.
En mi Vista no funciona, aunque hay muchas alertas, es una herramienta 32 bits y mi máquina es de 64.
Ver los controladores instalados:
Podemos listarlos usando información del sistema desde inicio->todos los programas->accesorios->herramientas del sistema->entorno de software->controladores.
O podemos usar, drivers.exe o pstat (del resource kit 2000 o support tools de xp/2003) desde la línea de comandos,
El complemento Servicios puede usarse para reconfigurar un servicio, para ello abrimos el complemento, clic derecho en el servicio y pulsamos en propiedades. El cuadro de diálogo propiedades contiene 4 pestañas, cada una permite reconfigurar partes del servicio seleccionado. En la pestaña General podemos examinar y reconfigurar información general sobre el servicio.
Un servicio se identifica por dos nombres: un nombre interno (nombre del servicio) que se utiliza con propósitos de programación, y un nombre a mostrar (una cadena que se muestra ante los usuarios y administradores). En cuanto se añaden servicios a la base de datos de servicios del equipo su nombre interno no puede alterarse.
El administrador puede cambiar el tipo de inicio a uno de los siguientes:
Configurar servicios con las herramientas de línea de comandos
Además del complemento Servicios, Windows Server 2003 nos da dos programas de control de servicios en línea de comandos.
Net.exe El límite de esta herramienta es que se circunscribe a los servicios residentes en el equipo local. Con ella podemos iniciar, detener, pausar y seguir servicios.
Net stop <nombre_servicio> Net start <nombre_servicio>
Por ejemplo el servicio DHCP server, cuyo nombre interno es DHCPServer.
Sc.exe Otra de las herramientas en línea de comandos. Localizado en raíz_Del_sistemasystem32 implementa llamadas a todas las funciones API Windows de control de servicios. Podemos establecer parámetros a dichas funciones especificándolas en la línea de comandos. También nos muestra el estado del servicio y recupera los valores almacenados en los campos de la estructura de estado. Nos deja además especificar el nombre de un equipo remoto para llamar a las funciones API de servicios o ver los estados de los servicios en el equipo remoto. Podemos cambiar la ruta al servicio con esta heramienta.
Configuración de las opciones de recuperación del servicio
La pestaña Recuperación del cuadro de diálogo propiedades nos permite definir un juego de acciones a tomar si un servicio falla, existiendo el servicio y en un estado distinto a detenido. Hay tres opciones de recuperación: primer error, segundo error y siguientes errores. La API subyacente permite un número de errores específicos no restringidos antes de responder con lo especificado en Siguientes errores; sin embargo, el complemento Servicios sólo expone dos.
Cuatro son las configuraciones disponibles para las opciones de recuperación:
Podemos configurar las opciones de recuperación para cómo responderá el sistema en el caso de un error del servicio. Sin embargo, hay limitaciones para configurar los servicios. Ya que ellos ejecutan procesos críticos del sistema, los siguientes servicios están preconfigurados automáticamente para reiniciar el equipo si fallan y no tienen opciones de recuperación configuradas:
El servicio RPC también está preconfigurado para reiniciar el equipo si falla, pero podemos reconfigurar sus opciones de recuperación.
Los siguientes lo están para ser reiniciados por el SCM en su primer y segundo error:
Las opciones de recuperación ocurren sólo si el servicio falla, no en otros casos.
Windows Server 2003 ofrece herramientas que permiten administrar/configurar un servicio tanto local como remotamente desde otros equipos de la red. Cuando usamos estas herramientas no es necesario estar frente a la máquina física que ejecuta el servicio.
Integradas con Windows Server nos ayudan a la administración y configuración de servicios:
Para usar Servicios en la administración remota debemos ir a Administración de equipos (herramientas administrativas) del panel de Control, una vez abierto: desde el Menú Acción elegiremos Conectar con otro equipo. El nodo Servicios aparece bajo Servicios y Aplicaciones.
También podemos seleccionar Services (Local) en el árbol de la consola Services y elegir conectar con otro equipo del menú Acción.
Inicio-> Ejecutar -> services.msc ENTER
Clic derecho en Servicios (locales) o clic en Menú Acción, y elegimos conetar con otro equipo.
Para el uso de Sc.exe en un equipo remoto, usamos el parámetro ServerName para especificar el nombre el equipo remoto donde se encuentra el servicio. El nombre debe usarse con la convención UNC, por ejemplo \juansa-xp.
sc <servername> [comando] [servicename] <option1> <option2>
Después de establecida la conexión con el equipo remoto ya podemos consultar y comunicar con el SCM.
Inicio, detención, deshabilitar y reemprender servicios.
Las tareas más comunes asociadas con la administración de los servicios son: iniciarlos, detenerlos, deshabilitarlos y cambiar la forma en que se inician.
Podemos realizar las tareas, tanto local como remotamente, mediante el elemento Services, normalmente:
Todas las tareas pueden realizarse también desde los botones de la barra de herramientas del complemento Servicios.
NetworkService
En equipos con Windows Server 2003 los servicios también pueden configurarse para iniciar sesión con la cuenta NetworkService. Como LocalSystem no necesita contraseña, es decir, su contraseña es una contraseña vacía.
Cuenta integrada del sistema tiene los privilegios de un usuario autentificado; por lo que ofrece una alternativa para la ejecución de servicios en lugar de la cuenta LocalSystem. No hay directiva de bloqueo para la cuenta NetworkService ya que no está protegida por contraseña. El mecanismo de protección es qué sólo un proceso ejecutándose bajo la cuenta LocalSystem puede relizar un inicio de sesión con NetworkService (o LocalSystem), y debe ser un servicio tipo con inicio de sesión.
La cuenta NetworkService está prevista para servicios que no tienen la necesidad de privilegios locales extensivos, ya que no necesita acceso a red autentificada. Los servicios que se ejecutan bajo esta cuenta acceden a los recursos locales como usuarios corrientes. Cuando acceden a recursos de red, deben utilizar las credenciales del equipo. Un servicio ejecutándose con NetworkService tiene el mismo acceso de red como uno que se ejecuta bajo LocalSystem, pero con un acceso local significativamente reducido.
Los privilegios siguientes están disponibles para servicios ejecutándose con la cuenta NetworkService:
Para información sobre estos privilegios http://msdn.microsoft.com/en-us/library/bb530716(VS.85).aspx
LocalService
En equipos con Windows Server 2003 también puede usarse para iniciar sesión servicios, e igualmente a las anteriores esta cuenta no necesita de contraseña.
La cuenta LocalService se provee para servicios que son locales del equipo, no tiene privilegios extendidos y no necesita autentificación de red. Tanto bajo LocalService como bajo NetworkService se disponen de los mismos privilegios. Acceden a los recursos locales como usuarios corrientes y acceden a los recursos de red como usuarios anónimos. Un servicio ejecutándose con esta cuenta tiene menos autoridad que uno que lo hace bajo LocalSystem, tanto en local como en red.
La lista de privilegios es idéntica a la expuesta arriba.
Cuenta de usuario del dominio
Muchos servicios necesitan ejecutarse con una cuenta de inicio de sesión separada con permisos más específicos que LocalSystem, NetworkService o LocalService. Los programas instaladores de estos servicios se encargan de crear la cuenta de inicio de sesión y configurar las listas de control de acceso (ACLs) necesarias para darle los derechos apropiados a la cuenta.
Instalar un servicio con el uso de una cuenta de usuario del dominio con contraseña permite al servicio tener el acceso que la cuenta de dominio ofrece. Esta cuenta puede ser miembro de múltiples grupos de seguridad y no está sujeta a eliminación o renovación si el equipo abandona o se vuelve a unir al dominio. Para asignar acceso a áreas de Active Directory a servicios que usan cuentas de usuario de inicio de sesión, podemos fácilmente usar pertenencias a grupos; sin embargo, ejecutar un servicio bajo este contexto tiene ciertas desventajas:
Una cuenta de usuario del dominio tiene dos formatos que necesitamos para realizar diversas operaciones: el nombre distinguido del objeto usuario en el directorio y el formato DOMINIONOMBRE_USUARIO utilizado por el SCM local.
Cuando configuramos un servicio para ejecutarse con cierta cuenta, el SCM llamará a Lsass.exe para mirar la cuenta mediante las APIs LsaLookup. LocalSystem es una excepción ya que hay demasiadas variaciones para el nombre. Si la cuenta es válida, SCM permite el cambio de configuración. La próxima vez que el servicio se inicie, SCM llama a LogonUser para la cuenta mediante la contraseña especificada (usando el nombre _SC-Service como contraseña, técnicamente) para realizar el inicio de sesión del servicio-tipo, e inicia el proceso con el token de inicio de sesión devuelto. Si el proceso recibe el SID del servicio en su token, el proceso se identifica como un proceso de servicio.
Cuenta de usuario Local
Una cuenta de usuario local sólo existe en la base de datos SAM del equipo local; no tiene objeto de usuario en AD. Esto significa que un usuario local no puede autentificarse en el dominio. Consecuentemente, un servicio ejecutándose con una cuenta de usuario local no tiene acceso a recursos de red(excepto como usuario anónimo) y no es compatible con Kerberos. Por estas razones, este tipo de cuenta resulta inapropiado para servicios relacionados con el directorio. Sin embargo, bajo este contexto de seguridad se tienen muy pocos privilegios y puede causarse poco daño en el caso malintencionado de la cuenta.
Los servicios ejecutándose como administradores en controladores de dominio son una excepción para las cuentas bajo el contexto de seguridad de cuentas de usuario local para servicios de directorio; consecuentemente, los mismos cuidados son de aplicación a cuentas de usuario local en cuanto a nombre de cuenta y contraseña como a las cuentas de usuario del dominio.
LocalSystem es una cuenta local predefinida especial, disponible sólo para procesos del sistema. Esta cuenta no tiene contraseña.
En equipos con NT un servicio que se sejecuta en el contexto de LocalSystem hereda el contexto de SCM. El servicio no está asociado a ninguna sesión iniciada por una cuenta de usuario y no dispone de credenciales (nombre de dominio, nombre de usuario y contraseña) para utilizarse como comprobación. El servicio tiene acceso limitado a los recursos de red, ya que no tiene credenciales y se conecta por medio de una sesión nula.
En equipos con Windows 2000/2003, el mismo servicio y contexto usa las credenciales del equipo cuando accede a recursos sobre la red y tiene acceso total a los recursos locales. Para aquéllos servicios que acceden al servicio de directorio (AD), el contexto de LocalSystem es restringido. Cuando un servicio se ejecuta bajo LocalSystem en un equipo que es miembro de un dominio, el servicio se ejecuta bajo el contexto de la cuenta del equipo en cuanto accede a los recursos del dominio. Las cuentas de equipo normalmente disponen de pocos privilegios y no pertenecen a Grupos. Añadir cuentas de equipo a grupos no es recomendable ya que las cuentas están sujetas a eliminación y nueva creación si el equipo abandona o se vuelve a unir al dominio.
Por otro lado, un servicio ejecutándose bajo el contexto de LocalSystem en un controlador de dominio tiene acceso total al directorio, ya que el DC aloja una réplica y LocalSystem tiene acceso total a los recursos locales. El servicio NET LOGON es un ejemplo de un servicio que se ejecuta bajo la cuenta LocalSystem.
Si es posible, no ejecutar servicios bajo LocalSystem en un controlador de dominio. Ya que haciéndolo damos al servicio demasiado acceso a AD, ya que en un DC LocalSystem tiene control total del AD, y podría causar daños serios a la información de directorio.
La cuenta Localystem es la misma cuenta en que todos los componentes del sistema operativo en modo usuario de Windows Server 2003 se ejecutan, incluyendo Smss.exe (Session Manager), Crss.exe (Client/Server Runtime Subsystem), Lsass.exe (local security authority subsystem service), Winlogon.exe (Winlogon process), algunos servicios ubicados en la carpeta ruta_del_sistemaSystem32, y Services.exe (SCM).
Desde una perspectiva de seguridad, ésta cuenta es extremadamente potente -más que cualquier cuenta local o de dominio cuando se trata de un equipo local. Algunas de sus características:
Puedes ver parte de los privilegios de LocalSystem Account aquí.
Otra restricción para servicios ejecutándose bajo la cuenta LocalSystem es que estos generalmente no pueden mostrar cuadros de diálogo o ventanas iterativas en el escritorio del usuario sin el uso de una bandera especial de la función MessageBox. Esta limitación nos es resultado directo de ejecución bajo LocalSystem, es una consecuencia de la forma en que SCM asigna los servicios a las estaciones de ventanas.
Csrss.exe asocia cada proceso Win32 con una window station. Esta, a su vez, contiene escritorios, y los escritorios contienen ventanas. Sólo una window station puede ser visible en una consola y recibir la entrada de ratón y teclado. En un entorno de Terminal Server, una window station por sesión es visible, pero los servicios se ejecutan todos como parte de una sesión de consola. Win32 nombra la ventana visible como WinSta0. Todos los procesos iteractivos acceden a WinSta0.
Un servicio interactivo debe abrir WinSta0, pero antes de que SCM permita al servicio interactivo acceder a WinSta0 comprobará si ve si el valor de la entrada del registro NonInteractiveServices que cuelga de HKLMSYSTEMCurrentControlSetControlWindows es 1. Los administradores establecen este valor para impedir que los servicios configurados como interactivos muestren pantallas en la consola. Esta opción es deseable en un entorno de servidor sin atención en el que no hay presente usuario para responder a cuadros de mensajes de los servicios interactivos.
Nota:La herramienta de línea de comandos Objdir.exe puede utilizarse para ver objetos nombrados, incluyendo window stations en el objeto de directorio ruta_del_sistemaWindowStations. Winobj es la versión GUI. Para listar todos los servicios interactivos, debemos enumerar todos los servicios y llamar a QueryServiceConfig para cada servicio. Una buena forma es crear un script para hacer esto usando WMI o un archivo por lotes (BAT).
A menos que se indique otra cosa, SCM asocia los servicios con una window station no visible llamada Service-0x0-3e7$ que todos los servicios no interactivos comparten. El número en el nombre, 3e7, representa el identificador de sesión iniciada que Lsass.exe asigna para la cuenta LocalSystem.
De forma más específica, SCM utiliza el <LUID> del servicio donde <LUID> es el LOGON ID del inicio de sesión realizado por este servicio. Los servicios que se ejecutan con la cuenta LocalSystem reciben 0x0-3e5 y los que se ejecutan con la cuenta NetworkService 0x0-3e4. Aunque los primeros normalmente reciben el 0x0-3e7.
Los servicios configurados para ejecutarse con una cuenta de usuario se ejecutan en una window station no visible distinta cuyo nombre es el Lsass.exe LOGON PID asignado para la sesión iniciada del servicio.
A pesar de si los servicios se ejecutan con una cuenta de usuario o la cuenta LocalSystem, los que no se ejecutan en la window station visible no reciben entradas desde nosotros o de la pantalla en la consola. De hecho, si un servicio abre un cuadro de diálogo normal en la window station puede que aparezca como colgado ya que no hay usuario capaz de ver el cuadro de diálogo, que por supuesto impediría al usuario proporcionar cualquier entrada (ratón o teclado) para descartarlo.
Sólo los servicios configurados para ejecutarse con la cuenta LocalSystem pueden configurarse como interactivos.
Cuando SCM inicia un servicio configurado como interactivo, inicia el proceso en el contexto de seguridad de la cuenta LocalSystem pero lo conecta con WinSta0 en lugar de la window station de servicio no interactivo. Esta conexión hacia WinSta0 permite al servicio mostrar cuadros de diálogo y ventanas en la consola y permite a estas ventanas responder a entradas del usuario.