none
Start-Process avec Credentials admin de domaine ne fonctionne pas RRS feed

  • Question

  • Bonjour,

    Je rencontre un petit souci.

    Je fais actuellement un script de afin de créer de utilisateurs Active Directory. Ce script est exécuté depuis un formulaire PHP dans lequel 2 champs permettent de mettre son nom d'utilisateur et son mot de passe d'un compte admin du domaine.

    Ces identifiants sont ensuite récupérés en PowerShell afin de créer un process avec des accès admin du domaine pour exécuter tout le script. J'ai besoin de ça car le script se connecte à d'autres machines à distance, fait des modifs... Bref, pas le choix.

    Pour cela, j'utilise Start-Process de la manière suivante :

    $pw= ConvertTo-SecureString $Password -AsPlainText -Force
    $pp = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "MonDomaine\$Username",$pw
    
    Start-Process powershell -Credential $pp -ArgumentList '-noprofile', "-command &{Start-Process powershell  -ArgumentList '-noexit','-noprofile','-File','$script','$arguments' -verb runas}"

    $script et $arguments sont le fichier de script et les paramètres (p.ex C:\file.ps1 -param1 'hello' -param2 'world')

    Sauf qu'au final, quand il se connecte sur les autres serveurs, il me met "Accès refusé", comme si le shell avait pas les accès. Pourtant après un test avec ce code (retourne "true" s'il est admin)

    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    
    $principal = New-Object Security.Principal.WindowsPrincipal $identity
    
    echo $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

    Il me dit qu'il est admin.... Serait-ce un admin local seulement ?

    Merci d'avance

    Dimi'

    mardi 17 octobre 2017 13:50

Toutes les réponses

  • a tu vérifier les stratégies d'exécutions powershell sur le serveurs distant ? "get-ExecutionPolicy -list"

     

    mardi 17 octobre 2017 16:27
  • Attention : Security.Principal.WindowsBuiltinRole, vous checkez la condition "admin locale" pas admin du domaine.

    D'autre part, donner un compte "domain admins" à un script PHP est très risqué (récupération du hash de pass d'un compte à fort privilège, injection de code, etc.). Pour créer un user vous pouvez utiliser un compte lambda et lui déléguer l'autorisation de créer un compte.

    mercredi 18 octobre 2017 06:14
  • Bonjour a tous, 

    je viens compléter l'idée de Loïc Veirman et 6ratgus.

    1. Votre serveur distant doit autoriser l’exécution de script provenant d'autre ordinateur. 
    2. Est-ce-que le PSRemoting est activé sur le serveur distant? 

    La Sécurité est importante, je vous recommanderai de bien prendre en compte le remarque de Loïc Veirman

    Exécuter la commande: 

    Enable-PSRemoting

    sur le serveur distant. 

    Pour plus d'infos consulter Enable-PSRemoting

    Une fois la commande exécuter je vous recommanderai aussi d'utiliser la commande 

    invoke-command

    Pour plus d'infos consulter invoke-command

    C'est aussi mieux de l'executer comme suite 

    powershell -ExecutionPolicy Bypass -File monscript.ps1

    Merci, a+



    S'il vous plaît n'oubliez pas de =Marquer comme réponse= les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution. Héritier KANDOLO. http://www.rootandadmin.com/


    mercredi 18 octobre 2017 06:34
  • Salut 6ratgus,

    Il me donne ça en retour

    Scop                        ExecutionPolicy
    -----                      ---------------
    MachinePolicy              Undefined
    UserPolicy                 Undefined
    Process                    Undefined
    CurrentUser                Unrestricted
    LocalMachine               Unrestricted

    Y'a une erreur ?

    mercredi 18 octobre 2017 09:01
  • Salut Loïc,

    Merci de l'info.

    Pour le compte lambda, ça pourrait être une bonne idée en effet. Il faudrait juste que je lui donne les bons droits, comme créer des dossiers sur des serveurs distants, créer les DFS et partages, créer l'utilisateur Exchange, bref y'a quelques actions qui sont effectuées.

    Mais quoi qu'il arrive, il prend pas les accès admin du domaine.

    J'ai utilisé cette commande :

    ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent())

    et il me parle de "AUTORITE NT\Système", du coup c'est peut-être normal qu'il n'arrive pas à se connecter aux autres serveurs...

    ++

    mercredi 18 octobre 2017 09:06
  • Salut Heritier,

    Merci de tes compléments.

    Le script fonctionne quand je le lance à la main, depuis ma session admin. Du coup c'est pas la connexion aux autres serveurs qui pose problème, mais bien l'utilisateur qu'utilise PHP.

    Je vais approfondir le côté sécurité, merci !

    ++
    Dimi'


    mercredi 18 octobre 2017 09:11
  • Salut Loïc,

    Merci de l'info.

    Pour le compte lambda, ça pourrait être une bonne idée en effet. Il faudrait juste que je lui donne les bons droits, comme créer des dossiers sur des serveurs distants, créer les DFS et partages, créer l'utilisateur Exchange, bref y'a quelques actions qui sont effectuées.

    Mais quoi qu'il arrive, il prend pas les accès admin du domaine.

    J'ai utilisé cette commande :

    ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent())

    et il me parle de "AUTORITE NT\Système", du coup c'est peut-être normal qu'il n'arrive pas à se connecter aux autres serveurs...

    ++

    C'est le compte local. Effectivement, il n'est pas autorisé à se connecter à distance sur un autre système/
    mercredi 18 octobre 2017 10:08