form-gpresult-user
Paquet WAPT d'audit des stratégies de groupe de l'utilisateur ayant une session active sur le poste. Il collecte les données GPResult et les expose sous forme structurée dans audit-gpresult.user-gpo.
Identification dans le dépôt
- Nom du paquet :
form-gpresult-user - Libellé : Audit GPO — Utilisateur actif
- Description proposée pour le champ
descriptiondeWAPT/control:
Audit des GPO de l'utilisateur actif : identification du compte, listes des GPO appliquees et non appliquees et compteurs dans audit-gpresult.user-gpo.
Le fichier WAPT/description.txt contient cette ligne à reporter dans le fichier WAPT/control existant. Ce n'est pas un fichier de contrôle complet : conserver les autres métadonnées du paquet, notamment la version, les dépendances et les informations de signature.
Fonctionnement
- L'installation appelle
install(), volontairement vide. - L'audit recherche les sessions Windows actives avec les API WTS, via
win32ts. - Il sélectionne l'unique compte actif et lance :
gpresult.exe /USER "DOMAINE\utilisateur" /SCOPE USER /X "<fichier temporaire>" /F
- Il analyse la section XML
UserResults, puis classe les GPO et calcule les compteurs. - Il transmet directement un dictionnaire à
WAPT.write_audit_data_if_changed, sans convertir le résultat en chaîne JSON. - Le dossier et le rapport XML temporaires sont supprimés à la sortie du bloc de collecte, y compris en cas d'exception.
L'audit s'exécute dans le contexte de l'agent WAPT et cible explicitement les données RSoP de l'utilisateur. Il n'utilise passession_setup(). Il consulte les données disponibles sans lancer degpupdateni modifier les stratégies du poste.
Prérequis
- Poste Windows disposant de
gpresult.exe, accessible depuis le contexte de l'agent. - Agent WAPT fournissant
setuphelpers,win32tsetWAPT.write_audit_data_if_changed. - Une session utilisateur active et des données RSoP accessibles pour le compte ciblé.
- Droits suffisants dans le contexte d'exécution de l'agent pour lire ces données et créer un fichier temporaire.
La présence d'un compte actif ne garantit pas la disponibilité de ses données RSoP. Un compte local est détectable, mais ne dispose pas nécessairement de données de stratégies exploitables.
Résultat d'audit
Catégorie :audit-gpresult— Clé :user-gpo.
Exemple illustratif :
{
"status": "OK",
"summary": {
"total_gpo_count": 2,
"denied_gpo_count": 1,
"applied_gpo_count": 1
},
"computer": {
"name": "POSTE01"
},
"user": {
"account": "DOMAINE\\utilisateur",
"name": "utilisateur",
"domain": "DOMAINE"
},
"denied_gpos": ["Local Group Policy"],
"applied_gpos": ["GPO Utilisateurs"]
}
| Champ | Signification |
status |
État de la collecte, pas un verdict de conformité des GPO. |
summary.total_gpo_count |
Nombre d'entrées GPO analysées dans UserResults. |
summary.applied_gpo_count |
Nombre d'entrées classées comme appliquées. |
summary.denied_gpo_count |
Nombre d'entrées classées comme non appliquées. |
computer.name |
Nom du poste remonté par COMPUTERNAME. |
user.account |
Compte complet sélectionné via WTS. |
user.name |
Nom d'utilisateur. |
user.domain |
Domaine fourni par WTS, généralement NetBIOS ; ce n'est pas nécessairement le nom DNS du domaine AD. |
applied_gpos |
Liste triée des noms des GPO appliquées. |
denied_gpos |
Liste triée des noms des GPO non appliquées. |
Convention : denied_gpos inclut les GPO non appliquées pour toutes les causes reconnues par les indicateurs XML, notamment le filtrage, la désactivation ou l'invalidité. Cela peut inclure une GPO vide ; cette liste ne signifie donc pas uniquement « refus de sécurité ». Si le nom manque, l'identifiant XML est utilisé lorsqu'il est disponible.
Le classement conserve exactement la logique de la version retenue : un indicateur Enabled, IsValid ou FilterAllowed à faux, ou AccessDenied à vrai, classe la GPO comme non appliquée. Sinon, IsValid et FilterAllowed doivent être vrais pour la classer comme appliquée. Un état indéterminable déclenche une erreur.
Statuts et cas particuliers
| Statut | Situation |
OK |
Export XML et analyse terminés, résultat enregistré. Des GPO non appliquées peuvent être présentes. |
WARNING |
Aucun utilisateur avec une session active. |
ERROR |
Plusieurs comptes actifs, échec WTS/GPResult, XML absent ou inexploitable, ou état de GPO indéterminable. |
Les sessions déconnectées sont ignorées. Plusieurs sessions actives du même compte sont regroupées ; plusieurs comptes actifs distincts provoquent une erreur pour éviter une sélection arbitraire.
En cas de WARNING ou d'ERROR, le résultat de la même clé est remplacé par un objet de statut et un message. Les listes et compteurs du précédent succès ne sont pas recopiés. Le champ user vaut alors null ou contient le compte ciblé sous forme de chaîne, selon le cas ; les consommateurs doivent consulter status avant de lire les champs du résultat de succès.
Les paramètres d'enregistrement sont keep_days=365 et max_count=1. La collecte ne crée pas une clé distincte par utilisateur : elle représente le résultat du dernier audit du poste, selon le compte actif au moment de l'exécution.
Mise en place et exploitation
- Remplacer le
setup.pydu paquet existant par le fichier fourni. - Reporter la description proposée dans
WAPT/controlet incrémenter la version du paquet selon les conventions du dépôt. - Reconstruire, signer et téléverser le paquet dans le dépôt WAPT.
- Déployer la nouvelle version sur un poste avec une session utilisateur active.
- Lancer l'audit du paquet depuis WAPT et consulter
audit-gpresult.user-gpo.
La fréquence de réexécution dépend de la configuration d'audit WAPT existante ; ce code n'ajoute aucun mécanisme de planification.
Dépannage
Le journal indique le compte ciblé, la commande et la présence du dossier temporaire. Le délai maximal de la commande est de 120 secondes.
- Aucun utilisateur actif : ouvrir une session, puis relancer l'audit.
- Plusieurs utilisateurs actifs : ne conserver qu'un seul compte actif sur le poste, puis relancer l'audit.
- Erreur GPResult : consulter la sortie de la commande dans le journal ; vérifier les droits, les données RSoP et l'accès au dossier temporaire.
- Erreur XML ou état indéterminable : récupérer un export XML produit dans les mêmes conditions pour examiner la structure avant de modifier le parseur.
L'appel direct àgpresult.exeest conservé dans cette version ; aucun cheminSysnativen'est forcé.
Contenu setup.py: version retenue, enrichie uniquement de commentaires et de docstrings.README.md: identification, fonctionnement, données et exploitation.WAPT/description.txt: ligne de description à reporter dans le contrôle existant.