MLGPO – Exploiter les stratégies locales multiples

I. Présentation

L'idée de cet article est de vous présenter 2 éléments méconnus de configuration d'un poste Windows.

1 - Les stratégies locales multiples (MLGPO) apparues depuis Vista

2 - L'application de GPO en avant-phase ou "sortie-de-boite" (Typiquement via MDT)

 

II. Introduction aux stratégies locales multiples (MLGPO)

Vous connaissez probablement la fameuse stratégie d'ordinateur local, à laquelle on accède via la console "gpedit.msc". Il est vrai qu'en présence d'un domaine Active Directory, son intérêt est moindre, voire inutile.

Cela étant dit, si votre poste est en Workgroup, cela constitue une technique de configuration plus élégante, et surtout une meilleure traçabilité des réglages que des modifications directes du registre.

Cette technique peut également être retenue pour brider les utilisateurs de serveurs mutualisés (TSE, RDS, Citrix…) sans recourir au traitement par boucle de rappel avec refus d'application pour les administrateurs. (Concepts avancés de gestion des GPO dans AD)

Bien, maintenant, pour faire court, un objet de stratégie de groupe, alias GPO, est toujours composé de 2 configurations. L'une destinée à l'ordinateur (soit HKLM) et l'autre à l'utilisateur (soit HKCU). Toutefois, dans le cadre, d'un GPO d'ordinateur local, il n'y a pas de distinction d'utilisateur à ce niveau. Donc tout paramètre défini dans la partie "Utilisateur" affecte tous les utilisateurs de ce poste, y compris l'administrateur 🙂 .

 

A.  Mise en œuvre d'un "GPO d'utilisateur local "

Pour accéder à cette fonctionnalité, en tant qu'administrateur, vous devez exécuter "MMC.exe" puis utiliser le menu "Fichier … Ajouter/Supprimer un composant logiciel enfichable" ou  [Ctrl]+[M]"

Sélectionnez le composant "Editeur d'objets de stratégie de groupe" puis cliquez sur le bouton "Ajouter >".

Dès lors que la fenêtre suivante s'affiche, cliquez sur le bouton "Parcourir".

Ne cliquez surtout pas sur "Terminer" à ce stade, car vous obtiendriez l'équivalent de la console "gpedit.msc" appelée directement.

Sous l'onglet "Utilisateurs", vous devriez voir les différents comptes locaux existants sur le poste en question.

