Installer le Security Baseline Windows Server 2022 (SCT) : guide complet GPO & local

Tout ce qu’il faut pour installer et déployer le Windows Server 2022 Security Baseline, localement avec Baseline‑LocalInstall.ps1 ou à grande échelle via GPO, en évitant les pièges courants (ADMX/ADML, LGPO, élévation, DC).

Sommaire

Vue d’ensemble du problème

Le Security Compliance Toolkit (SCT) fournit des baselines prêtes à l’emploi pour durcir Windows Server 2022. Pourtant, dans la pratique, plusieurs zones d’ombre reviennent systématiquement : où et comment exécuter Baseline‑LocalInstall.ps1, où placer les fichiers .admx/.adml, comment s’assurer que LGPO.exe est pris en compte, et pourquoi un Access Denied surgit parfois sur un contrôleur de domaine. Ce guide comble ces lacunes en détaillant une méthode fiable pour les serveurs membres et pour les contrôleurs de domaine, avec validation et rollback.

Solutions principales et bonnes pratiques

ÉtapeActionDétails clés
Préparer l’environnementÉlévation & exécution de scriptsOuvrir PowerShell en administrateur et autoriser les scripts :
Set‑ExecutionPolicy RemoteSigned -Scope LocalMachine (ou un niveau adapté à votre politique).
Décompresser le toolkitExtraire le dossier Windows Server‑2022‑Security‑Baseline‑FINAL (ou dernier build).Vous y trouverez Scripts, GPOs, Templates, Tools.
Copier LGPO.exeS’assurer que LGPO.exe (dossier Tools) est aux côtés du script ou dans le %PATH%.LGPO.exe applique localement les stratégies.
Installer localement avec le scriptSe placer dans Scripts puis exécuter :
.\Baseline‑LocalInstall.ps1 -WSMember (membre),
-WSNonDomainJoined (autonome),
-WSDomainController (contrôleur de domaine).
Si Access Denied :
• session PowerShell élevée ;
• politique d’exécution ;
• sur DC, exécuter depuis la console locale avec le switch DC et vérifier le service Group Policy Client.
Gérer les fichiers .admx/.admlPour une GPO centrale : copier Templates\PolicyDefinitions vers le Central Store :
\\<domaine>\SYSVOL\<domaine>\Policies\PolicyDefinitions.
Pour local : %SystemRoot%\PolicyDefinitions.
Les modèles garantissent l’affichage correct des nouveaux paramètres dans GPMC/GPEdit.
Déployer à grande échelleImporter les sauvegardes GPO (GPOs\Backups) dans la GPMC puis lier aux OU cibles.Alternative/complément : Policy Analyzer pour comparer et prouver la conformité.
Tester avant productionValider sur serveur de test ou OU pilote.Certains réglages (durcissement LDAP, restrictions NTLM, désactivation SMBv1, etc.) peuvent impacter des applis héritées.

Prérequis opérationnels

  • Compte administrateur local (installation locale) ou droits GPO Creator Owners/administrateur du domaine (déploiement GPO).
  • UAC désactivé pour l’elevation prompt en console, ou exécution explicite « Exécuter en tant qu’administrateur ».
  • Espace disque : prévoir quelques centaines de Mo pour les sauvegardes LGPO et journaux.
  • Ne pas modifier la Default Domain Policy ni la Default Domain Controllers Policy : créez des GPO dédiées.

Méthode A — Installation locale avec Baseline‑LocalInstall.ps1

Préparer l’hôte

Start-Process PowerShell -Verb RunAs
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# Facultatif : déverrouiller les scripts provenant d’un ZIP
Get-ChildItem .\Scripts\ -Filter *.ps1 -Recurse | Unblock-File
# Vérifier LGPO
$env:Path.Split(';') | Where-Object { Test-Path (Join-Path $_ 'LGPO.exe') } 

Choisir le commutateur adéquat

SwitchCibleEffet
-WSMemberServeur membre joint au domaineApplique la baseline « Member Server » via stratégies locales (LGPO).
-WSNonDomainJoinedServeur autonomeApplique la baseline adaptée aux machines hors domaine.
-WSDomainControllerContrôleur de domaine (sur le DC lui‑même)Durcit un DC selon la baseline dédiée ; à exécuter localement sur le DC.

Exemples de commandes

# Serveur membre
Set-Location .\Windows-Server-2022-Security-Baseline-FINAL\Scripts
.\Baseline-LocalInstall.ps1 -WSMember

# Serveur autonome

.\Baseline-LocalInstall.ps1 -WSNonDomainJoined

# Contrôleur de domaine (console locale)

.\Baseline-LocalInstall.ps1 -WSDomainController

# Bypass ponctuel (processus courant uniquement)

PowerShell.exe -ExecutionPolicy Bypass -File .\Baseline-LocalInstall.ps1 -WSMember 

Bon à savoir : Exécuter le script depuis un partage UNC peut être bloqué par vos politiques (marquage « Zone.Identifier »). Copiez d’abord le dossier du toolkit en local (C:\Temp\SCT\) puis lancez‑le.

Vérifier le résultat immédiat

  • Forcer une actualisation : gpupdate /force.
  • Exporter un rapport : gpresult /h C:\Temp\rapport.html puis ouvrir le fichier pour vérifier les objets « Local Group Policy » appliqués.
  • Audit avancé : auditpol /get /category:* doit refléter les catégories de la baseline.
  • Sécurité locale : secedit /export /cfg C:\Temp\secpol.cfg pour comparer les security options.

Erreurs fréquentes & corrections

  • Access Denied sur DC : exécuter sur la console locale, avec un compte Domain Admin. Vérifier le service gpsvc : Get-Service gpsvc doit être Running.
  • LGPO introuvable : placez LGPO.exe dans le même dossier que le script ou ajoutez son chemin au PATH. Exemple : $env:Path += ';C:\Temp\SCT\Tools'.
  • Exécution de scripts bloquée : Set-ExecutionPolicy RemoteSigned ou lancez avec -ExecutionPolicy Bypass sur le process courant.
  • Échec de copie de fichiers de stratégie : démarrez PowerShell « en tant qu’admin », fermez les consoles GPMC/GPEdit avant l’application (verrous).
  • Paramètres non visibles dans GPEdit : installez les .admx/.adml adaptés (voir section dédiée).

Méthode B — Déploiement centralisé via GPO

Pour un parc entier, la voie royale consiste à importer les GPO prêtes à l’emploi, à les lier sur des OU cibles, et à gérer la portée avec des filtres WMI et/ou des groupes de sécurité.

Créer et alimenter le Central Store

  1. Sur un contrôleur de domaine, créer le répertoire si besoin :
    \\<domaine>\SYSVOL\<domaine>\Policies\PolicyDefinitions
  2. Copier les modèles fournis par le SCT :
    robocopy .\Templates\PolicyDefinitions \\<domaine>\SYSVOL\<domaine>\Policies\PolicyDefinitions /E
  3. Vérifier la présence du sous-dossier de langue (en-US par défaut, éventuellement fr-FR). Sans ressource de langue correspondante, la console peut afficher des GUID au lieu d’étiquettes.

Importer les GPO depuis les sauvegardes

  1. Ouvrir la GPMC, clic droit sur « Objets de stratégie de groupe » > Gérer les sauvegardes > Parcourir vers .\GPOs\Backups.
  2. Restaurer (ou Importer les paramètres dans une GPO nouvellement créée) les objets suivants, par exemple :
    • MSFT Windows Server 2022 – Member Server
    • MSFT Windows Server 2022 – Domain Controller
  3. Renommer clairement vos GPO (ex : Baseline WS2022 – Member / Baseline WS2022 – DC).

Lier les GPO aux bonnes OU

  • Serveurs membres : lier Baseline WS2022 – Member sur l’OU Servers.
  • Contrôleurs de domaine : lier Baseline WS2022 – DC sur l’OU Domain Controllers (ou laisser GPMC gérer le conteneur dédié).

Filtrage et ciblage fin

WMI filters (exemples) :

