IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

lancer un script shell grâce à php [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut lancer un script shell grâce à php
    Bonjour,
    j'ai écris un petit script en html pour récupérer une variable que je voudrais utilisé ensuite comme argument pour mon script shell je vous met le script en php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $argument=$_POST['argument'];
    $output= shell_exec('./test.sh $argument');
    echo $output;
    ?>
    Mon problème étant que mon script ne s’exécute pas, j'ai beaucoup lu a se sujet et c'est souvent un problème de droit mais j'ai donne tous les droit au répertoire et au script, j'ai même passé l'utilisateur apache en root ( car c'est lui qui exécute le script, j'ai fais un whoami pour le voir). Quand j'execute une commande du style 'ls' cela me donne une sortie mais dès que c'est un script plus rien, j'ai essayé la commande 'exec' au lieu de 'shell_exec' mais rien non plus, ce qui est étrange c'est que quand j’exécute le script depuis le terminal en faisant 'php script.php' cela exécute le script mais quand j'utilise la page web je ne vois plus que une page blanche.

    Merci d'avance de prendre du temps pour m'aider.

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Salut,

    Effectivement c'est très souvent un problème de droits ! Mais puisque tu arrives à exécuter des commandes shell en général et que c'est simplement ton script que tu ne parviens pas à lancer, je pense plutôt que c'est un problème de chemin d'accès au script.
    Comme tu utilises un chemin relatif "./test.sh", cela signifie que le script doit obligatoirement se trouver dans le répertoire courant pour être lancé.
    Quand tu lances le script php manuellement, tu te places j'imagine dans le même dossier que ton script c'est pour ça que tu le trouves et l'exécutes sans problèmes. Mais quand c'est apache qui exécute la commande shell, il ne doit pas avoir comme répertoire courant l'emplacement de ton script mais plutôt le répertoire du binaire d'apache ou quelque chose du genre.
    Pour t'en convaincre essaye simplement de lancer la commande "pwd" pour afficher le répertoire courant utilisé par apache lorsqu'il exécute du shell, par exemple avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $output= shell_exec('pwd');
    echo $output;
    Une autre solution serait d'utiliser le chemin complet vers ton script lorsque tu l'appelles dans le code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /opt/mon/script/test.sh

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Citation Envoyé par Shugo78 Voir le message
    Salut,

    Effectivement c'est très souvent un problème de droits ! Mais puisque tu arrives à exécuter des commandes shell en général et que c'est simplement ton script que tu ne parviens pas à lancer, je pense plutôt que c'est un problème de chemin d'accès au script.
    Comme tu utilises un chemin relatif "./test.sh", cela signifie que le script doit obligatoirement se trouver dans le répertoire courant pour être lancé.
    Quand tu lances le script php manuellement, tu te places j'imagine dans le même dossier que ton script c'est pour ça que tu le trouves et l'exécutes sans problèmes. Mais quand c'est apache qui exécute la commande shell, il ne doit pas avoir comme répertoire courant l'emplacement de ton script mais plutôt le répertoire du binaire d'apache ou quelque chose du genre.
    Pour t'en convaincre essaye simplement de lancer la commande "pwd" pour afficher le répertoire courant utilisé par apache lorsqu'il exécute du shell, par exemple avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $output= shell_exec('pwd');
    echo $output;
    Une autre solution serait d'utiliser le chemin complet vers ton script lorsque tu l'appelles dans le code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /opt/mon/script/test.sh




    Bonjour,

    Merci pour ta réponse mais malheureusement cela n'a pas résolu mon problème j'ai mis le bon chemin et toujours rien j'ai vérifié les droits des répertoire qui sont tous en 777.
    J'ai lu que pour passer l’exécution du script avec une permission root il fallait allez dans le script "/etc/apache2/apache2.conf" mais je n'ai pas ce script et je ne peut donc rien changer à l'utilisateur www-data, mais je me trompe peut être car le propriétaire du script php est apache et quand je fais un whoami la sortie est "apache" faudrais-t-il donc passé apache en root ? ou une chose dans ce genre ?

    Merci encore pour votre aide.

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Hum, enfait il n'est pas vraiment conseillé, ni nécessaire d'exécuter apache avec l'utilisateur root ! Et le fichier de config principal d'apache varie selon les versions ça peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /etc/httpd/httpd.conf
    /etc/apache2/apache2.conf
    Normalement apache doit utiliser son utilisateur (www-data, httpd ou apache2 selon les versions) pour exécuter les scripts, il faut simplement correctement donner les droits d'exécution à apache. Mais comme je te l'ai dis si tu arrives à exécuter des commandes comme "ls" c'est que tu as le droit d'exécuter des scripts en général et que le problème est plus spécifiquement lié à ton script, dans quel dossier est-il ? dans /var/www/qlqchose ?

    Si tu penses que tous les droits sont bons (777 c'est pas vraiment "bon" mais en tout cas ça devrait marcher ), il y a peut être un problème avec SELinux, déjà SELinux est il activé sur ta machine ? Que renvoit la commande suivante :

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Citation Envoyé par Shugo78 Voir le message
    Hum, enfait il n'est pas vraiment conseillé, ni nécessaire d'exécuter apache avec l'utilisateur root ! Et le fichier de config principal d'apache varie selon les versions ça peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /etc/httpd/httpd.conf
    /etc/apache2/apache2.conf
    Normalement apache doit utiliser son utilisateur (www-data, httpd ou apache2 selon les versions) pour exécuter les scripts, il faut simplement correctement donner les droits d'exécution à apache. Mais comme je te l'ai dis si tu arrives à exécuter des commandes comme "ls" c'est que tu as le droit d'exécuter des scripts en général et que le problème est plus spécifiquement lié à ton script, dans quel dossier est-il ? dans /var/www/qlqchose ?

    Si tu penses que tous les droits sont bons (777 c'est pas vraiment "bon" mais en tout cas ça devrait marcher ), il y a peut être un problème avec SELinux, déjà SELinux est il activé sur ta machine ? Que renvoit la commande suivante :
    Mon script est dans /home/osboxes/script.sh et mon script php dans /var/www/html/,
    et la commande getenforce me renvoie "Enforcing".

  6. #6
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Bon merci énormément pour ton aide c’était bien un problème de SELinux, je l'ai passe en "permissive" via la commande "sudo setenforce 0" et mon script s'execute enfin sur la page web.

    Mais j'aurais encore une dernière question comment pourrais-je executer mon script avec un argument ? mon script a besoin d'un argument car il va faire une recherche sur plusieurs fichier pour afficher la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $argument=$_POST['argument'];
    $output=shell_exec('/home/osboxes/script.php $argument');
    echo $output;
    Ici quand j'éxécute mon script il ne prend pas en compte l'argument, il m’exécute seulement le programme.



    Encore merci.
    Matteo

  7. #7
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Ok cool !
    Effectivement SELinux est souvent assez fourbe on n'y pense pas toujours.
    Mais de la même manière que mettre les droits en 777 sur les dossiers ce n'est pas vraiment très propre, désactiver SELinux n'est pas non plus une façon très élégante de résoudre le problème.

    Tu peux simplement activer une variable SELinux pour autoriser l'exécution, avec la commande suivante par exemple tu devrais pouvoir exécuter ton script même avec SELinux activé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setsebool httpd_execmem on
    Et si ton script doit écrire dans un dossier il faut changer également le contexte de sécurité du dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chcon -R -t httpd_sys_rw_content_t /var/output/script/...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer un script shell avec php
    Par jojo971 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 12/10/2010, 10h15
  2. lancer un script shell sur un serveur distant avec php
    Par MSM_007 dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2010, 11h32
  3. Réponses: 4
    Dernier message: 28/02/2007, 15h24
  4. [Système] Lancer un script shell
    Par wappyboy dans le forum Langage
    Réponses: 21
    Dernier message: 26/09/2006, 16h07
  5. [Système] Lancer un script perl avec PHP
    Par pepite dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo