[RESOLU] Exécution script python via page web

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

[RESOLU] Exécution script python via page web

Message par Xorax » dim. 12 nov. 2017 19:09

Bonjour à tous,

j'ai depuis peu acquis un Raspberry PI et étant un débutant sur linux j'éprouve quelques difficultés. Notamment pour exécuter un script python via une page web, je m'explique :
Je souhaite gérer la position d'un servomoteur via un script php qui appellerai un script python. Pour m'exercer je souhaite donc pour le moment simplement allumer une LED depuis une page php.

J'ai donc installé mon serveur apache 2, placé le script python (test.py) suivant dans le répertoire /var/www/html :

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, GPIO.HIGH)
time.sleep(5)
GPIO.cleanup()


Mon script php ('servo.php') appelant le programme est le suivant et lui aussi dans le répertoire /var/www/html :

<?php
echo exec('whoami');
exec('sudo python /var/www/html/test.py');
exit();
?>


Lorsque j'exécute mon programme python depuis le raspberry avec la commande 'sudo python /var/www/html/test.py', pas de soucis ma LED s'allume bien.
Mais lorsque sur mon PC sur le même réseau local je souhaite exécuter mon script php via "adresseIPraspberry\servo.php" ma LED ne s'allume pas mais j'ai bien le résultat de ma commande "whoami" : www-data

En cherchant sur internet, j'ai été amené à changer les droits sur mon fichier test.py qui sont maintenant les suivants : -rwxrwxrwx 1 pi pi (En changeant pi par www-data le problème est le même).
J'ai également ajouté la ligne suivante dans mon fichier /etc/sudoers : www-data ALL=(ALL) NOPASSWD : /var/www/html/test.py dans la section #User privilege specification
Mais rien de nouveau.

Plus étrange, lorsque je remplace mon script python par un simple "print('test')" et en ajoutant "echo" devant ma commande exec de mon script php, le 'test' s'affiche bien comme si mon script python était bien exécuté.
J'ai donc essayé d'ajouter des print un peu partout dans mon programme test.py et ils s'affichent correctement jusqu'à la ligne "GPIO.setup(16, GPIO.OUT)".

J'ai déjà fait pas mal de recherches et ne comprend pas vraiment d'où pourrait venir le problème (bibliothèque GPIO inaccessible depuis user www-data ?).
Merci d'avance pour votre aide.
Modifié en dernier par Xorax le dim. 12 nov. 2017 20:24, modifié 1 fois.

jelopo
Messages : 84
Enregistré le : mer. 11 oct. 2017 10:23

Re: Exécution script python via page web

Message par jelopo » dim. 12 nov. 2017 19:17

Bonjour,

Belle présentation, on comprends très bien où tu en es dans ton problème :geek: . Je pense que tu es très prêt du résultat.
En fait tu lance en sudo "python" et non test.py. Puisque tu as mis le shebang python dans ton script qui est en plus exécutable, essaies de voir si ce serait pas un poil mieux de lancer ton script comme ceci :

Code : Tout sélectionner

sudo /var/www/html/test.py
A+

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: Exécution script python via page web

Message par Xorax » dim. 12 nov. 2017 20:22

Bonjour Jelopo et merci pour ta réponse rapide !
J'ai essayé ta solution et tu avais vu juste ! Le script s'exécute maintenant correctement depuis ma page php. Merci beaucoup !

Pour ma culture personnelle :
Si j'ai bien compris la commande "sudo /var/www/html/test.py" va exécuter mon fichier et celui-ci avec l'en-tête va comprendre que c'est un fichier à exécuter avec le programme python ?
Pourquoi cette commande ne fonctionne pas sur le raspberry directement, sans utiliser ma page php ?
La commande "sudo python ...." aurait-elle pu être utilisée sur ma page php si l'utilisateur www-data avait les droits d'exécution sur le logiciel python ou quelque chose du genre ?

jelopo
Messages : 84
Enregistré le : mer. 11 oct. 2017 10:23

Re: [RESOLU] Exécution script python via page web

Message par jelopo » dim. 12 nov. 2017 21:13

Bonjour,
Si j'ai bien compris la commande "sudo /var/www/html/test.py" va exécuter mon fichier et celui-ci avec l'en-tête va comprendre que c'est un fichier à exécuter avec le programme python ?
Oui c'est ça, "sudo" dit d’exécuter ce qui suit avec les droits root. Comme tu l'as vu, il faut aussi autoriser l'utilisateur au sudo dans /etc/sudoers pour restreindre les utilisateurs à ne pas faire n'importe quelle commande en tant que root.
Pourquoi cette commande ne fonctionne pas sur le raspberry directement, sans utiliser ma page php ?
La page PHP est fournie par un service web (apache). Apache ne sais pas lancer directement un exécutable, heureusement d'ailleurs tu imagines les dégâts qu'on pourrait faire si on avait accès aux commandes des serveur web !
La commande "sudo python ...." aurait-elle pu être utilisée sur ma page php si l'utilisateur www-data avait les droits d'exécution sur le logiciel python ou quelque chose du genre ?
C'est à essayer d'ajouter /usr/bin/python dans /etc/sudoers. Mais attention au big trou de sécurité, du coup l'utilisateur www-data pourrais lancer tous les scripts Python de la machine.

L'utilisation des droits root doit être mise en place de façon la plus restreinte possible. C'est potentiellement un trou de sécurité. C'est pour cela qu'il est judicieux de ne paramétrer que ce qu'il est nécessaire. Avant d'être parano sur des pirates qui voudraient détenir des informations confidentielles sur nos programmes, (ce qui existe bien sûr), il est déjà bon de se protéger de soit même et de nos propres erreurs car on est certainement la plus grande source de problème de nos systèmes !

A+

nexen
Raspinaute
Messages : 175
Enregistré le : lun. 29 sept. 2014 13:58

Re: [RESOLU] Exécution script python via page web

Message par nexen » dim. 12 nov. 2017 21:28

meme si c'est résolu : http://www.framboise314.fr/une-interfac ... rry-pi-12/

François il est comme ducros ;)

dyox
Raspinaute
Messages : 457
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: [RESOLU] Exécution script python via page web

Message par dyox » dim. 12 nov. 2017 21:37

Bonsoir,

Depuis quelque temps déjà, on a plus besoin d'être en root pour interagir avec les gpio donc la commande "exec('/var/www/html/test.py');" devrait fonctionner.
Débutant sous RPi / linux
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (liste de liens utiles)

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: [RESOLU] Exécution script python via page web

Message par Xorax » lun. 13 nov. 2017 11:38

Bonjour tout le monde et merci pour vos réponses !


Superbes explications Jeloppo ! Je comprend déjà mieux le monde de linux et les contraintes de sécurité. Merci de ton aide.


[quote="nexen"]meme si c'est résolu : http://www.framboise314.fr/une-interfac ... rry-pi-12/
François il est comme ducros ;)[/quote]

Oui j'avais jeté un œil à cet article mais il est un peu différent de ce que je voulais faire (pas de script python ici).


[quote="dyox"]Bonsoir,
Depuis quelque temps déjà, on a plus besoin d'être en root pour interagir avec les gpio donc la commande "exec('/var/www/html/test.py');" devrait fonctionner.[/quote]

C'est bon à savoir ! Je testerai.

Répondre

Retourner vers « Python »