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.
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érification | Résultat |
---|---|
RSOP / gpresult | Aucune 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 /showrepl | Aucune erreur de réplication AD. |
secedit /export | Pré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 / INF | Type de logon concerné | Effet |
---|---|---|---|
Allow log on locally | SeInteractiveLogonRight | Interactive (console) | Autorise l’ouverture de session sur la machine. |
Deny log on locally | SeDenyInteractiveLogonRight | Interactive (console) | Refuse quelle que soit l’appartenance aux groupes autorisés. |
Allow log on through Remote Desktop Services | SeRemoteInteractiveLogonRight | RemoteInteractive (RDP) | Autorise la connexion RDP. |
Deny log on through Remote Desktop Services | SeDenyRemoteInteractiveLogonRight | RemoteInteractive (RDP) | Refuse toute connexion RDP. |
Deny access to this computer from the network | SeDenyNetworkLogonRight | Network | Peut 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
- Dans la GPMC (Gestion des stratégies de groupe), créez un GPO nommé par exemple “Baseline DC – Logon Rights”.
- Éditez-le : Configuration ordinateur ▸ Paramètres Windows ▸ Paramètres de sécurité ▸ Stratégies locales ▸ Attribution des droits utilisateur.
- 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.
- Deny log on locally (
- 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é).
- Allow log on locally (
- 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.
- 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 :
- Démarrez en DSRM (Directory Services Restore Mode) avec le mot de passe DSRM défini lors de la promotion.
- 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
- 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
Source | Indicateur | Interprétation |
---|---|---|
Security Log | 4625 / SubStatus 0xC000015B | L’utilisateur n’a pas le droit de se connecter via ce type (console/RDP) sur ce poste. |
Security Log | Absence de 4624 (Interactive/RemoteInteractive) | Le logon est refusé avant l’émission d’un succès. |
gpresult /h | Paramè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
Action | Objectif | Mise en œuvre |
---|---|---|
Segmenter les GPO | Empê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é DC | Garantir des Allow/Deny explicites et sûrs. | GPO Baseline DC – Logon Rights lié à l’OU Domain Controllers, avec listes clairement définies. |
Audit post‑promotion | Détecter immédiatement un tatouage résiduel. | gpresult /h , secedit /export , whoami /priv , contrôle des journaux 4624/4625. |
Documenter les droits critiques | Stabiliser 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
- Constater : échec de logon console/RDP sur le nouveau DC 2022, réplication OK.
- Comparer : vérifier qu’un autre DC n’a pas le problème (servira de référence).
- Exporter :
secedit /export
et inspecterSeDeny*
. - Corriger :
- Idéal : créer un GPO dédié DC qui vide les Deny et fixe les Allow.
- Dépannage local : appliquer
defltdc.inf
viasecedit /configure
, puis passer le correctif durable en GPO.
- Valider :
gpupdate /force
, ouverture de session console & RDP, contrôles journaux 4624. - 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)
Droit | Recommandation minimale sur DC | Commentaires |
---|---|---|
Allow log on locally | Administrators | Optionnel : Server Operators si besoin opérationnel encadré. |
Allow log on through Remote Desktop Services | Administrators | É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
Constante | Nom UI | Contexte |
---|---|---|
SeInteractiveLogonRight | Allow log on locally | Console |
SeDenyInteractiveLogonRight | Deny log on locally | Console |
SeRemoteInteractiveLogonRight | Allow log on through Remote Desktop Services | RDP |
SeDenyRemoteInteractiveLogonRight | Deny log on through Remote Desktop Services | RDP |
SeDenyNetworkLogonRight | Deny access to this computer from the network | Accè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
- Contrôler réplication AD :
repadmin
. - Vérifier GPO appliqués :
gpresult /h
. - Exporter droits LSA :
secedit /export
, scruterSeDeny*
. - Confirmer journaux : 4624 attendus, 4625/0xC000015B si refus.
- Appliquer/ajuster le GPO dédié DC si nécessaire.
- 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.