ScénarioRequête WMICommentaires
Serveurs membres 2022SELECT * FROM Win32_OperatingSystem WHERE Version LIKE '10.0%' AND ProductType = 3 AND BuildNumber >= 20348ProductType=3 = serveur membre. BuildNumber ≥ 20348 cible Server 2022.
Contrôleurs de domaine 2022SELECT * FROM Win32_OperatingSystem WHERE Version LIKE '10.0%' AND ProductType = 2 AND BuildNumber >= 20348ProductType=2 = DC.
Tous serveurs 2022SELECT * FROM Win32_OperatingSystem WHERE Version LIKE '10.0%' AND ProductType >= 2 AND BuildNumber >= 20348DC + membres ; pratique pour une GPO commune.

Filtrage par groupe de sécurité : conservez Authenticated Users en lecture, mais retirez « Appliquer la stratégie » et déléguez ce droit à un groupe « WS2022‑Baseline‑Targets » contenant uniquement les machines concernées.

Ordre et hiérarchie

  • Privilégiez plusieurs GPO ciblées (réseau, navigateur, durcissement OS) plutôt qu’un monolithe difficile à maintenir.
  • Évitez « Appliquer » (Enforced) sauf nécessité. Préférez l’ordre de lien et l’absence d’inheritance blocking intempestif.
  • Ne surchargez pas les GPO par défaut du domaine ; laissez-les propres pour les paramètres essentiels.

Gestion des fichiers ADMX/ADML

Les baselines s’appuient sur des modèles d’administration. Sans .admx/.adml à jour, certains paramètres n’apparaîtront pas dans GPMC/GPEdit.

  • Central Store : placez tous les .admx à la racine de PolicyDefinitions et les .adml dans le sous-dossier de langue (ex. en-US, fr-FR).
  • Local : copiez dans %SystemRoot%\PolicyDefinitions et le sous-dossier de langue correspondant.
  • Si votre environnement est francophone mais que seuls les fichiers en-US sont fournis, vous pouvez les utiliser ; l’UI affichera en anglais mais les clés seront valides.

Validation, audit et conformité

Rapport rapide

gpupdate /force
gpresult /h C:\Temp\baseline-ws2022.html
Start-Process C:\Temp\baseline-ws2022.html

Comparer à l’état attendu

  • Policy Analyzer : compare la configuration observée à la baseline fournie, utile en pré‑prod et pour les audits périodiques.
  • Audit avancé : auditpol /get /category:* doit refléter les catégories activées par la baseline.
  • Journal d’événements : consultez Applications and Services Logs > Microsoft > Windows > GroupPolicy pour les applications et éventuels conflits.

Rollback & exceptions contrôlées

La réversibilité est cruciale, surtout en environnement hétérogène.

  • Avant application locale : sauvegardez les GPO locales : LGPO.exe /b C:\Temp\LGPO-Backup.
  • Restauration locale : LGPO.exe /g C:\Temp\LGPO-Backup.
  • GPO centrale : supprimez/largement désactivez la liaison, ou restaurez depuis Backups via GPMC.
  • Exceptions ciblées : créez une GPO d’« exceptions » appliquée après la baseline pour réactiver un paramètre strict nécessaire à une application legacy (documentez chaque exception).

Checklist de mise en production

ContrôleOK ?Commentaires
Exécution PowerShell en élévation whoami /groups montre Administrators.
ExecutionPolicy ajustée ou Bypass Scope processus ou machine selon votre gouvernance.
LGPO.exe accessible Dans Tools ou le PATH.
ADMX/ADML copiés Central Store ou local ; vérifier le dossier de langue.
Import GPO depuis Backups Nommer et décrire chaque GPO.
WMI filter(s) appliqué(s) Évite d’impacter d’autres versions de Windows Server.
Tests de non‑régression Applications critiques validées (authent, SMB, LDAP, etc.).
Plan de rollback Sauvegarde LGPO + backups GPO en lieu sûr.
Preuve d’application gpresult, auditpol, captures Policy Analyzer.

Bonnes pratiques incontournables

  • Pilote : toujours une OU pilote avec un échantillon représentatif (applications legacy, rôles variés).
  • Segmentation : créez une GPO « Member » et une GPO « DC ». Ne mélangez pas.
  • Journalisation : Start-Transcript avant l’exécution du script pour garder des preuves.
  • Compatibilité : identifiez les paramètres sensibles (LDAP Signing/Channel Binding, restrictions NTLM, durcissement SMB) avant d’élargir le déploiement.
  • Maintenance : surveillez les révisions de baseline après les vagues H1/H2 et planifiez des revues annuelles.

FAQ

Faut‑il exécuter Baseline‑LocalInstall.ps1 avec un compte de domaine ?
Non, pour l’installation locale un administrateur local suffit. Pour le déploiement GPO, des droits sur la GPMC sont requis.

Pourquoi le script échoue‑t‑il sur un DC lancé via RDP ?
Selon les politiques UAC et la session distante, certaines opérations d’écriture de stratégie peuvent être refusées. Lancez‑le depuis la console locale du DC, en élévation.

Dois‑je réinstaller les ADMX sur chaque serveur ?
Non si vous utilisez un Central Store : GPMC lira les modèles depuis SYSVOL. Pour une application locale uniquement, installez les ADMX sur la machine concernée.

Comment limiter la baseline à Windows Server 2022 uniquement ?
Appliquez un filtre WMI avec BuildNumber >= 20348 et Version LIKE '10.0%', ajusté à ProductType selon DC ou membre.

Peut‑on revenir en arrière rapidement ?
Oui : sauvegarde LGPO avant application, et backups GPO côté AD. En cas de problème, restaurez et/lisez la GPO d’exception ciblée.

Annexes : commandes utiles prêtes à copier

# 1) Transcription de session pour audit
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
Start-Transcript -Path "C:\Temp\Baseline-WS2022-$stamp.log"

# 2) Copie ADMX/ADML vers Central Store

$dom = (Get-ADDomain).DNSRoot  # ou remplacez par "contoso.com"
robocopy .\Templates\PolicyDefinitions "\$dom\SYSVOL$dom\Policies\PolicyDefinitions" /E

# 3) Importer la GPO "Member" depuis le dossier Backups

Import-GPO -BackupGpoName "MSFT Windows Server 2022 – Member Server" `  -TargetName "Baseline WS2022 – Member"`
-Path ".\GPOs\Backups"

# 4) Lier la GPO à l’OU des serveurs

New-GPLink -Name "Baseline WS2022 – Member" -Target "OU=Servers,DC=contoso,DC=com" -LinkEnabled Yes

# 5) Filtre WMI (ex : serveurs membres 2022)

# À créer dans GPMC, puis à lier à la GPO

SELECT * FROM Win32_OperatingSystem WHERE Version LIKE '10.0%' AND ProductType = 3 AND BuildNumber >= 20348

# 6) Vérification d’application

gpupdate /force
gpresult /h C:\Temp\baseline-ws2022.html
auditpol /get /category:*

# 7) Sauvegarde / restauration LGPO (rollback)

LGPO.exe /b C:\Temp\LGPO-Backup
LGPO.exe /g C:\Temp\LGPO-Backup

# 8) État du service client de stratégie de groupe

Get-Service gpsvc | Format-List Name,Status

En résumé

Pour déployer le Security Baseline Windows Server 2022 de manière sûre : préparez l’environnement (élévation, ExecutionPolicy), utilisez Baseline‑LocalInstall.ps1 pour les installations ponctuelles (avec -WSMember, -WSNonDomainJoined ou -WSDomainController), puis passez aux GPOs pour un déploiement à l’échelle : Central Store, import des sauvegardes GPO, liaisons sur OU, filtres WMI et groupes de sécurité. Validez avec gpresult et auditpol, gardez un plan de retrait (LGPO et backups GPO), et documentez les exceptions. Cette approche garantit une mise en conformité rapide, reproductible et réversible, autant sur les serveurs membres que sur les contrôleurs de domaine.

Astuce finale : pour prévenir tout « Access Denied » sur DC, exécutez systématiquement le script en console locale élevée, confirmez l’accès en écriture à %windir%\System32\GroupPolicy, et maintenez vos modèles ADMX synchronisés avec la version de la baseline.

Sommaire