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
"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
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.
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
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/
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
No hay comentarios:
Publicar un comentario