runas via exec, shell_exec, proc_open ou autre ?

runas via exec, shell_exec, proc_open ou autre ? - PHP - Programmation

Marsh Posté le 12-04-2011 à 11:41:15    

Bonjour,
 
J'aimerais pourvoir exécuter un fichier PHP (sub_exec.php) en tant qu'un utilisateur existant.
voici la comande fonctionnant parfaitement sous le shell de windows (j'utilise sunar.exe qui me permet d'éviter de tapper le mot de passe) :
 

Code :
  1. C:\Documents and Settings\mageni>runas /env /user:mon_utilisateur@mon_domaine "\"C:\\Program Files\\EasyPHP-5.3.3\\php\\php.exe\" \"C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\tests\\sub_exec.php\"" | "C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp


J'ai essayé via la fonction exec de PHP :

Code :
  1. exec('runas /env /user:mon_utilisateur@mon_domaine "php sub_exec.php" | "C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp',$stdout,$retour);


et j'ai :

Code :
  1. $stdout => Array()
  2. $retour => 1


J'ai essayé via la fonction shell_exec de PHP :

Code :
  1. $stdout = shell_exec('runas /env /user:mon_utilisateur@mon_domaine "php sub_exec.php" | "C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp');


et j'ai :

Code :
  1. $stdout => NULL


J'ai essayé via la fonction proc_open de PHP :

Code :
  1. $descriptorspec = array(
  2.    0 => array("pipe", "r" ),  // // stdin est un pipe où le processus va lire
  3.    1 => array("pipe", "w" ),  // stdout est un pipe où le processus va écrire
  4.    2 => array("file", "C:\\Temp\\error-output2.txt", "a" ) // stderr est un fichier
  5. );
  6. $cwd = 'C:\\Temp';
  7. $process = proc_open('C:\\WINDOWS\\system32\\runas.exe /env /user:mon_utilisateur@mon_domaine "\"C:\\Program Files\\EasyPHP-5.3.3\\php\\php.exe\" \"C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\tests\\sub_exec2.php\"" | "C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp', $descriptorspec, $pipes, $cwd);
  8. if (is_resource($process)) {
  9.     // $pipes ressemble à :
  10.     // 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
  11.     // 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
  12.     // Toute erreur sera ajoutée au fichier /tmp/error-output.txt
  13. //echo "\n-".stream_get_contents($pipes[1])."-";
  14.         //echo "\n-".stream_get_contents($pipes[0])."-";
  15. //fwrite($pipes[1], '"C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp');
  16. //fwrite($pipes[0], '"C:\\Program Files\\EasyPHP-5.3.3\\www\\...\\auth\\runas\\sanur.exe" mdp');
  17. //echo "\n-".stream_get_contents($pipes[1])."-";
  18.         //echo "\n-".stream_get_contents($pipes[0])."-";
  19.     fclose($pipes[0]);
  20.     fclose($pipes[1]);
  21.     // Il est important que vous fermiez les pipes avant d'appeler
  22.     // proc_close afin d'éviter un verrouillage.
  23.     $return_value = proc_close($process);
  24.     echo "La commande a retourné $return_value\n";
  25. }


et j'ai :

Code :
  1. La commande a retourné 1


A chaque fois ça se termine en erreur (retour 1).
 
Une idée ?
 
d'avance merci,
 
Mageni

Reply

Marsh Posté le 12-04-2011 à 11:41:15   

Reply

Marsh Posté le 12-04-2011 à 16:55:15    

Tu fou le user d'apache dans le groupe d'administrateur de ton OS et voilà quoi... :??:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 12-04-2011 à 17:13:00    

Hmmm....
Le truc c'est que j'aimerais pouvoir faire la même action sous différents users en ayant qu'un seul apache de lancé.
Tu pourrais expliquer si on peut via cette manière ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed