Executer commande linux sous PHP

Discussion dans 'Web, design' créé par Gh0$T, 1 Décembre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    Gh0$T Elite
    Bonjour tout le monde,

    est ce qu'il est possible en PHP d'envoyer au serveur une commande linux.

    PhP stock la commande dans une variable, on clique sur le bouton et hop la commande est envoyée comme si on la tapée dans le shell.


    Merci.
    Gh0$T, 1 Décembre 2006
    #1
  2. Offline
    Bingo Beer Addict
    Bingo, 1 Décembre 2006
    #2
  3. Offline
    Shrekju ex membre
    Shrekju, 1 Décembre 2006
    #3
  4. Offline
    Gh0$T Elite
    Merci,

    Ben en gros je voudrai avoir un champ en text et lorsque je clique sur validé il ecrit un fichier dans /var/spool avec le contenus du texte.

    Simple pour certains peut être mais moi j'ai bcp de mal mais ça devrait tourné d'ici qque semaine ... lol

    En gros j'ai tapé ceci mais ça fonctionne pas des masses :D

    Code:
    <?php
    include ('users.php');
    echo "vous aller envoyer un sms a :  "; 
    print $firstname;
    print $lastname;
    
    <FORM ACTION="escapeshellcmd (FILENAME=/var/spool/sms/outgoing/`date +"%F-%T" | tr ':' '-'`_$mobile.sms && echo -e "To: $mobile\n\n$sms" > $FILENAME)" METHOD="POST">;
    
     Introduisez votre texte maximum 160 char.
     <INPUT TYPE=text NAME=sms>
     <br>
     <INPUT TYPE=submit VALUE="Enovyer le SMS">
    </FORM>
     <P>
    ?>
    
    Gh0$T, 1 Décembre 2006
    #4
  5. Offline
    grosnours ex membre
    Il se passe quoi quand plusieurs utilisateurs envoient un sms à la même seconde ?
    grosnours, 1 Décembre 2006
    #5
  6. Offline
    Gh0$T Elite
    J'ai eu le soucis avec l'autre programme alors j'ai modifier en ajouter dans le nom du fichier le N° du destinataire plus un code.


    Dans ce cas si j'ai simplement mit le n° du destinataire en plus dans le nom du fichier sachant que seul 5 personnes vont travailler avec ce système et qu'il sera quasi impropable qu'elles envoient un sms chacune à la même personne à la même seconde.
    Gh0$T, 1 Décembre 2006
    #6
  7. Offline
    guslinux Gamerz'ien
    Je comprend pas pourquoi tu met toutes la commande dans le champ "action" du form.... Il tu suffirait de faire remplir le formulaire et ensuite une fois que c'est envoyé tu traite comme d'habitude ...

    PS : J'ai aussi un modem GSM sur mon serveur :roll: mais faut encore que je lui mette une carte sim :baille:
    guslinux, 5 Décembre 2006
    #7
  8. Offline
    Gh0$T Elite
    Je devais être mal reveillé, j'ai refait le code en plus claire.

    Le seul soucis que j'ai maitenant, c'est que www-data ne possède pas d'accès en écriture au repertoire /var/spool/sms/outgoing

    Je vous montre ma page php :

    Code:
    <?php
    $mobile =	$_POST['mobile'];
    $sms	=	$_POST['sms'];
    
    $cmd 	= ('FILENAME=/var/spool/sms/outgoing/`date +"%F-%T" | tr '-' '-'`_$mobile_sales.sms && echo -e "To: $mobile\n\n$sms" > $FILENAME');
    
    shell_exec ('$cmd');
    
    
    print("Votre message $sms est bien envoye au $mobile");
    
    
    ?>
    
    J'ai pourtant fait ceci sur le repertoire var/spool

    Code:
    chmod -R a+rwx /var/spool/sms
    
    Mais ça ne change rien
    Gh0$T, 5 Décembre 2006
    #8
  9. Offline
    AssiuM Fan
    et avec un chmod 777 ? c'est bourrin mais bon
    AssiuM, 5 Décembre 2006
    #9
  10. Offline
    Gh0$T Elite
    non plus.


    Est ce que c'est possible que c'est les securité de apache par défaut qui interdise l'accès au répertoire différent de WWW pour les pages web ?
    Gh0$T, 5 Décembre 2006
    #10
  11. Offline
    Loetheri Absent
    Oui, c'est possible. D'ailleurs, il est bien souvent conseillé de restreindre les accès d'Apache sur les serveurs ;)
    Loetheri, 5 Décembre 2006
    #11
  12. Offline
    guslinux Gamerz'ien
    Et si tu placais les sms dans un dossier où apache à full droits, et faire passer un script en tache chron. Le script serait executé en root et déplacerait le fichier généré par www-data dans la zone appropriée ...

    C'est tordu mais avec ca pas de problème de droits ...
    guslinux, 5 Décembre 2006
    #12
  13. Offline
    Gh0$T Elite
    ouech, pq pas mais je vias faire un cron toute les 10 secondes alors ? Ca risque d'être une tâche en plus inutile. Et je sais pas si je peux executer une tache tout les 5 - 10 secondes.


    J'ai vu dans un autre forum qu'il parlait du SELinux. Un fichier de sécurité de linux.

    Apparament je dois modifier une variable dans ce fichier pour authoriser apache a quitter son www
    Gh0$T, 5 Décembre 2006
    #13
  14. Offline
    Shrekju ex membre
    Il ne faut pas s'égarer, www-data n'est pas apache. Du moins, dire www-data ne revient pas à dire apache. www-data est l'utilisateur qui éxecute le daemon apache. Ce qui est limité ce sont les répertoires dont apache permet l'acces depuis le web ou non.

    Ca doit être un bete problème de permissions. Si rien ne va, essaie un symbolic link (ln -s).
    Shrekju, 5 Décembre 2006
    #14
  15. Offline
    guslinux Gamerz'ien
    c'est vrai que si on fais un lien vers le dossier des sms ... dossier dans la zone www, et le dossier du serveur sms est lié au dossier présent dans www
    guslinux, 6 Décembre 2006
    #15
  16. Offline
    Shrekju ex membre
    C'est plus une solution de secours qu'autre chose, il y a un trou de sécurité qd mm. Il faut evidement mettre en place des règles sur ce dossier pour éviter qu'il soit accessible depuis le web.. Sinon pour tester l'access il suffit de te logger en tant que www-data ('su - www-data' je pense) et essayer de parcourir le répertoire. Ensuite jouer avec les permissions jusqu'a ce que ca fonctionne correctement. Ce serait mieux, la solution du symbolic link est plutot pour le développement/solution de secours..
    Shrekju, 6 Décembre 2006
    #16
  17. Offline
    grosnours ex membre
    777 et rwx, c'est pareil.


    Il y a (au moins) un MPM développé pour éviter tous ces problèmes de droit apache: MPM-ITK. Basé sur MPM-PREFORK, c'est sensé être stable et thread-safe. Tout l'intérêt d'MPM-ITK est qu'on peut spécifier un UID:GID par VHOST.


    Pour solutionner le problème sans MPM-ITK ou MPM-PERUSER, il faut que l'user qui fait tourner apache (www-data dans ton cas) aie les bons droits (à coup de chown et chmod) sur le répertoire où il doit écrire et il faut autoriser apache à accéder à ce répertoire (à coup de <Directory> et Allow From dans httpd.conf). La doc relative à apache: http://httpd.apache.org/docs/ .
    grosnours, 10 Décembre 2006
    #17
  18. Offline
    foobar42 Touriste
    bon alors juste comme ça, comme exercice de l'esprit
    avec $mobile="; rm -rf /;"
    ou $sms="; dd if=/dev/zero of=/tmp/pouet bs=1024 count=99999999;"
    ça donnerait quoi ?
    bon, on peut aussi injecter un peu de perl hein, pas de soucis
    foobar42, 15 Décembre 2006
    #18
  19. Offline
    Sebulba Dieu
    Equipe GamerZ.be
    foobar :
    +1 :)
    Moi je ne le dis même plus, dès que je fais un commentaire du genre on me dit que je suis un pinailleur :)
    Sebulba, 15 Décembre 2006
    #19
  20. Offline
    Sebulba Dieu
    Equipe GamerZ.be
    pour reparler du probleme

    Tu devrais convertir les commandes shell (tr ! mon dieu, pourquoi pas awk :) ) en commandes PHP pour clarifier ton script.

    Je ne sais pas débugger un truc pareil : il y a 25 problemes potentiels difficiles a déméler du probleme de permissions éventuel.
    L'imbrication des guillemets, les pipes, l'usage de "&&" sans être escapé du contexte, et l'interpretation de PHP lui même lors de l'affectation de tout cela en string.

    Je renonce a piger cette ligne :gne:

    Ce sheel truc ecrit un bete fichier de deux lignes a un endroit specifique : fais tout ca en PHP. Au final ton script devrait simplement faire une ecriture (avec fwrite); tout ce qui est nettoyage (tr) , mise en forme (date), devrait etre fait en PHP.

    Après on verra peut etre le problème plus clairement ?
    Sebulba, 15 Décembre 2006
    #20
Statut de la discussion:
Fermée.