Impossible de se connecter à un contrôleur de domaine Windows Server 2022 (console/RDP) : GPO, droits Deny et remédiation pas‑à‑pas

Après la promotion d’un contrôleur de domaine Windows Server 2022, aucune ouverture de session (console ou RDP) n’est possible pour les administrateurs. Voici un guide pas‑à‑pas, fortement orienté GPO et sécurité, pour diagnostiquer, corriger et prévenir ce blocage.

Sommaire

Contexte et périmètre

  • Forêt et domaine uniques, niveau fonctionnel 2016.
  • Quatrième DC : les trois premiers tournent sous Windows Server 2019 et fonctionnent normalement.
  • Promotion du nouveau DC 2022 réussie, réplication AD saine, mais impossibilité de se connecter avec des comptes du groupe Domain Admins (console & RDP).

Symptômes observés et constats

Outil / vérificationRésultat
RSOP / gpresultAucune définition pour « Allow log on locally » ni « Allow log on through Remote Desktop Services ». On s’attend donc au comportement par défaut (groupe Administrators autorisé).
Journaux de sécuritéAbsence d’événements 4624 pour les logons Interactive et RemoteInteractive (présents sur les autres DC). Selon l’audit configuré, on peut voir des 4625 avec SubStatus 0xC000015B (« le type de connexion demandé n’est pas accordé à cet utilisateur sur cet ordinateur »).
repadmin /showreplAucune erreur de réplication AD.
secedit /exportPrésence d’entrées Deny log on locally / Deny log on through Remote Desktop Services héritées d’un GPO « serveurs membres », jamais annulées (tatouage).

Analyse : pourquoi cela arrive-t‑il ?

Dans Windows, les User Rights Assignment (Attribution des droits utilisateur) appliqués via GPO peuvent tatouer la base de sécurité locale : si un GPO qui définit un droit est ultérieurement retiré et qu’aucun autre GPO ne redéfinit ce droit, l’ancienne valeur reste active. C’est particulièrement critique avec les droits de type Deny, car Deny > Allow : un droit Deny l’emporte toujours, même si l’utilisateur appartient à un groupe autorisé par un droit Allow.

Sur un contrôleur de domaine, l’absence d’un « Allow » explicite n’est pas forcément bloquante, car les valeurs par défaut suffisent souvent (au minimum Administrators). En revanche, toute présence d’un Deny ciblant les administrateurs (directement ou via un groupe transitif) bloque la connexion en console (Interactive) ou via RDP (RemoteInteractive).

Correspondance des droits côté stratégie

Droit (UI)Constante LSA / INFType de logon concernéEffet
Allow log on locallySeInteractiveLogonRightInteractive (console)Autorise l’ouverture de session sur la machine.
Deny log on locallySeDenyInteractiveLogonRightInteractive (console)Refuse quelle que soit l’appartenance aux groupes autorisés.
Allow log on through Remote Desktop ServicesSeRemoteInteractiveLogonRightRemoteInteractive (RDP)Autorise la connexion RDP.
Deny log on through Remote Desktop ServicesSeDenyRemoteInteractiveLogonRightRemoteInteractive (RDP)Refuse toute connexion RDP.
Deny access to this computer from the networkSeDenyNetworkLogonRightNetworkPeut bloquer d’autres parcours (scripts, accès SMB lors du profil itinérant, etc.).

À retenir : sur un DC, un Deny appliqué historiquement par un GPO « serveur membre » peut survivre à la promotion et neutraliser tout accès, même si la réplication AD est parfaite et que les groupes sont corrects.

Procédure de résolution (recommandée)

