martes, 8 de marzo de 2016

NAGIOS. WMI. Permisos en hosts para verificar servicios Windows sin usuario administrador



En este post explicaré como poder mirar el estatus de un servicio Windows desde Nagios, sin que el usuario que lo consulte tenga permisos de administrador. Todos mis hosts windows los monitorizo por WMI.

Nota: Antes de probar este procedimiento lee muy atento todo el artículo.
 
Primero empezaremos por una solución rápida. Solucionar problemas del tipo



Ejecutamos como administrador: %windir%\system32\wbem\wmiadap.exe /f
 
 "Este comando analiza todas las bibliotecas de rendimiento del sistema y actualiza las clases de contador de rendimiento. Para obtener más detalles, consulte la Documentación de instrumentación de administración de Windows ."

Seguidamente ejecutaremos el comando: lodctr /R


Si con lo anterior no se soluciona pasamos a la parte más manual y delicada

Para que esto funcione previamente hay que configurar una cuenta en el hosts de la manera que Nagios indica: http://gonsystem.blogspot.com.es/2016/02/monitorizacion-nagios-y-wmi-anadir.html

Hay que tener privilegios administrativos para que se ejecuten los siguientes commandos:

La información que nos va a dar los comandos siguientes puede ser diferente en cada servidor.

[0] Nos conectamos al servidor y abrimos un CMD con privilegios de administrador.

[1] Buscamos la cadena de SID de nuestro usuario “nagiosuser”

 wmic useraccount where name='nagiosuser' get sid


S-1-5-21-3406756-423087055-1055211938-23112

[2] consultamos la cadena actual de permisos “scmanager”

Sc sdshow scmanager


D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

[3 ] La documentación que encuentro en Internet pone que añadamos el comando siguiente sustituyendo <SID> por el número SID que hemos obtenido en el paso 1. 

sc sdset SCMANAGER D:(A;;CCLCRPRC;;;<SID>)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)  ->recomendada

Como es un tema delicado y estamos tocando servidores he probado una pequeña variación, se trata de mantener toda la cadena que hemos obtenido en el punto 2 y añadir los permisos de mi usuario, en lugar de sustituir algo que ya exista.

Me he encontrado casos en los que no tiene acceso nuestro usuario para ver el estado de TODOS los servicios que queremos monitorizar, con lo que he añadido un permiso más, se trata de "LO"

sc sdset SCMANAGER D:(A;;CCLCRPRCLO;;;<SID>)

Que nos concede lo siguiente:

LO – SERVICE_INTERROGATE – ask the service its current status

Con lo que haría:

El comando: sc sdset SCMANAGER

Mi cadena optenida paso 1 -> (A;;CCLCRPRCLO;;;S-1-5-21-3406756-423087055-1055211938-23112)

Cojo la configuración recomendada y le añado mi SID

La cadena del hosts optenida paso 2 -> D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

El resultado:
sc sdset SCMANAGER D:(A;;CCLCRPRCLO;;;S-1-5-21-3406756-423087055-1055211938-23112)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)


Importante que no se añada ni un espacio en blanco que no sean las cadenas que hemos obtenido.

Si al final sale un problema, una posible solución es http://woshub.com/granting-remote-access-on-scmanager-to-non-admin-users/


Ahora comprobamos nuestro Nagios, en este caso miraremos el "spooler" que es el servicio de imprEsión de Windows, con los permisos dados podríamos mirar cualquiera






Si hay problemas y queremos dejar como estaba el servidor bastaría con insertar el resultado original del "Sc sdshow scmanager"

Para entender un poco lo que hemos hecho....

Lo que hemos hecho es dar derechos al usuario usernagios para acceder de forma remota a scmanger.

El comando SC solo funciona para el control a distancia de servicios. Todos los permisos que se pueden dar son los siguientes:

  F : Full Control
  R : Generic Read
  W : Generic Write
  X : Generic eXecute
  L : Read controL
  Q : Query Service Configuration
  S : Query Service Status
  E : Enumerate Dependent Services
  C : Service Change Configuration
  T : Start Service
  O : Stop Service
  P : Pause/Continue Service
  I : Interrogate Service
  U : Service User-Defined Control Commands


