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 :

Besoin d'aide sur exec()


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Besoin d'aide sur exec()
    Bonjour,

    Je voudrais utiliser la fonction exec() qui appel un script.sh sur une page php avec apache sous centos7.
    Après la visite de multiples forums et tutoriels je n'arrive toujours pas régler mon problème.

    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $variable = shell_exec('ls /unfichier/');
    echo "<pre>$variable</pre>";
    ?>
    fonctionne. C'est à dire qu'il me liste le contenu de unfichier.
    Mais dès lors que je veux faire appel à un script plutôt qu'une ligne de commande plus rien ne se passe.
    J'ai déjà joué avec le fichier sudoers pour donner les droits d’exécutions à l'utilisateur apache qui est l'utilisateur qui lance httpd sur centos7 (si je ne dis pas de bêtises).
    Et j'ai déjà désactivé SELinux ainsi que tester avec les accès 777 et 755 au script.sh.
    Tout en lançant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?PHP exec('sudo -u apache /chemin/vers/mon/script.sh');  ?>
    ou encore simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php exec ('/chemin/vers/mon/script.sh'); ?>
    ou encore car le script et le page sont dans le même fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php exec('./script.sh')
    Et j'en passe ...

    Mais je n'arrive toujours pas à lancer un script .sh via la page.php.

    Quelqu'un connaitrais une méthode pour faire fonctionner un script avec exec() via une page php ? Ou si j'ai fais une faute de syntaxe ou si il y a un autre moyen de lancer un script via une page php ?
    Je suis ouvert à toutes propositions.
    PS : j'utilise PHP 5.4.16 il n'y a donc pas de php_safemod et je n'a pas interdit exec ou shell_exec() dans php.ini

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'option -u de sudo sert à indiquer le nom de l'utilisateur qui doit lancer la commande ; donc si tu fais "-u apache" tu ne changes rien.
    Dans ton cas tu n'as pas besoin d'indiquer un utilisateur.

    Pour vérifier l'utilisation qui exécute le serveur, tu peux lancer un exec('whoami'); depuis PHP.

    Pour debuguer, tu peux indiquer un "output" à ton fonction exec() :
    http://php.net/manual/fr/function.exec.php
    Tu verras peut être mieux ce qui se passe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Pour retourne apache.
    C'est pour cela que j'ai écris sudo -u apache [...] Car c'est l'utilisateur apache qui lance le script.
    Mais même sans indiquer d'utilisateur rien ne se passe.

    Et lorsque que j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?PHP exec('/mon/chemin//test.sh',$valeur);
    echo $valeur;  ?>
    Il me retourne Array.

    Pour un exemple d'un script qui créer une clé privé dans le contexte des certificats, j'ai regarder dans les error_log de httpd il m'écrit :

    Sorry, user apache is not allowed to execute '/mon/chemin/cle_prive.sh' as apache on localhost.localdomain
    Pour un exemple d'un script qui créer un fichier il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkdir: cannot create directory 'nomdufichiercreer' : permission denied
    Malgré le fait que j'ai rajouté dans /etc/sudoers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apache ALL=(ALL) NOPASSWD :  /mon/chemin/script.sh
    apache ALL=(ALL) NOPASSWD : /mon/chemin/cle_prive.sh
    Le problème viendrait donc des droits de l'utilisateur apache ? Je continue de creuser à ce niveau mais encore une fois je rafraichis la page régulièrement...
    Si quelqu'un veut abréger ma souffrance en me donnant une solution ...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est pour cela que j'ai écris sudo -u apache [...] Car c'est l'utilisateur apache qui lance le script.
    Ce n'est pas le nom de l'utilisateur qu'on souhaite qu'on indique, pas celui actuel.

    Ton $valeur est un tableau
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec('/mon/chemin/test.sh',$valeur)
    print_r($valeur);
    retourne Array()

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi tu es passé de shell_exec() qui fonctionnait à exec() au fait ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Je ne suis pas vraiment passé de l'un à l'autre en réalité, ne sachant pas pourquoi cela ne fonctionnait pas en utilisant un script je fais des essais avec les deux.
    shell_exec() ou exec() peut importe tant qu'au final j'arrive à utiliser un script.
    Soit disant passant les erreur dans log_erreur sont les mêmes en utilisant shell_exec() ou exec()

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu ajoutes des infos dans tes messages précédents c'est difficile de suivre.

    Dans le dernier code que tu montres, il n'y a plus le sudo.
    Enfin moi, je ne recommanderais pas de donner des droits sudo sans mot de passe à Apache. Donne plutôt les droits d'execution à Apache sur le fichier que tu cibles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Oui plutôt d’inonder le topic c'est vrai que j'update au fur et à mesure pour les nouveaux arrivant désolé
    Sinon j'ai oublié de dire que c'était bon hier mais c’était bien une histoire de droit, j'ai donner les droits à l'utilisateur apache aux fichiers utilisés.

    En vous remerciant.
    Bonne continuation.

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

Discussions similaires

  1. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  2. [D7] Besoin d'aide sur un PChar
    Par bobby-b dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 16h42
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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