Créer un GPO dedicated DC qui écrase explicitement les Deny

  1. Dans la GPMC (Gestion des stratégies de groupe), créez un GPO nommé par exemple “Baseline DC – Logon Rights”.
  2. Éditez-le : Configuration ordinateur ▸ Paramètres Windows ▸ Paramètres de sécurité ▸ Stratégies locales ▸ Attribution des droits utilisateur.
  3. Définissez (cocher « Définir ce paramètre de stratégie ») et laissez volontairement vide les entrées suivantes pour supprimer tout tatouage :
    • Deny log on locally (SeDenyInteractiveLogonRight)
    • Deny log on through Remote Desktop Services (SeDenyRemoteInteractiveLogonRight)
    • Évaluez aussi : Deny access to this computer from the network (SeDenyNetworkLogonRight), si un durcissement antérieur a pu affecter vos DC.
  4. Définissez explicitement les Allow (liste minimale, à adapter à votre politique) :
    • Allow log on locally (SeInteractiveLogonRight) : au minimum Administrators.
    • Allow log on through Remote Desktop Services (SeRemoteInteractiveLogonRight) : au minimum Administrators (évitez d’ajouter Remote Desktop Users sur un DC, sauf besoin justifié et contrôlé).
  5. Liez ce GPO à l’OU Domain Controllers. Placez-le en tête si d’autres GPO de sécurité y sont également liés. Inutile d’« Enforcer » dans la plupart des cas.
  6. Actualisez la stratégie : gpupdate /force ou depuis une console d’admin : Invoke-GPUpdate -Computer "NOM-DC2022" -Target Computer -RandomDelayInMinutes 0

Une fois appliqué, le Deny résiduel est écrasé. Les ouvertures de session console et RDP fonctionnent généralement immédiatement.

Alternative de récupération (locale) si vous êtes complètement verrouillé

Si aucune session distante n’est possible et qu’aucun autre DC ne peut pousser un GPO :

  1. Démarrez en DSRM (Directory Services Restore Mode) avec le mot de passe DSRM défini lors de la promotion.
  2. Ouvrez une console administrateur et réinitialisez la base de sécurité locale via l’INF par défaut des DC : secedit /configure /db secedit.sdb /cfg %windir%\inf\defltdc.inf /overwrite /quiet shutdown /r /t 0
  3. Après redémarrage en mode normal, connectez‑vous avec un compte Domain Admins et appliquez ensuite la méthode par GPO (solution durable).

Vérifications détaillées

Exporter et lire la configuration de sécurité effective

mkdir C:\Temp -Force
secedit /export /cfg C:\Temp\dc-security.cfg
notepad C:\Temp\dc-security.cfg

Cherchez les lignes :

SeDenyInteractiveLogonRight = ...
SeDenyRemoteInteractiveLogonRight = ...
SeInteractiveLogonRight = ...
SeRemoteInteractiveLogonRight = ...
SeDenyNetworkLogonRight = ...

Si l’une des lignes SeDeny* contient un SID/groupe inattendu (par exemple un groupe global des serveurs membres, Guests, etc.), vous avez l’explication du blocage.

Exemples de codes d’erreur et d’événements utiles

SourceIndicateurInterprétation
Security Log4625 / SubStatus 0xC000015BL’utilisateur n’a pas le droit de se connecter via ce type (console/RDP) sur ce poste.
Security LogAbsence de 4624 (Interactive/RemoteInteractive)Le logon est refusé avant l’émission d’un succès.
gpresult /hParamètres non définis pour Allow*Pas bloquant en soi ; ce sont les Deny « tatoués » qui causent l’échec.

Exemples prêts à l’emploi

INF « propre » pour neutraliser les Deny et rétablir un minimum d’Allow

Créez un fichier C:\Temp\dc-logon-fix.inf avec :

[Unicode]
Unicode=yes

[Version]
signature="$CHICAGO$"

[Privilege Rights]
; Vider tous les Deny susceptibles de bloquer
SeDenyInteractiveLogonRight =
SeDenyRemoteInteractiveLogonRight =
SeDenyNetworkLogonRight =

; Définir un jeu minimal d'Allow (à adapter à votre gouvernance)
SeInteractiveLogonRight = *S-1-5-32-544         ; Administrators (Builtin)
SeRemoteInteractiveLogonRight = *S-1-5-32-544   ; Administrators (Builtin) 

Puis appliquez :

secedit /configure /db C:\Windows\Security\Database\secedit.sdb ^
  /cfg C:\Temp\dc-logon-fix.inf /overwrite /quiet
gpupdate /force

Attention : l’INF agit au niveau local. Conservez ensuite la correction via un GPO lié à l’OU Domain Controllers pour éviter toute régression future.

Script PowerShell d’inventaire rapide des droits