Dans cette fenêtre, apparait également 2 "groupes" locaux :

  • Administrateurs (pas la peine d'expliquer 🙂 )
  • Non-administrateurs (donc tous les utilisateurs qui ne sont pas membre du groupe des administrateurs locaux)

Sélectionnez cette entrée "Non-administrateurs", puis cliquez sur "OK".

Il est possible de définir un GPO pour chaque utilisateur local, mais cela risque de devenir rapidement fastidieux.

Cliquez sur "Terminer", puis sur "OK" pour fermer l'ajout de composants.

Nous obtenons alors quelque-chose du genre suivant :

Vous pouvez constater que seule une "Configuration utilisateur" est proposée.

Maintenant, pour la démonstration, allez sous la rubrique "Modèles d'administration … Panneau de configuration" puis activez le paramètre : "Empêcher l'accès au Panneau de configuration"

Cliquez sur "OK" pour valider puis fermez la console.

Pour tester cette contrainte, fermez la session administrateur en cours puis  ouvrez une session avec un compte d'utilisateur.

Normalement, vous devriez constater la disparition de l'entrée "Panneau de configuration" habituellement affichée dans le menu "Démarrer". Pour vous assurer que la contrainte est bien effective, exécutez "cmd.exe" puis tapez "control.exe". Le message de restrictions suivant doit alors apparaitre.

Avec un compte, membre du groupe local "Administrateur", vérifiez que cette restriction n'est pas effective.

 

B. Détails techniques

Le GPO local est stocké dans le dossier "%WINDIR%\System32\GroupPolicy" sous lequel on trouve un fichier "gpt.ini" et 2 sous-dossiers "Machine " et "User".

Le fichier "gpt.ini"(*1) permet de décrire les identifiant GUID des différentes extensions coté client GPO (Client Side Extension - CSE) alors que les 2 fichiers "registry.pol" contiennent les paramètres définis respectivement dans chaque configuration ordinateur et utilisateur.

(*1) Plus d'information sur http://www.jhouseconsulting.com/2008/08/26/scripting-updates-to-the-gptini-for-the-local-group-policy-39

 

En revanche, les GPO multiples (MLGPO) sont stockées dans le dossier "%WINDIR%\System32\GroupPolicyUsers". Un sous-dossier caché et basé sur l'identifiant de sécurité unique (SID (*2)) est créé afin de distinguer chaque périmètre d'application.

Pour le cas "Non-Administrateurs" que nous venons d'évoquer, c'est le SID du groupe local "Users" qui est utilisé, soit "S-1-5-32-545"

(*2) Plus d'information sur "Well-Known Security Identifiers" : https://technet.microsoft.com/en-us/library/cc978401.aspx

On retrouve sous ce dossier "SID", les fichiers des extensions CSE ainsi qu'un unique sous-dossier "User" et le fichier "registry.pol" contenant les paramètres définis dans la configuration GPO.

Astuce : Pour visualiser le contenu d'un fichier .POL, vous pouvez utiliser l'outil gratuit "polviewer" disponible sur https://sdmsoftware.com/gpoguy/free-tools/library/registry-pol-viewer-utility/

 

III. Export / Import des GPO Locales

A. L'export de GPO Locales

Pour exporter puis importer ces GPO d'un ordinateur à un autre, Microsoft recommande d'utiliser son outillage de sauvegarde/restauration des stratégies locales. Celui-ci est contenu dans le kit gratuit Security Compliance Manager (SCM) qui peut être téléchargé ici : http://go.microsoft.com/fwlink/?LinkId=182512

Notes :

N'oubliez pas de "débloquer" le  fichier téléchargé (cf flux ADS)

Attention, SCM 4.0 ne contient plus l'outil décrit ci-après - Probablement en lien avec le nouvel outil LGPO.exe mais qui ne supporte plus les MLGPO (https://blogs.technet.microsoft.com/secguide/2016/01/21/lgpo-exe-local-group-policy-object-utility-v1-0/ )

 

Commencez par extraire le contenu de l'exécutable vers un dossier temporaire via la commande :

"Security_Compliance_Manager_Setup.exe /x"

Ouvrez ensuite le fichier "data.cab" afin d'extraire le fichier "GPOMSI"

Renommez le fichier en "GPOMSI.msi"

Vous n'avez plus qu'à installer "normalement" ce package sur le poste de préparation.

Une fois installé, cet outil ajoute les raccourcis suivants dans le menu Démarrer d'un poste Windows 7.

Exécutez le lien "LocalGPO Command-line" en tant qu'administrateur.

LocalGPO Tool
____________________
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

LocalGPO - Configures various aspects of a computer's Local Policy

Usage: LocalGPO.wsf {/Path:path to GPO Backup} [/Export] [/Compare] {[/GPOPack:name]}
 LocalGPO.wsf {/ConfigSCE | /ResetSCE | /Restore}

Options:

/Path:{path} : Applies the contents of a GPO Backup to the local policy of a Windows computer.

/Export : Exports Local Policy to a GPO Backup.

/Compare : Compares Local Policy to a GPO Backup.

/GPOPack:{name} : Creates a GPO backup that contains all components required for it to apply itself to the local security policy of a computer. Specifying a name is optional.

/MLGPO:{name} : Applies user settings from a GPO Backup to the specified MLGPO of a Windows computer. Must specify Administrators, Users(Non-Administrators), or a valid account name.

/Restore : Restores Local Policy to the default configuration.

/ConfigSCE : Configures Security Configuration Editor (SCE) to display MSS settings.

/ResetSCE : Restores SCE to default settings.

Examples:

 cscript LocalGPO.wsf /Path:C:\GPObackups\{GPO Backup GUID}
 - Applies the contents of the GPO Backup stored in the specified path to the Local Policy of a Windows computer.

 cscript LocalGPO.wsf /Path:C:\GPObackups /Export
 - Exports a GPO Backup based on the Local Policy configuration to a folder in the specified path.

 cscript LocalGPO.wsf /Path:C:\GPObackups\{GPO Backup GUID} /Compare
 - Compares Local Policy configuration to the contents of a GPO Backup.

 cscript LocalGPO.wsf /Path:C:\GPObackups /Export /GPOPack
 - Creates a GPOPack and stores it in the specified path. GPOPacks can be copied to other computers, and applied by double-clicking GPOPack.wsf.

 cscript LocalGPO.wsf /Path:C:\GPObackups\{GPO Backup GUID} /MLGPO:Users
 - Applies the contents of the GPO Backup stored in the specified path to the specified Multiple Local Group Policy Obect (MLGPO).

 cscript LocalGPO.wsf /Restore
 - Restores the entire Local Policy to its default configuration.

 

Comme vous pouvez le constater l'outil propose de nombreuses options.

Commencez par créer un dossier de travail sur le poste de préparation, tel que "C:\LGPO.bck"

Attention, bien que cet outil puisse importer un GPO local d'utilisateur (MLGPO), il ne permet pas d'en effectuer l'export. En conséquence, vous devrez configurer les paramètres d'utilisateur via la console traditionnelle "gpedit.msc".

Une fois ces réglages effectués, procédez à la sauvegarde via l'outil LocalGPO.wsf comme suit :

cscript LocalGPO.wsf /Path:C:\LGPO.bck /Export /GPOPack:MLGPO

 

Remarque : Je n'ai pas réussi à trouver un outillage ou une méthode officielle pour sauvegarder ou exporter uniquement une stratégie locale d'utilisateur. (Vos propositions sont les bienvenues 🙂 )

Donc, dans l'éventualité où les restrictions appliquées bloqueraient l'administrateur, et particulièrement l'accès à cet outillage 🙁  vous pouvez définir les paramètres dans un "MLGPO  Non-Administrateurs" puis recopier le fichier "GroupPolicyUsers\S-1-5-32-545\User\registry.pol" vers le dossier "User" d'une sauvegarde complète.
Sinon, reportez-vous à la méthode officieuse que je traite ci-après.

 

Exemple de copie du "LGPO Non-Administrateurs" vers la sauvegarde :

L'option "/GPOPack" permet d'obtenir un package autonome permettant d'injecter un GPO local sur un ordinateur sans installation préalable de l'outil. A défaut de stipuler un nom pour ce package, l'outil affecte un identifiant unique GUID.

 

Dans le cas d'une exportation en package "GPOPack", le script d'installation se nomme alors "GPOPack.wsf"

 

Cas particulier des scripts de GPO

L'outil d'import/export que je viens de présenter ne prend pas en charge les  "Scripts".

Au besoin, il faudra les copier manuellement dans les dossiers adéquats (Startup, Shutdown, Logon, Logoff) sans oublier le fichier caché  \Scripts\scripts.ini (chargé de décrire les scripts)

Importance du fichier GPT.ini

Ce fichier décrit principalement les extensions coté client (Client Side Extensions) nécessaires au traitement du GPO. Pour afficher ces extensions CSE et leur identifiant utilisez la commande Powershell suivante :

get-childitem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions" |
   Get-IemProperty |
       Format-Table @{e={$_.PSChildName};l="GUID"},@{e={$_."(default)"};l="CSE Name"},dllname

Une liste de CSE est disponible ici

Pour le cas qui nous intéresse :

  • CSE nécessaires aux scripts de logon/logoff
GUID  Action
{40B66650-4972-11D1-A7CA-0000F87571E3} Scripts (Logon/Logoff) Run Restriction
{42B5FAAE-6536-11d2-AE5A-0000F87571E3} ProcessScriptsGroupPolicy
  • CSE nécessaires au traitement des paramètres utilisateur
GUID  Action
{35378EAC-683F-11D2-A89A-00C04FBBCFA2} Registry Settings
{D02B1F73-3407-48AE-BA88-E8213C6761F1} Tool Extension GUID (User Policy Settings)CSE nécessaires au traitement des paramètres utilisateur

 

B. L'import de GPO Locales

Maintenant que nous disposons d'un package conforme, nous allons voir que l'importation est une simple formalité (ou presque).

Donc pour importer le package du "GPO Local Non-Administrateurs", utilisez la commande suivante à partir du dossier de la sauvegarde :

cscript GPOPack.wsf /MLGPO:Utilisateurs

On peut constater que l'importation est réussie et la présence du dossier (caché)  "S-1-5-32-545" sous "%WINDIR%\System32\GroupPolicyUsers".

En revanche, on constate que les éventuels scripts ne sont pas copiés. Dans ce cas, il faut compléter l'opération par une copie manuelle des scripts dans les répertoires correspondants ainsi que le fichier \Scripts\scripts.ini

Attention : Si vous exécutez un script au sein d'un GPO, il est préférable que le champ "Nom du script" contienne l'interpréteur (tel que wscript.exe ou cscript.exe) et le champ "Paramètres de scripts" renseigne le nom du script (et les éventuelles options de l'interpréteur)

 

C. Ma technique personnelle de gestion d'un MLGPO Non-Administrateurs

Après vous avoir présenté tout ce "bazar", je vais vous exposer une méthode moins académique, et non supporté officiellement, mais qui a fait ses preuves et surtout plus rapide.

  • 1 - Sur le poste source, éditez le "LGPO Non-Administrateurs" via la console MMC, comme évoqué précédemment.
    • a - Configurez les paramètres souhaités via les modèles d'administration
    • b - Ajoutez éventuellement un script de logon ou de logoff
  • 2 - Copiez intégralement le dossier "%windir%\System32\GroupPolicyUsers\S-1-5-32-545" vers un dossier tel que "LGPO-Users\Sources". (N'oubliez pas les fichiers cachés). Vous devriez obtenir un truc du genre :

Dans mon exemple, le contenu de "gpt.ini"

[General]
gPCFunctionalityVersion=2
gPCUserExtensionNames=[{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{D02B1F73-3407-48AE-BA88-E8213C6761F1}][{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B66650-4972-11D1-A7CA-0000F87571E3}{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{D02B1F73-3407-48AE-BA88-E8213C6761F1}]
Version=786432

 

Et le contenu de "scripts.ini"

[Logon]
0CmdLine=wscript.exe
0Parameters=LogonScript.vbs

 

  • 3 - Sur le poste cible, copiez le dossier "LGPO-Users\Sources" vers le dossier "%windir%\System32\GroupPolicyUsers\S-1-5-32-545"

Exemple de fichier "Install.bat"

@echo off
 mkdir c:\Windows\System32\GroupPolicyUsers\S-1-5-32-545
 xcopy .\Sources\*.* c:\Windows\System32\GroupPolicyUsers\S-1-5-32-545\*.* /e /s /y

 

 

IV. Application de stratégies locales via MDT

A. La méthode traditionnelle

Les GPOPacks sont apparus avec le MDT2012 puis, bien que toujours compatibles, les modèles (sous "Templates") ne sont plus proposés dans les versions MDT2013 et suivantes.

https://bcdeployment.wordpress.com/2015/02/01/mdt-astuce-mais-o-sont-passs-les-gpopacks-sous-mdt-2013/

Extrait de la documentation officielle MDT2013 :

GPO Packs do not exist

The Security Compliance Manager (SCM) GPO Packs are not included with MDT 2013. The "Apply Local GPO Package" step (ZTIApplyGPOPack.wsf) will log an entry similar to one of the following:

“The GPO Pack Path – Templates\GPOPacks\ is not valid. The GPO was not applied.”

“Default MDT GPO Pack not present for this operating system.”

WORKAROUND: Create the GPOPacks subfolder under Templates in the deployment share (for example, C:\DeploymentShare\Templates\GPOPacks). Export a GPO backup from SCM or GPMC and then add the following files from SCM:

  • wsf
  • exe
  • sdb

Create a subfolder under GPOPacks and copy this content. Then specify the directory name in the GPOPackPath property in CustomSettings.ini.

Mais l'absence de ces modèles n'est pas critique, surtout que vous savez dorénavant comment créer un "GPOPack" 🙂

1. Séquence de tache

Dans une séquence " Standard Client Task Sequence", sous le groupe de taches "State Restore", doit apparaitre une action conditionnelle "Apply Local GPO Package". Dans le cas contraire, c'est à vous de la recréer :

  • Propriétés
    • Type : Run Command Line
    • Name : Apply Local GPO Package
    • Command line : exe "%SCRIPTROOT%\ZTIApplyGPOPack.wsf"
  • Options (conditions)
    • Task sequence variable ApplyGPOPack not equal NO

 

2. Copie des packages

Créez un sous-dossier "GPOPacks" dans le dossier "Templates" situé à la racine de la structure MDT.

Copiez-y ensuite le(s) dossier(s) correspondants aux exports réalisés avec "LocalGPO.wsf …. /export /GPOPack" (ou une sauvegarde de GPO de domaine réalisée avec GPMC.msc)

Vous pouvez renommer chaque package avec un nom convivial (sans espace, ni accents)

3. Ajout des directives

Dans le fichier de configuration "customsettings.ini", ajoutez les directives suivantes :

ApplyGPOPack=YES
GPOPackPath= Win7SP1-MDTGPOPack-DEMO

 

B. Injection directe du GPO Local "Non-Administrateurs"

Afin de parachever mes propos sur la technique officieuse que je vous ai présentée dans cet article, il ne me reste plus qu'a vous monter comment l'intégrer dans MDT.

Pour cela, il suffit de considérer les fichiers obtenus dans ma présentation comme une application.

Dans la console MDT, sélectionnez la rubrique "Application" puis utilisez le menu "Action … New  Application" ou le menu contextuel.

Choisissez l'option "Application with sources files", puis cliquez sur "Next"

Renseignez un nom dans le champ "Application Name" puis cliquez sur "Next"

Indiquez le chemin du dossier dans lequel vous avez déposé les fichiers, puis cliquez sur "Next"

Indiquez un nom pour le dossier de stockage de ces sources dans le MDT, puis cliquez sur "Next"

Renseignez le champ "Command line" en y indiquant le nom du script de copie "install.bat", puis cliquez 2 fois sur "Next" puis sur "Finish" pour valider.

Ouvrez ensuite la séquence de tache de déploiement, puis sélectionnez l'onglet "Task Sequence".

Sélectionnez la dernière tâche du groupe de taches "State Restore", puis utilisez le menu "Add … General … Install Application"

Dans le champ "Name", entrez un nom distinctif tel que "Apply LGPO Non-Administrators"

Cochez le radio-bouton "Install a single application" puis cliquez sur le bouton "Browse" afin de sélectionner l'application précédemment installée.

Cliquez sur "OK" pour valider et fermer la séquence de tache.

Voilà, c'est terminé.

A vous de jouer !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Christophe Mandin

Consultant/Formateur indépendant en quête de solutions et de moyens alliant efficacement la théorie et la pratique. Fort d’une expérience de plusieurs dizaines années dans l’informatique, j’ai pu apprécier de nombreuses problématiques, développer des qualités rédactionnelles et un esprit de synthèse, tout en me forgeant de solides fondamentaux théoriques, indispensables à toute analyse et mise en œuvre fonctionnelle. Malgré toutes ces années, je ne me lasse pas du plaisir de transmettre mes connaissances en misant sur 3 critères que sont les fondamentaux, la simplicité et le pragmatisme. Bien à vous. Retrouvez-moi sur LinkedIn : Christophe Mandin

Nombre de posts de cet auteur : 32.Voir tous les posts

4 thoughts on “MLGPO – Exploiter les stratégies locales multiples

  • Merci merci merci merci !

    Ca fait des semaines que je me casse les dents a retirer les stratégies avec une manip pour le moins…CHIANTE !
    Cette procédure vas me changer la vie dans les mois qui viennent vraiment MERCI !

    Répondre
  • bonjour,
    encore un article super comme d hab

    Je joue avec le gpo sous ad mais tres peux en local , et ca tombe bien j ai un poste a configurer
    merci it-connect

    Répondre
  • Bonjour,
    merci cet article contient toutes les informations que je cherchais depuis quelques jours.
    Surtout la solution « non officielle » simple et extrêmement efficace.
    Encore merci

    Répondre
  • bonjour,
    super tuto

    auriez vous une version 3.0 a me fournir svppppppppp !?

    help !!?

    merci

    anthony

    Répondre

Répondre à chiconthoa Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.