Vos ajouts au groupe Domain Admins disparaissent « comme par magie » chaque jour ? Voici un guide complet pour diagnostiquer, corriger et prévenir ce comportement, typiquement causé par un paramétrage Restricted Groups dans une GPO.
Contexte et symptômes
Dans un environnement Active Directory (niveau fonctionnel 2016, contrôleurs de domaine Windows Server 2016 Datacenter et Windows Server 2022 Datacenter Azure Edition), des comptes ou groupes ajoutés manuellement au groupe Domain Admins disparaissent à intervalles réguliers. Le groupe revient à son état initial et, dans l’interface, une ligne déroutante peut apparaître : Domain Admins est membre de Domain Admins.
Cette réinitialisation se produit :
- À chaque actualisation de la stratégie de groupe (Group Policy refresh) ;
- Au redémarrage ;
- Après un
gpupdate
ougpupdate /force
exécuté sur un contrôleur de domaine.
Cause racine
Un paramètre Restricted Groups dans la Default Domain Policy (ou dans une GPO liée au domaine / aux contrôleurs de domaine) force la composition du groupe Domain Admins. Exemple typique :
Computer Configuration
└─ Policies
└─ Windows Settings
└─ Security Settings
└─ Restricted Groups
└─ Contoso\Domain Admins
• Members : Contoso\Domain Admins
• Member of : BUILTIN\Remote Desktop Users
Ce réglage est problématique à double titre :
- La section Members écrase la composition effective du groupe Domain Admins à chaque application de la GPO (toute entrée non listée est supprimée).
- Auto‑référence : « Domain Admins » listé comme membre de lui‑même est un cas d’erreur de modélisation. Il conduit, de fait, à une configuration où les ajouts manuels ne sont jamais conservés et à des affichages incohérents dans les outils.
Comprendre Restricted Groups : Members vs Member Of
Le nœud Restricted Groups offre deux comportements distincts :
- Members : liste autoritaire. Le moteur de sécurité (
secedit
) remplace la composition du groupe ciblé par cette liste exacte. - Member Of : appartenance assurée. Le groupe ciblé est ajouté aux groupes spécifiés (par exemple, ajouter « Domain Admins » à « Administrators » ou « Remote Desktop Users »). Cela n’efface pas sa propre composition interne.
Dans votre cas, la présence de Members : Contoso\Domain Admins
signifie : « le seul membre autorisé de Domain Admins est Domain Admins lui‑même ». Toute autre entrée est supprimée lors du prochain cycle GPO.
Pourquoi ce réglage impacte tout le domaine
Sur des contrôleurs de domaine, il n’existe pas de base de comptes locale : la « base locale » est Active Directory. Lorsqu’un Restricted Groups cible un groupe du domaine et s’applique à des DC, la liste Members modifie directement le groupe AD. Dès lors, la moindre actualisation GPO réimpose l’état déclaré par la GPO.
Rythme de ré‑application
- Postes et serveurs membres : toutes les ~90 minutes (+ aléa jusqu’à 30 min), au redémarrage, et lors d’un
gpupdate
. - Contrôleurs de domaine : par défaut, toutes les ~5 minutes, au redémarrage, et lors d’un
gpupdate
.
Impact sécurité et opérationnel
- Disponibilité : impossibilité de conserver des délégations temporaires (ex. dépannage urgent).
- Traçabilité : succession d’événements 4728/4729 (ajouts/suppressions) générés par
SYSTEM
, source : contrôleur de domaine. - Conformité : configuration « Domain Admins → Remote Desktop Users » inutile et risquée ; les administrateurs disposent déjà, par défaut, du droit « Allow log on through Remote Desktop Services ».
Diagnostic rapide
Méthode graphique via GPMC
- Ouvrez Group Policy Management (GPMC).
- Dans le nœud du domaine, utilisez Search → critère : Settings → Restricted Groups → mot‑clé « Domain Admins ».
- Inspectez chaque GPO trouvée, onglet Settings, section Security Settings > Restricted Groups.
PowerShell – inventaire exhaustif
Générez un rapport XML de toutes les GPO puis recherchez « Restricted Groups » :
# 1) Exporter toutes les GPO en XML
Get-GPO -All | ForEach-Object {
$p = Join-Path $env:TEMP ("{0}.xml" -f $_.Id)
Get-GPOReport -Guid $_.Id -ReportType Xml -Path $p
}
# 2) Rechercher les occurrences « Restricted Groups » ciblant Domain Admins
Get-ChildItem $env:TEMP -Filter *.xml | ForEach-Object {
$xml = [xml](Get-Content -LiteralPath $*.FullName)
if ($xml.DocumentElement.GPO.Computer.ExtensionData.Extension.RG | Where-Object {
$*.Member.Name -match 'Domain Admins' -or
$*.Members.Member.Name -match 'Domain Admins' -or
$*.MemberOf.Member.Name -match 'Domain Admins'
}) {
$_.FullName
}
}
Vérifier la résultante sur un DC
gpresult /SCOPE COMPUTER /H C:\temp\gp.html
# Ouvrir le rapport et vérifier la section Security Settings > Restricted Groups
Observer les journaux de sécurité
Événement | Signification | Où le voir |
---|---|---|
4728 | Ajout d’un membre à un groupe de sécurité global (ex. Domain Admins) | Journaux Sécurité des DC |
4729 | Suppression d’un membre d’un groupe de sécurité global | Journaux Sécurité des DC |
4737 | Modification d’un groupe de sécurité global | Journaux Sécurité des DC |
Solutions et démarches correctives
Voici la procédure recommandée pour corriger la situation et retrouver un fonctionnement prévisible.
Étape | Action | Détails |
---|---|---|
1 | Supprimer ou modifier le nœud Restricted Groups | Ouvrez la GPO fautive (évitez de toucher à la Default Domain Policy). Supprimez l’entrée « Contoso\Domain Admins » OU remplacez‑la par une GPO dédiée si vous avez un vrai besoin d’automatiser certaines appartenances (en privilégiant la section Member Of plutôt que Members). |
2 | Forcer l’actualisation | Sur chaque contrôleur de domaine : gpupdate /force . Attendez un cycle complet (ou validez avec gpresult / la console GPMC). |
3 | Surveiller les futures modifications | Activez l’audit Security Group Management (succès et échecs). Deux options : • Stratégie classique : Computer Configuration → Windows Settings → Security Settings → Local Policies → Audit Policy → Audit Account Management (Succès & Échecs). • Audit avancé : Advanced Audit Policy Configuration → Account Management → Audit Security Group Management (Succès & Échecs). Rappel : l’audit avancé remplace la politique classique lorsqu’il est activé. |
4 | Bonne pratique GPO | N’éditez pas la Default Domain Policy pour des durcissements applicatifs. Créez une GPO dédiée, correctement nommée, documentée, liée au bon OU et filtrée (sécurité/WMI) si nécessaire. |
5 | Alternative plus souple | Pour ajouter des membres sans écraser la composition complète, utilisez Group Policy Preferences → Local Users and Groups avec l’action Add (éviter Replace si vous ne voulez pas forcer une liste figée). |
Exemples concrets de correction
Cas A : vous n’avez pas besoin de piloter « Domain Admins » via GPO
- Supprimez l’entrée Contoso\Domain Admins dans Restricted Groups.
- Appliquez
gpupdate /force
sur tous les DC. - Ré‑ajoutez les membres nécessaires via
Active Directory Users and Computers
ouPowerShell
:Add-ADGroupMember -Identity "Domain Admins" -Members "CONTOSO\Alice","CONTOSO\Grp‑Admins‑T0"
- Confirmez :
Get-ADGroupMember "Domain Admins" | Select-Object Name,SamAccountName
Cas B : vous devez imposer une appartenance « Member Of »
Vous souhaitez, par exemple, garantir que « Domain Admins » est membre de « Administrators » (ce qui est déjà vrai par défaut) ou d’un autre groupe local. Configurez uniquement la section Member Of, pas Members. Cela évite d’écraser la composition interne de « Domain Admins ».
Cas C : besoin d’« ajouts » non destructifs sur des machines
Utilisez Group Policy Preferences → Local Users and Groups avec l’action Add pour ajouter des comptes/groupes au groupe local Administrators ou Remote Desktop Users des postes/serveurs sans remanier des groupes AD sensibles.
Commandes utiles au quotidien
Objectif | Commande |
---|---|
Lister les membres actuels de Domain Admins | Get-ADGroupMember "Domain Admins" -Recursive | Select Name,SamAccountName,objectClass |
Voir qui a changé la composition | Filtrer le journal Sécurité des DC sur 4728/4729/4737 (compte, DC, horodatage) |
Exporter la résultante GPO d’un DC | gpresult /SCOPE COMPUTER /H C:\temp\gp.html |
Retrouver quelles GPO manipulent Restricted Groups | GPMC → Search → Settings contains Restricted Groups • ou script PowerShell (rapport XML) |
Bonnes pratiques pour les groupes à privilèges
- Éviter l’administration « par liste figée » sur Domain Admins. Préférer des groupes « rôles » (ex.
Grp‑Admins‑AD‑T0
) que l’on neste dans Domain Admins quand nécessaire. - Modèle de niveaux (Tier 0/1/2) : isoler les comptes et stations d’administration Tier 0. Restreindre la portée d’usage des comptes à privilèges.
- JIT/JEA/PIM : privilégier l’élévation à durée limitée (PIM, approbation, expiration) plutôt que des appartenances permanentes.
- Journalisation centralisée : expédier 4728/4729/4737 vers un SIEM avec corrélation et alertes en quasi‑temps réel.
- Ne pas empiler des solutions concurrentes : si vous utilisez Restricted Groups, n’appliquez pas en parallèle un GPP Local Users and Groups en mode Replace sur les mêmes cibles.
Erreurs courantes à éviter
- Éditer la Default Domain Policy pour autre chose que les paramètres « de domaine » (verrouillage des mots de passe, Kerberos…). Créez des GPO dédiées.
- Déclarer Members : Domain Admins dans Restricted Groups : cela entraîne la suppression de tout membre non listé.
- Ajouter Domain Admins dans Remote Desktop Users : redondant et élargit la surface d’attaque. Les administrateurs ont déjà le droit RDP via la stratégie de sécurité par défaut.
- Oublier que l’audit avancé remplace l’audit classique : ne mélangez pas les deux.
Procédure de vérification après correction
- Contrôle des GPO : la GPO fautive ne doit plus contenir « Restricted Groups → Domain Admins » avec la section Members.
- Application : exécuter
gpupdate /force
sur tous les DC et attendre un cycle (5 à 10 min typiquement). - Lecture du groupe : vérifier que les membres ajoutés persistent au-delà de plusieurs cycles GPO et d’un redémarrage de DC.
- Journal : confirmer l’absence d’événements 4729 indésirables générés par
SYSTEM
.
Checklist express
- J’ai identifié quelle GPO impose la composition de « Domain Admins ».
- J’ai supprimé/modifié le nœud Restricted Groups problématique.
- J’ai forcé l’application et contrôlé via
gpresult
/ GPMC. - J’ai ré‑ajouté les membres légitimes et validé leur persistance.
- J’ai activé l’audit Security Group Management (succès & échecs) sur les DC.
- J’ai documenté la GPO (naming, but, contact, périmètre) et appliqué le modèle Tier 0.
FAQ rapide
Q : Pourquoi « Domain Admins » apparaît‑il comme membre de lui‑même ?
R : C’est un symptôme d’un paramétrage Restricted Groups erroné (auto‑référence). La GPO tente d’imposer que le seul membre autorisé de « Domain Admins » soit… « Domain Admins ». Les ajouts manuels sont donc systématiquement supprimés.
Q : Je veux juste permettre à certains techniciens de se connecter en RDP sur des serveurs.
R : N’ajoutez pas « Domain Admins » à Remote Desktop Users. Créez un groupe dédié (ex. Grp‑Ops‑RDP‑Serveurs
) et attribuez‑lui l’autorisation (« Allow log on through Remote Desktop Services » via GPO) ou ajoutez‑le au groupe local Remote Desktop Users par GPP (Add).
Q : Comment être alerté dès qu’un membre est ajouté/retiré ?
R : Activez l’audit 4728/4729 (succès & échecs), collectez‑les dans un SIEM et créez des alertes corrélées (ex. ajout de compte « user » dans « Domain Admins » en heures non ouvrées).
Q : Le phénomène revient malgré la suppression dans la GPO.
R : Cherchez d’autres sources en concurrence : une seconde GPO, un GPP en mode Replace, un script de conformité, un outil de gestion de configuration (SCCM/Intune/Ansible), une tâche planifiée sur DC.
Annexe : scripts prêts à l’emploi
Inventaire des GPO ciblant « Restricted Groups »
# Exporter et lister les GPO qui référencent « Restricted Groups »
$reports = Join-Path $env:TEMP "GPOReports"
New-Item -ItemType Directory -Path $reports -Force | Out-Null
Get-GPO -All | ForEach-Object {
$file = Join-Path $reports ("{0}.xml" -f $_.DisplayName.Replace(' ','_'))
Get-GPOReport -Guid $_.Id -ReportType Xml -Path $file
}
"--- GPO contenant 'Restricted Groups' ---"
Get-ChildItem $reports -Filter *.xml | ForEach-Object {
$x = [xml](Get-Content $*.FullName)
$rg = $x.DocumentElement.GPO.Computer.ExtensionData.Extension.RG
if ($rg) { "{0}" -f $*.BaseName }
}
"--- GPO qui touchent 'Domain Admins' ---"
Get-ChildItem $reports -Filter *.xml | ForEach-Object {
$x = [xml](Get-Content $*.FullName)
$rg = $x.DocumentElement.GPO.Computer.ExtensionData.Extension.RG
if ($rg) {
$hit = $false
foreach ($item in $rg) {
if ($item.Member.Name -match 'Domain Admins' -or
$item.Members.Member.Name -match 'Domain Admins' -or
$item.MemberOf.Member.Name -match 'Domain Admins') { $hit = $true }
}
if ($hit) { "{0}" -f $*.BaseName }
}
}
Restauration contrôlée des membres légitimes
# Exemple : définir explicitement un socle minimal (sans utiliser Restricted Groups)
$g = "Domain Admins"
$legit = @("CONTOSO\Grp-Admins-T0","CONTOSO\Alice")
# Ajouts idempotents
foreach ($m in $legit) {
if (-not (Get-ADGroupMember $g -Recursive | Where-Object {$_.SamAccountName -eq ($m.Split('\')[-1])})) {
Add-ADGroupMember -Identity $g -Members $m
}
}
# Contrôle
Get-ADGroupMember $g | Select Name,SamAccountName | Sort Name
Activation d’un audit robuste
# Activer l'audit avancé Account Management (à appliquer via GPO sur l'OU Domain Controllers)
# (à exécuter dans une session GPMC/AGPM ou par modèle de référence)
# Catégories : Audit Security Group Management - Success and Failure
# Vérifier ensuite via : auditpol /get /category:"Account Management"
Informations complémentaires utiles
- Fréquence de ré‑application : ~90 min (+ aléa) sur postes/serveurs membres ; ~5 min sur DC ; à chaque redémarrage ou
gpupdate
. - Interaction audit classique vs avancé : l’Advanced Audit Policy remplace l’Audit Policy classique lorsque configurée.
- Événements clés : 4728 (ajout), 4729 (suppression), 4737 (modification d’un groupe global).
- Sécurité renforcée : adoptez le modèle Tier 0/1/2 pour limiter l’usage de Domain Admins et réduire l’impact d’une GPO mal configurée.
Conclusion
Le « reset » quotidien du groupe Domain Admins n’est pas un bug mais la conséquence d’un Restricted Groups mal employé dans une GPO (souvent la Default Domain Policy). Supprimez ou corrigez ce nœud, appliquez la GPO, rétablissez les membres légitimes et activez une journalisation adaptée. En privilégiant des GPO dédiées, des préférences non destructives et un modèle d’administration à niveaux, vous éviterez les régressions et retrouverez une gouvernance claire des privilèges.