# Exporter la configuration et extraire les entrées clés
$cfg = Join-Path $env:TEMP "dc-security.cfg"
secedit /export /cfg $cfg | Out-Null
$map = @{
  "SeDenyInteractiveLogonRight"      = "Deny log on locally"
  "SeDenyRemoteInteractiveLogonRight"= "Deny log on through RDS"
  "SeInteractiveLogonRight"          = "Allow log on locally"
  "SeRemoteInteractiveLogonRight"    = "Allow log on through RDS"
  "SeDenyNetworkLogonRight"          = "Deny access from the network"
}
Get-Content $cfg |
  Where-Object { $_ -match '^Se(Deny|Remote|Interactive).*=.*' } |
  ForEach-Object {
    $k,$v = $_.Split('='); $k=$k.Trim(); $v=$v.Trim()
    [PSCustomObject]@{ Cle=$k; Intitule=$map[$k]; Valeur=$v }
  } | Format-Table -Auto

Bonnes pratiques de prévention

ActionObjectifMise en œuvre
Segmenter les GPOEmpêcher les GPO « serveurs membres » d’affecter les DC.Lier les GPO de durcissement « Member Server » aux OU idoines ; security filtering excluant Domain Controllers ; WMI filter si nécessaire.
GPO dédié DCGarantir des Allow/Deny explicites et sûrs.GPO Baseline DC – Logon Rights lié à l’OU Domain Controllers, avec listes clairement définies.
Audit post‑promotionDétecter immédiatement un tatouage résiduel.gpresult /h, secedit /export, whoami /priv, contrôle des journaux 4624/4625.
Documenter les droits critiquesStabiliser les baselines et éviter les surprises.Listes approuvées pour Allow et Deny (Se*LogonRight) dans vos standards.
Rappel « Deny > Allow »Éviter les faux positifs lors des analyses.Traiter d’abord les Deny, puis valider les Allow.

Procédure opérationnelle condensée

  1. Constater : échec de logon console/RDP sur le nouveau DC 2022, réplication OK.
  2. Comparer : vérifier qu’un autre DC n’a pas le problème (servira de référence).
  3. Exporter : secedit /export et inspecter SeDeny*.
  4. Corriger :
    • Idéal : créer un GPO dédié DC qui vide les Deny et fixe les Allow.
    • Dépannage local : appliquer defltdc.inf via secedit /configure, puis passer le correctif durable en GPO.
  5. Valider : gpupdate /force, ouverture de session console & RDP, contrôles journaux 4624.
  6. Prévenir : cloisonner GPO « serveur membre », lier un GPO Baseline DC.

Points d’attention sécurité

  • RDP sur DC : limitez le droit SeRemoteInteractiveLogonRight au strict nécessaire (idéalement Administrators uniquement) et couvrez‑le par PAM/Just‑In‑Time si possible.
  • Groupes transverses : un Deny appliqué à un groupe global peut impacter des comptes d’admin via l’appartenance transitive. Inspectez les SIDs listés dans SeDeny*.
  • Ordonnez vos GPO : les GPO de l’OU Domain Controllers doivent contenir explicitement tous les droits logon souhaités. Évitez de « compter » sur les valeurs par défaut sur un DC.
  • Équipes SecOps : coordonnez‑vous lorsque des durcissements étendent les Deny à l’échelle du domaine ; documentez les exceptions DC.

Exemples de listes recommandées (à adapter)

DroitRecommandation minimale sur DCCommentaires
Allow log on locallyAdministratorsOptionnel : Server Operators si besoin opérationnel encadré.
Allow log on through Remote Desktop ServicesAdministratorsÉviter Remote Desktop Users sur un DC, sauf cas d’usage strictement justifié.
Deny log on locally(vide)Ne pas y placer d’administrateurs, ni leurs groupes parents.
Deny log on through RDS(vide)Un Deny ici bloque toute session RDP, même pour Administrators.

Dépannage avancé

Vérifier la résolution des groupes côté LSA

Un Deny peut viser un groupe dont vous ignorez l’adhérence réelle (groupes imbriqués, héritages). Pour visualiser l’appartenance effective de votre compte avant logon interactif, utilisez une session fonctionnelle sur un autre DC :

whoami /groups
whoami /priv

Cela n’affiche pas directement les User Rights, mais aide à repérer un groupe qui serait ensuite listé dans SeDeny* du DC problématique.

Comparer deux DC via PowerShell

