Files
comi-audit-gpresult-user/README.md
T
2026-10-28 16:45:44 +01:00

104 lines
7.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**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 `description` de `WAPT/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**
1. L'installation appelle `install()`, volontairement vide.
2. L'audit recherche les sessions Windows actives avec les API WTS, via `win32ts`.
3. Il sélectionne l'unique compte actif et lance :
4.
```
gpresult.exe /USER "DOMAINE\utilisateur" /SCOPE USER /X "<fichier temporaire>" /F
 
```
5. Il analyse la section XML `UserResults`, puis classe les GPO et calcule les compteurs.
6. Il transmet directement un dictionnaire à `WAPT.write_audit_data_if_changed`, sans convertir le résultat en chaîne JSON.
7. 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 pas `session_setup()`. Il consulte les données disponibles sans lancer de `gpupdate` ni 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`, `win32ts` et `WAPT.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**
1. Remplacer le `setup.py` du paquet existant par le fichier fourni.
2. Reporter la description proposée dans `WAPT/control` et incrémenter la version du paquet selon les conventions du dépôt.
3. Reconstruire, signer et téléverser le paquet dans le dépôt WAPT.
4. Déployer la nouvelle version sur un poste avec une session utilisateur active.
5. 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.exe` est conservé dans cette version ; aucun chemin `Sysnative` n'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.