| Scroll Ignore | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
|
Contexte
| Excerpt |
|---|
Le pack windows permet |
Lorsque vous installez Shinken Enterprise, un certain nombre de modèles et de commandes sont inclus dans votre configuration.
Le pack "Windows", comme son nom l'indique, permetde superviser des hôtes sur lesquels est installé le système d'exploitation Windows ( serveur ou client ).
|
- 15 commandes,
- 1 modèle d'hôte,
- 9 modèles de checks.
|
|
|
|
|
|
|
Il |
Le modèle d'hôte Windows et ses données héritées
Ce modèle contient des données ( locales ) qui seront utilisés par ses checks. Ces données seront utilisées par ses checks et leurs commandes en définissant $_HOST suivi du nom de la donnée.
| Info |
|---|
Exemple : $_HOSTWINDOWS_ALL_CPU_CRIT$ utilisera la donnée nommée WINDOWS_ALL_CPU_CRIT ( qu'elle soit locale ou héritée d'un modèle ). |
Si vous souhaitez modifier de manière globale ces données, ou en rajouter, faîtes le directement sur le modèle "windows".
| Panel |
|---|
contient le modèle d'hôte suivant pour la supervision :
Le modèle windows hérite du modèle windows-base qui permet d'obtenir les cinqdonnées nécessaires pour la connexion à la machine Windows. C'est la source "cfg-file-shinken" qui importe et met à jour ce pack. |
| Info | ||
|---|---|---|
| ||
Si le besoin de modifier certains éléments ( commandes, checks ou modèles d'hôtes ) se présente, il faut lire la page Les bonnes pratiques d'utilisation d'un pack livré par Shinken ). |
Comment utiliser son pack ?
Le pack "windows" utilise WMI pour récupérer les informations nécessaires à la supervision de votre machine.
| Info |
|---|
Pour savoir comment configurer WMI, vous pouvez voir la page Mise en place du Pack windows |
Le pack possède deux modèles d'hôtes :
- windows-base, fournit les cinq données nécessaires pour la connexion à la machine Windows ( ce modèle n'est utile que pour définir un modèle commun qui contient les données nécessaires pour l'utilisation de tout autre modèle du pack. Il n'est visible que par les admin Shinken ).
- windows, fournit les informations nécessaires à la supervision de votre machine Windows.
Version des sondes livrées
| Nom | Version | Description | ||
|---|---|---|---|---|
| 1.6 | Agent-less Windows Monitoring Plugin |
Connexion et arguments de sécurité
La connexion au serveur Windows demande un compte sur le serveur ( local ou compte de domaine ). Plusieurs données permettent de gérer cela :
DOMAINUSERSHORT
DOMAINPASSWORD
DOMAIN
DOMAINUSER
Nom complet utilisé pour se connecter, il faut par défaut DOMAINE\DOMAINUSERSHORT.
- À n'utiliser que si vous ne souhaitez pas utiliser les variables DOMAINUSERSHORT et DOMAIN, et que votre connexion se fait sur un autre format que Domaine/utilisateur.
WINDOWS_SECURITY_MECANISMS
Niveau de sécurité utilisé pour se connecter sur le serveur Windows :
- integrity : ( par défaut ) valeur de sécurité élevée
- connect: valeur de sécurité faible, qui sera bloquée sur les serveurs Windows à partir de mi-2022 ( cf. l'article de microsoft sur le sujet ), à partir des serveurs windows 2008.
- Cette valeur ne doit être utilisée que sur de vieux serveurs qui ne gèrent pas les connexions au niveau integrity.
Fonctionnement WMI sur poste client ou serveur Windows
Windows Management Instrumentation ( infrastructure de gestion Windows )
Le service WMI est installé et démarré par défaut sur les systèmes d'exploitations Windows.
Vous pouvez aller vérifier si ce service est bien démarré en vous rendant dans le gestionnaire de service Windows :
| Panel |
|---|
Si vous utilisez des firewall :
- Le Poller doit être autorisé à communiquer avec l'hôte supervisé.
- Les ports WMI de cet hôte doivent être ouverts : les ports TCP 135 et 445 ainsi que des ports dynamiques, typiquement dans le range de 1024 à 1034, doivent être accessibles.
WMI Avancé - gestion de la sécurité
Comme on l'a vu précédemment, les commandes WMI requièrent une authentification au préalable afin de récupérer des informations de supervision sur l'hôte Windows. ( -u "$_HOSTDOMAINUSER$" -p "$_HOSTDOMAINPASSWORD$" )
L'utilisation du compte d'administrateur du poste Windows permet facilement d'obtenir ces informations avec succès, car ce compte à tous les droits d'accès ( WMI, DCOM, etc. ).
Cependant, pour des raisons de sécurité, il se peut que vous préfériez utiliser un compte avec des droits plus restreints.
Voici donc la procédure à suivre pour rajouter des droits à un utilisateur basique qui vous servira à récupérer les informations WMI souhaitées.
Une fois que vous avez créé votre utilisateur sur le poste client ou sur votre domaine, ouvrez la console de "gestion de l'ordinateur" ( compmgmt.msc ) sur le poste à superviser, et rajoutez à l'utilisateur les droits suivants : Utilisateurs du modèle COM distribué ( Distributed COM Users ) et Utilisateurs de l'Analyseur de performance ( Performance Monitor Users ) :
| Panel |
|---|
Il faut à présent rajouter les droits sur le contrôle WMI, pour cela, depuis la console de "gestion de l'ordinateur" :
- cliquez sur Services & Applications,
- cliquez sur Contrôle WMI,
- clic droit - Propriété,
- sélectionnez l'onglet Sécurité,
- sélectionnez Root ( 1 ),
- cliquez sur le bouton de Sécurité en bas ( 2 ),
- rajoutez votre utilisateur ( 3 ),
- allez dans les propriétés avancées ( 4 ),
- modifiez la sécurité de l'utilisateur ( 5 ),
- rajoutez-lui toutes les autorisations et l'application doit se faire à "Cet espace de noms et les sous-espaces de noms" ( 6 ),
- cliquez sur OK sur toutes les fenêtres.
Veuillez ouvrir la console des services ( services.msc ) et redémarrez le service gérant la partie WMI : "Infrastructure de gestion Windows".
Votre check ( via l'utilisateur spécifique passé en paramètre ) doit maintenant pouvoir passer une requête WMI à cet ordinateur depuis votre commande Shinken.
Sur les neuf, un seul check peut poser un problème, c'est la requête qui interroge les services Windows via le check "Services". Ce check va vous renvoyer une erreur :
| Code Block |
|---|
UNKNOWN - The WMI query had problems. The error text from wmic is: [wmi/wmic.c:212:main()] ERROR: Retrieve result data. NTSTATUS: NT code 0x80041003 - NT code 0x80041003 |
Voyons comment résoudre ce problème dans la prochaine section.
| Panel |
|---|
Déléguer des droits d'accès minimum d'un utilisateur sur les services Windows
Pour que l'utilisateur puisse interroger les différents services Windows, il faut au préalable l'autoriser.
Par défaut, les utilisateurs locaux et les comptes non-administrateurs ne disposent pas des droits pour agréger les services locaux, ni pour interroger leurs statuts ou les redémarrer.
Dans la procédure suivante il faudra lancer des commandes dans deux interpréteurs :
Les commandes de l'invite de commandes ( cmd ) seront présentées comme suit:
Code Block language bash theme Emacs title (commande cmd) echo invite commandeLes commandes PowerShell seront présentées comme suit:
Code Block language powershell theme Eclipse title (commande PowerShell) echo PowerShell
Si lors d'une étape il y une commande PowerShell et de l'invite commande, elles produisent le même résultat et peuvent être utilisées de manière équivalente, selon les préférences de l'utilisateur ou les contraintes techniques de l'environnement. Les commandes PowerShell ne sont pas compatible avec PowerShell (x86)
Lancer l'interpréteur de commande comme administrateur :
- Dans le barre de recherche Windows, tapez commande pour l'invite commande ou PowerShell pour trouver l'interpréteur correspondant.
- Faite Exécuter en tant qu'administrateur
Lister les utilisateurs :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
wmic useraccount |
Toutefois, Microsoft à annoncé que l'utilitaire est déprécié à partir de Windows 10 et recommande l'utilisation de PowerShell
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-LocalUser |
Lister les groupes :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
wmic group |
Toutefois, Microsoft à annoncé que l'utilitaire est déprécié à partir de Windows 10 et recommande l'utilisation de PowerShell
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-WmiObject win32_group |
Déterminer le SID (identifiant de sécurité) du compte auquel ajouter les autorisations :
Le SID est nécessaire dans la gestion des autorisations des services.
Pour un utilisateur
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
wmic useraccount where name='utilisateur' get sid |
Toutefois, Microsoft à annoncé que l'utilitaire est déprécié à partir de Windows 10 et recommande l'utilisation de PowerShell
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-LocalUser -Name 'utilisateur' | Select sid |
Pour un groupe
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
wmic group where name='utilisateur' get sid |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
(Get-WmiObject win32_group | Where-Object { $_.Name -eq "NameOfUserGroupThatNeedsPermissionForOurService"} ).SID |
Lister les services :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc queryex type=service state=all | find /i "SERVICE_NAME:" |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-Service |
Lister les autorisations d'un service :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdshow 'nom du service' |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc.exe sdshow 'nom du service' |
Affiche le descripteur de sécurité d'un service en utilisant le Security Descriptor Definition Language (SDDL)
Le résultat de lacommande à le format suivant:
| Code Block |
|---|
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD) |
Interpréter le résultat de la commande :
Il y a deux sections. 'D:' qui correspond aux listes de contrôle d'accès discrétionnaire (DACL). Les listes de contrôle d'accès discrétionnaire (DACL) sont utilisées pour contrôler les autorisations accordées ou refusées à un utilisateur pour l'accès à un objet sécurisable (dans notre cas, un service).
'S:' qui correspond aux listes de contrôle d'accès au système. Les listes de contrôle d'accès au système (SACL) sont utilisées pour contrôler les tentatives d'accès qui sont enregistrées.
Le résultat de la section DACL est écrit selon langage de définition de descripteur de sécurité (SDDL), qui décrit un descipteur de sécurité en tant que chaîne de texte.
| Code Block |
|---|
A;;CCLCSWRPWPDTLOCRRC;;;SY |
Le premier caractère est soit A pour 'Allow' (autoriser) ou D pour 'Deny' (refuser). Les deux derniers caractères précise pour quel groupe ou utilisateur la section s'applique. SY correspondant à 'Local System'. Les caractères du milieu correspondent à l'ensemble des permissions.
- Les relations entre pairs de caractère et autorisations :
CC — SERVICE_QUERY_CONFIG (request service settings)
LC — SERVICE_QUERY_STATUS (service status polling) SW — SERVICE_ENUMERATE_DEPENDENTS LO — SERVICE_INTERROGATE CR — SERVICE_USER_DEFINED_CONTROL RC — READ_CONTROL RP — SERVICE_START WP — SERVICE_STOP DT — SERVICE_PAUSE_CONTINUE
- Les relations entre pairs de caractère et utilisateur ou groupe:
AU Authenticated Users
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 userExemple : Lister les permissions de scmanager
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdshow scmanager |
Accorder des permissions à utilisateur ou un groupe sur un service :
En utilisant l'invite commande :
- Copiez l'output (SDDL) et collez-le dans un éditeur de texte. Le résultat devrait ressembler à la ligne suivante :
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
- Copiez la section entre parenthèses du SDDL incluant le IU (interactive users) et collez là juste avant le S. Remplacez le 'IU' avec le SID de l'utilisateur. Changez les pairs de caractère d'autorisation pour modifier les permissions. Le résultat devrait ressembler à la ligne suivante :
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CCLCRPRC;;;S-1-5-21-214A909598-1293495619-13Z157935-75714)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
Pour rappel le format d'une autorisation est le suivant : (A;;Pairs d'autorisation;;; SID)
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdset 'nom du service' "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CCLCRPRC;;;S-1-5-21-214A909598-1293495619-13Z157935-75714)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc.exe sdset 'nom du service' "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CCLCRPRC;;;S-1-5-21-214A909598-1293495619-13Z157935-75714)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
Retirer des permissions à utilisateur ou un groupe sur un service :
Reprendre les commandes de la partie précédente et retirer les permissions.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdset 'nom du service' "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc.exe sdset 'nom du service' "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CCLCRPRC;;;S-1-5-21-214A909598-1293495619-13Z157935-75714)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
Exemples d'utilisation :
- Autoriser un utilisateur à énumérer les services locaux Windows :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-LocalUser -Name 'utilisateur' | Select sid |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdshow scmanager |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;'Pairs d'autorisations';;;'SID')S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
- Autoriser un utilisateur à démarrer, stopper, mettre en pause et interroger un service Windows :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
Get-LocalUser -Name 'utilisateur' | Select sid |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
sc sdshow 'nom du service' |
| Code Block |
|---|
sc sdset 'nom du service' "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;'Pairs d'autorisations';;;'SID')S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" |
Contrairement à l'utilisation du compte administrateur pour la vérification des services ( qui permet une vue exhaustive et totale ), le rajout des droits d'énumérer les services Windows pour l'utilisateur spécifié ne permet pas de lister et de vérifier la totalité des services.
La commande du pack Windows check_windows_auto_services retournera alors l'état des services ( en démarrage "automatique" ) d'un certain nombre de services Windows et de ceux sur lesquels vous avez rajouté les droits de manière manuelle.Voici un exemple de commande qui va vérifier un service spécifique, ici la bonne activité du service de "Pare feu" Windows :
| Code Block |
|---|
$PLUGINSDIR$/check_wmi_plus.pl -H "$HOSTADDRESS$" -u "$_HOSTDOMAINUSER$" -p "$_HOSTDOMAINPASSWORD$" -m checkservice -a MpsSvc -c 0 --inidir=$WMI_INI_DIR$ |
Résolutions des problèmes
Les checks n'arrivent pas à récupérer les informations alors que l'utilisateur utilisé est Administrateur
Après avoir mis en place le modèle dans Shinken et donné les bons droits à l'utilisateur Windows utilisé par le check, il se peut que les données de performances remontées par les checks ne puissent pas être remontées.
Il est possible dans ce cas que les valeurs de la bibliothèque du compteur de performances Windows soit corrompu ou contienne des valeurs incorrectes.
Dans ce cas, les checks Windows peuvent retourner les erreurs suivantes :
| Code Block |
|---|
UNKNOWN - The WMI query had problems. The
error text from wmic is: [wmi/wmic.c:212:main()]
ERROR: Retrieve result data.
NTSTATUS: NT code 0x80041017 - NT code
0x80041017 |
| Code Block |
|---|
UNKNOWN - The WMI query had problems. The plugin is having trouble finding the required WMI Classes on the target host (172.16.0.132). There can be multiple reasons for this (please go through them and check) including permissions problems (try using an admin login) or software that creates the class is not installed (eg if you are trying to checkiis but IIS is not installed). It can also happen if your version of Windows does not support this check (this might be because the WMI fields are named differently in different Windows versions). Sometimes, some systems 'lose' WMI Classes and you might need to rebuild your WMI repository. Sometimes the WMI service is not running, other times a reboot can fix it. Other causes include mistyping the WMI namesspace/class/fieldnames. There may be other causes as well. You can use wmic from the command line to troubleshoot. Wmic error text on the next line.
[wmi/wmic.c:212:main()] ERROR: Retrieve result data.
NTSTATUS: NT code 0x80041010 - NT code 0x80041010 |
Il est possible de recréer manuellement les valeurs de la bibliothèque du compteur de Performance avec la commande suivante :
| Code Block |
|---|
lodctr /r |
Plus d'informations sur la commande et ses possibilités peuvent être trouvées sur la page de documentation dédiée: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/lodctr
Erreur : "Error: Can't locate perl58.dll"
Si un script retourne l'erreur :
| Code Block |
|---|
Error: Can't locate perl58.dll" ou "Error: Can't locate perlXX.dll |
Il faut installer/réinstaller ActivePerl
Erreur : "ERROR: Login to remote object."
Si le script retourne l'erreur suivante :
| Code Block |
|---|
UNKNOWN - The WMI query had problems. The error text from wmic is: [wmi/wmic.c:196:main()] ERROR: Login to remote object.
NTSTATUS: NT code 0x80010111 - NT code 0x80010111 |
C'est une erreur dû à l'élévation de sécurité imposée sur les dernières mises à jour de Windows.
La mise à jour de Shinken Entreprise avec la dernière version disponible ( elle contient une version des modèles, des checks et de la commande WMIC qui corrige ce problème ).