La primera letra representa Permitir (A) lo contrario de Denegar que se representa por una (D). Cada par de letras representa un permiso específico:

CC – SERVICE_QUERY_CONFIG – ask the SCM for the service’s current configuration
LC – SERVICE_QUERY_STATUS – ask the SCM for the service’s current status
SW – SERVICE_ENUMERATE_DEPENDENTS – list dependent services
LO – SERVICE_INTERROGATE – ask the service its current status
CR – SERVICE_USER_DEFINED_CONTROL – send a service control defined by the service’s authors
RC – READ_CONTROL – read the security descriptor on this service.

Permisos adicionales:

RP – SERVICE_START – start the service
WP – SERVICE_STOP – stop the service
DT – SERVICE_PAUSE_CONTINUE – pause / continue the service

Las dos últimas letras definen la entidad de seguridad asignado a estos permisos:

AU – Authenticated Users

Posibles alias:

“AO” Account operators
“RU” Alias to allow previous Windows 2000
“AN” Anonymous logon
“AU” Authenticated users
“BA” Built-in administrators
“BG” Built-in guests
“BO” Backup operators
“BU” Built-in users
“CA” Certificate server administrators
“CG” Creator group
“CO” Creator owner
“DA” Domain administrators
“DC” Domain computers
“DD” Domain controllers
“DG” Domain guests
“DU” Domain users
“EA” Enterprise administrators
“ED” Enterprise domain controllers
“WD” Everyone
“PA” Group Policy administrators
“IU” Interactively logged-on user
“LA” Local administrator
“LG” Local guest
“LS” Local service account
“SY” Local system
“NU” Network logon user
“NO” Network configuration operators
“NS” Network service account
“PO” Printer operators
“PS” Personal self
“PU” Power users
“RS” RAS servers group
“RD” Terminal server users
“RE” Replicator
“RC” Restricted code
“SA” Schema administrators
“SO” Server operators
“SU” Service logon user 

Miramos este ejemplo:

(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)

A – Allow
CC – SERVICE_QUERY_CONFIG – ask the SCM for the service’s current configuration
DC – Delete All Child Objects
LC – SERVICE_QUERY_STATUS – ask the SCM for the service’s current status
SW – SERVICE_ENUMERATE_DEPENDENTS – list dependent services
RP – Read all properites
WP – SERVICE_STOP – stop the service
DT – SERVICE_PAUSE_CONTINUE – pause / continue the service
LO – SERVICE_INTERROGATE – ask the service its current status
CR – SERVICE_USER_DEFINED_CONTROL – send a service control defined by the service’s authors
SD – Delete
RC – READ_CONTROL – read the security descriptor on this service.
WD – Modify permissions
WO – Modify owner
BA- Built-in administrators

Más info https://msdn.microsoft.com/en-us/library/aa374928(v=vs.85).aspx?tduid=(23d870496ae9d9381d9b898ca39fabf9)(256380)(2459594)(TnL5HPStwNw-g23csJa_kmQHrAWHkza0GA)() Para ver los permisos de un servicio en concreto lo podemos hacer:







MUY IMPORTANTE: Haz pruebas antes de poner en producción este procedimiento, si puede ser ten copias de seguridad,  snapshots, reinicia las veces que haga falta, comprueba los eventos, mira los servios etc ... un espacio mal puesto deja inestable e inaccesible el servidor. Yo he hecho más de 100 servidores sin problemas (IIS, SQL, FS, DNS, DC, etc...) pero hay que estar muy atentos durante estas actuaciones.

Si no tienes muy claro lo que vas hacer NO lo hagas, la responsabilidad de los servidores es tuya. Antes de hacer algo tan delicado contrasta con otras webs o consúltalo con un experto.

Es importante vuestra opinión, no hay mucha documentación de este tema, así que si lo probáis sería bueno que lo comentéis.

Artículo relaconado: http://gonsystem.blogspot.com.es/2016/02/monitorizacion-nagios-y-wmi-anadir.html


Check at Windows 2012 R2
by GoN | Published: May, 2016 | Last Updated: Abril  26, 2022