Files
Audit-gpresult-machine/README.md
T

100 lines
6.9 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-computer**
Paquet WAPT d'audit des stratégies de groupe appliquées à l'ordinateur. Il collecte un export XML de GPResult et enregistre un résultat structuré dans **`audit-gpresult.computer-gpo`**.
Le nom `form-gpresult-computer` est proposé pour identifier ce paquet dans le dépôt, en complément de `form-gpresult-user`. Si le paquet machine existe déjà sous un autre nom, conserver son identité actuelle.
**Description pour le dépôt**
**Libellé proposé :** Audit GPO — Ordinateur
Ligne à reporter dans le champ `description` du fichier `WAPT/control` existant :
```
description: Audit des GPO machine : domaine, site, listes des GPO appliquees et non appliquees et compteurs dans audit-gpresult.computer-gpo.
 
```
Cette ligne est également fournie dans `WAPT/description.txt`. Ce fichier n'est pas un contrôle WAPT complet : conserver les autres métadonnées du paquet existant.
**Fonctionnement**
1. L'installation appelle `install()`, volontairement vide.
2. L'audit supprime, s'il existe, le rapport temporaire précédent.
3. Il lance GPResult depuis le chemin construit avec `makepath(system32(), "gpresult.exe")`, avec les options `/SCOPE COMPUTER /X "<rapport.xml>" /F` et un délai maximal de 120 secondes.
4. Il recherche la section XML `ComputerResults`, extrait les informations et classe les GPO.
5. Il enregistre directement un dictionnaire avec `WAPT.write_audit_data_if_changed`.
6. Il tente de supprimer le rapport temporaire dans un bloc `finally`.
Le paquet consulte les données RSoP disponibles. Il ne lance pas de `gpupdate` et ne modifie pas les stratégies de groupe. Il n'a pas besoin d'une session utilisateur active et ne collecte pas les GPO utilisateur.
**Prérequis**
- Poste Windows disposant de GPResult au chemin construit par les fonctions WAPT utilisées.
- Agent WAPT fournissant `setuphelpers` et `WAPT.write_audit_data_if_changed`.
- Données RSoP machine disponibles et droits suffisants dans le contexte de l'agent pour les consulter.
- Accès en lecture et écriture au répertoire temporaire du contexte d'exécution.
**Données produites**
**Catégorie :** `audit-gpresult` — **Clé :** `computer-gpo`.
Exemple illustratif :
```
{
   "status": "OK",
   "computer": {
     "name": "POSTE01",
     "domain": "exemple.lan",
     "site": "Default-First-Site-Name"
   },
   "summary": {
     "applied_gpo_count": 2,
     "denied_gpo_count": 1,
     "total_gpo_count": 3
   },
   "applied_gpos": [
     "Local Group Policy",
     "Default Domain Policy"
   ],
   "denied_gpos": [
     "GPO non appliquee"
   ]
 }
 
```
| | |
| - | - |
| **Champ** | **Signification** |
| `status` | État de la collecte, pas un verdict de conformité. |
| `computer.name` | Nom du poste issu de `COMPUTERNAME`. |
| `computer.domain` | Premier texte `DomainName` trouvé dans le sous-arbre machine, sinon premier texte `Domain`. |
| `computer.site` | Premier texte `Site` trouvé dans le sous-arbre machine. |
| `summary.applied_gpo_count` | Nombre d'entrées retenues comme appliquées. |
| `summary.denied_gpo_count` | Nombre d'entrées retenues comme non appliquées. |
| `summary.total_gpo_count` | Somme des deux compteurs. |
| `applied_gpos` | Noms des GPO classées comme appliquées, dans l'ordre de collecte. |
| `denied_gpos` | Noms des GPO classées comme non appliquées, dans l'ordre de collecte. |
 
Les champs de domaine et de site restent des chaînes vides si aucune valeur n'est trouvée. La recherche de texte est récursive ; elle conserve le comportement du script fourni.
**Règles de classement conservées**
Une GPO est considérée comme appliquée si `Enabled`, `IsValid` et `FilterAllowed` sont vrais et si `AccessDenied` est faux. Toutes les autres entrées retenues sont placées dans `denied_gpos`.
Les valeurs `true`, `1`, `yes` et `oui`, sans distinction de casse, sont interprétées comme vraies. Toute autre valeur, y compris un champ absent, est interprétée comme fausse. Un `AccessDenied` absent est donc considéré comme faux, tandis qu'un `Enabled`, `IsValid` ou `FilterAllowed` absent empêche le classement en GPO appliquée.
**`denied_gpos` signifie ici « GPO non appliquées »**, et pas uniquement « refus de sécurité ». La liste peut notamment inclure des entrées filtrées, désactivées ou invalides.
La recherche des balises `GPO` est récursive. Les doublons sont éliminés selon le triplet `(nom, version annuaire, version SYSVOL)` ; un même nom peut donc apparaître plusieurs fois si les versions diffèrent. Les entrées sans nom sont ignorées. Les compteurs décrivent les entrées retenues par cet algorithme, pas un inventaire de toutes les GPO du domaine.
**Statuts**
| | |
| - | - |
| **Retour d'audit** | **Situation** |
| `OK` | Export, analyse et enregistrement terminés, même si des GPO non appliquées sont présentes. |
| `ERROR` | Échec de la commande, fichier absent, XML invalide, section machine absente ou autre exception capturée. |
 
En cas d'erreur, la même clé reçoit un objet contenant `status: ERROR` et `message`. Les champs du précédent succès ne sont pas recopiés. Les consommateurs doivent lire `status` avant d'accéder aux listes et compteurs.
Les paramètres d'enregistrement sont `keep_days=365` et `max_count=1`. Aucun statut `WARNING` n'est utilisé dans cette version. Une section `ComputerResults` présente mais sans GPO retenue produit un résultat `OK` avec des compteurs à zéro.
**Déploiement**
1. Copier le `setup.py` fourni dans les sources du paquet existant.
2. Reporter la description dans `WAPT/control` et incrémenter la version selon les conventions du dépôt.
3. Reconstruire, signer et téléverser le paquet.
4. Déployer la version, puis lancer l'audit depuis WAPT.
5. Consulter `audit-gpresult.computer-gpo`.
La fréquence des audits dépend de la configuration WAPT existante ; le script ne crée pas de planification.
**Dépannage et limites de cette version**
- Consulter le journal de l'audit pour connaître l'erreur GPResult ou XML.
- Vérifier l'accès à GPResult, les droits de collecte machine et les données RSoP.
- Le rapport temporaire utilise un nom fixe : `wapt-gpresult-computer.xml` dans `tempfile.gettempdir()`. Éviter des exécutions concurrentes de ce même audit dans le même répertoire temporaire.
- Le nettoyage est tenté dans tous les cas ; un échec de suppression est ignoré et peut laisser le rapport sur disque.
- La collecte restitue les données disponibles, sans forcer leur actualisation.
**Contenu**
- `setup.py` : code fourni, enrichi de commentaires et de docstrings, sans modification de logique.
- `README.md` : fonctionnement, interprétation, prérequis et exploitation.
- `WAPT/description.txt` : ligne de description pour le contrôle existant