none
Permissions WMI pour un compte de service RRS feed

  • Question

  • Bonjour,

    J'ai besoin d'autoriser un compte de service (un compte générique, mot de passe fort, pas le droits d'ouvrir de session interactive), à exécuter des requêtes WMI sur l'ensemble des postes clients de mon domaine.

    Aujourd'hui, le seul moyen pour moi est de le mettre administrateur local des postes, et cette solution ne me convient pas.

    Est ce que quelqu'un pourrai m'indiquer, comment autoriser un compte à exécuter des requêtes WMI sur les postes clients d'un domaine, sans donner des permissions d'administrateur locaux ?

    Merci par avance,

    Cordialement,

    Chris.

    lundi 14 décembre 2015 23:09

Réponses

  • Bonjour,

    Il est possible de dédier un compte utilisateur pour faire des requêtes WMI.

    - Créer un compte utilisateur
    - Le rendre membre des groupes locaux "Utilisateurs du journal de performances" et "Utilisateurs du modèle COM distribué" (via GPO par ex)
    - Ouvrir MMC > Controle WMI > Propriété > Onglet Sécurité > Root > Sécurité > Ajouter l'utilisateur et autoriser  les droits "Activer le compte", "Méthode d'éxecution" et "Appel à distance autorisé".

    Cdt,


    Ludovic CHOLLET | Microsoft System Administrator


    mardi 15 décembre 2015 07:59
  • Les droits des namespace WMI ne sont pas administrable par GPO nativement, cependant il vous est possible de créer un script VB ou powershell (chargé par GPO) pour répondre à votre besoin. Méthode chronophage... Je constate que beaucoup d'admin utilise encore WMI :-)

    Je vais essayer de décrire la procédure. En premier lieu vous devez configurer les droits manuellement sur un poste :

    - Ouvrir le composant compmgmt.msc et se rendre dans les propriétés Controle WMI
    - Depuis l'onglet sécurité, sélectionner le namespace souhaité 'en général ROOT ou CIMV2' puis cliquer sur sécurité
    - Ajouter l'utilisateur et définir les droits (voir mon premier post)

    Une fois le poste configuré, l'idée est d'extraire la configuration de votre namespace dans un bon format pour la répliquer sur les autres postes. Pour cela, lancer la commande suivante :

    wmic /namespace:\\root  /output:dacl.txt path __systemsecurity call getSD

    Cette commande génère un fichier nommé dacl.txt ressemblant au code ci-dessous :

    Exécution (__systemsecurity)->getSD()
    Méthode exécutée.
    Paramètres de sortie :
    instance of __PARAMETERS
    {
    	ReturnValue = 0;
    	SD = {1, 0, 4, 128, 148, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 2, 0, 128, 0, 4, 0, 0, 0, 0, 2, 24, 0, 63, 0, 6, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 20, 0, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 19, 0, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
    };


    Ce qui nous intéresse ici c'est le tableau contenant les bytes (la suite de chiffre séparée par un espace et une virgule). Vous devez copier tous le contenu de ce tableau de byte et le coller dans un nouveau fichier contenant le code VB ci-dessous :


    strSD = array(COPIER COLLER LA SUITE DE BYTE ICI)
    
    set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root")
    
    set security = namespace.get("__systemsecurity=@")
    
    nStatus = security.setsd(strSD)


    Une fois le fichier VB créé, il vous suffit de l’exécuter depuis un compte administrateur (ou par GPO) pour configurer la sécurité automatiquement sur vos namespace WMI.

    La partie qui demande un peu plus de détail concernant la suite de byte : Pour qu'elle soit interprété par le script VB, vous devez supprimer les espaces entre les chiffres.

    Le script VB final doit ressembler à quelque chose comme cela :

    strSD = array(1,0,4,128,148,0,0,0,164,0,0,0,0,0,0,0,20,0,0,0,2,0,128,0,4,0,0,0,0,2,24,0,63,0,6,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,20,0,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,19,0,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)
    set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root")
    set security = namespace.get("__systemsecurity=@")
    nStatus = security.setsd(strSD)

    Cdt,


    Ludovic CHOLLET | Microsoft System Administrator



    mercredi 16 décembre 2015 08:13

Toutes les réponses

  • Bonjour,

    Il est possible de dédier un compte utilisateur pour faire des requêtes WMI.

    - Créer un compte utilisateur
    - Le rendre membre des groupes locaux "Utilisateurs du journal de performances" et "Utilisateurs du modèle COM distribué" (via GPO par ex)
    - Ouvrir MMC > Controle WMI > Propriété > Onglet Sécurité > Root > Sécurité > Ajouter l'utilisateur et autoriser  les droits "Activer le compte", "Méthode d'éxecution" et "Appel à distance autorisé".

    Cdt,


    Ludovic CHOLLET | Microsoft System Administrator


    mardi 15 décembre 2015 07:59
  • Bonjour Ludovic et merci pour ta réponse.

    Je vais tester cela très bientot, et je te ferai un retour la dessus.

    Par contre, est il possible de gérer les droits dans WMI pour l'ensemble de mes postes via GPO ?

    Merci par avance pour votre précieuse aide.

    Cordialement,

    Chris.

    mardi 15 décembre 2015 21:17
  • Les droits des namespace WMI ne sont pas administrable par GPO nativement, cependant il vous est possible de créer un script VB ou powershell (chargé par GPO) pour répondre à votre besoin. Méthode chronophage... Je constate que beaucoup d'admin utilise encore WMI :-)

    Je vais essayer de décrire la procédure. En premier lieu vous devez configurer les droits manuellement sur un poste :

    - Ouvrir le composant compmgmt.msc et se rendre dans les propriétés Controle WMI
    - Depuis l'onglet sécurité, sélectionner le namespace souhaité 'en général ROOT ou CIMV2' puis cliquer sur sécurité
    - Ajouter l'utilisateur et définir les droits (voir mon premier post)

    Une fois le poste configuré, l'idée est d'extraire la configuration de votre namespace dans un bon format pour la répliquer sur les autres postes. Pour cela, lancer la commande suivante :

    wmic /namespace:\\root  /output:dacl.txt path __systemsecurity call getSD

    Cette commande génère un fichier nommé dacl.txt ressemblant au code ci-dessous :

    Exécution (__systemsecurity)->getSD()
    Méthode exécutée.
    Paramètres de sortie :
    instance of __PARAMETERS
    {
    	ReturnValue = 0;
    	SD = {1, 0, 4, 128, 148, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 2, 0, 128, 0, 4, 0, 0, 0, 0, 2, 24, 0, 63, 0, 6, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 20, 0, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 19, 0, 0, 0, 0, 2, 20, 0, 19, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0};
    };


    Ce qui nous intéresse ici c'est le tableau contenant les bytes (la suite de chiffre séparée par un espace et une virgule). Vous devez copier tous le contenu de ce tableau de byte et le coller dans un nouveau fichier contenant le code VB ci-dessous :


    strSD = array(COPIER COLLER LA SUITE DE BYTE ICI)
    
    set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root")
    
    set security = namespace.get("__systemsecurity=@")
    
    nStatus = security.setsd(strSD)


    Une fois le fichier VB créé, il vous suffit de l’exécuter depuis un compte administrateur (ou par GPO) pour configurer la sécurité automatiquement sur vos namespace WMI.

    La partie qui demande un peu plus de détail concernant la suite de byte : Pour qu'elle soit interprété par le script VB, vous devez supprimer les espaces entre les chiffres.

    Le script VB final doit ressembler à quelque chose comme cela :

    strSD = array(1,0,4,128,148,0,0,0,164,0,0,0,0,0,0,0,20,0,0,0,2,0,128,0,4,0,0,0,0,2,24,0,63,0,6,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,20,0,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,19,0,0,0,0,2,20,0,19,0,0,0,1,1,0,0,0,0,0,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)
    set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root")
    set security = namespace.get("__systemsecurity=@")
    nStatus = security.setsd(strSD)

    Cdt,


    Ludovic CHOLLET | Microsoft System Administrator



    mercredi 16 décembre 2015 08:13
  • Bonjour Ludovic,

    Merci pour tes excellentes réponses à tester. Je me met le topic dans un coin, que je ressortirai après mes congés pour valider tout ça.

    Cordialement,

    lundi 21 décembre 2015 04:54