$servers = "DC-OK","DC-2022"
$keys = "SeDenyInteractiveLogonRight","SeDenyRemoteInteractiveLogonRight",
        "SeInteractiveLogonRight","SeRemoteInteractiveLogonRight","SeDenyNetworkLogonRight"
$result = foreach($s in $servers){
  $tmp = Join-Path $env:TEMP "$s.cfg"
  Invoke-Command -ComputerName $s -ScriptBlock { param($t) secedit /export /cfg $t | Out-Null } -ArgumentList $tmp
  $lines = Get-Content $tmp | Where-Object { $_ -match '^(Se.*LogonRight)\s*=' }
  foreach($line in $lines){
    $k,$v = $line.Split("="); $k=$k.Trim(); $v=$v.Trim()
    if($keys -contains $k){
      [PSCustomObject]@{ Serveur=$s; Cle=$k; Valeur=$v }
    }
  }
}
$result | Sort-Object Cle,Serveur | Format-Table -Auto

FAQ

Q : Pourquoi mon RSOP ne montre‑t‑il aucun « Allow », alors que je me connecte d’ordinaire sans problème ?
R : Parce que les valeurs par défaut suffisent souvent. Mais si un Deny « tatoué » est présent localement, il bloque même en l’absence d’un Allow explicite.

Q : Un simple unlink du GPO fautif suffit‑il ?
R : Non. Les paramètres de sécurité sont persistants. Il faut écraser la valeur résiduelle (via GPO ou secedit).

Q : Puis‑je tout remettre à zéro avec defltbase.inf ?
R : Sur un DC, utilisez defltdc.inf. defltbase.inf est la base générique et ne reflète pas le rôle DC.

Q : Dois‑je ajouter Remote Desktop Users dans « Allow log on through RDS » sur un DC ?
R : Évitez par défaut. Préférez limiter l’accès RDP aux administrateurs, sous contrôle (JIT/PAM), et consignez les exceptions.

Conclusion

Le blocage d’ouverture de session sur un nouveau contrôleur de domaine Windows Server 2022 est souvent la conséquence d’anciens droits Deny « tatoués » par des GPO de serveurs membres. La remédiation robuste consiste à définir un GPO dédié DC qui vide les Deny et fixe explicitement les Allow nécessaires, puis à prévenir la récidive par une segmentation stricte des GPO et un audit systématique après chaque promotion. En appliquant cette méthode, l’accès console/RDP est rétabli immédiatement et le durcissement reste maîtrisé.


Annexe A : mémo des constantes LSA

ConstanteNom UIContexte
SeInteractiveLogonRightAllow log on locallyConsole
SeDenyInteractiveLogonRightDeny log on locallyConsole
SeRemoteInteractiveLogonRightAllow log on through Remote Desktop ServicesRDP
SeDenyRemoteInteractiveLogonRightDeny log on through Remote Desktop ServicesRDP
SeDenyNetworkLogonRightDeny access to this computer from the networkAccès réseau

Annexe B : commandes utiles

  • gpresult /h C:\Temp\gp.html — Rapport HTML RSOP.
  • secedit /export /cfg C:\Temp\dc-security.cfg — Export des droits locaux effectifs.
  • repadmin /showrepl — Santé de la réplication AD.
  • wevtutil qe Security /q:"Event[System[(EventID=4625)]]" /f:text /c:5 — Derniers échecs de logon.
  • Invoke-GPUpdate -Computer NOM-DC2022 -Target Computer -RandomDelayInMinutes 0 — Rafraîchissement immédiat des GPO.

Annexe C : checklist rapide d’audit post‑promotion

  1. Contrôler réplication AD : repadmin.
  2. Vérifier GPO appliqués : gpresult /h.
  3. Exporter droits LSA : secedit /export, scruter SeDeny*.
  4. Confirmer journaux : 4624 attendus, 4625/0xC000015B si refus.
  5. Appliquer/ajuster le GPO dédié DC si nécessaire.
  6. Documenter dans la baseline sécurité (listes Allow/Deny).

Résumé exécutif : Le problème provenait d’entrées Deny héritées et restées actives malgré le retrait du GPO source. La solution durable : un GPO dédié aux DC qui vide les Deny problématiques et fixe les Allow nécessaires, assorti d’une gouvernance GPO claire pour éviter toute réapparition.

Sommaire