[Python/PHP] - Lancement script python à partir d'un serveur Apache2  [RESOLU]

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
Evosub
Messages : 5
Enregistré le : lun. 24 juin 2019 08:46

[Python/PHP] - Lancement script python à partir d'un serveur Apache2

Message par Evosub » lun. 24 juin 2019 09:00

Bonjour,

Je cherche à lancer un script python sur mon raspberry à partir d'un serveur Web.
Le serveur web est sur : Apache/2.4.25 (Raspbian)


Je positionne le php dans /var/www/evo/Camon.php
Le code du php :

exec('python /var/www/html/cgi-bin/Camon.py')

Je positionne le script dans /var/www/html/cgi-bin/script.py
Le script :

#!usr/bin/python
import os
os.system('sudo /home/pi/Domo/Scripts/433Utils/RPi_utils/./codesend XXXXXXX -l 200')


Si j'execute le script via : sudo /home/pi/Domo/Scripts/433Utils/RPi_utils/./codesend XXXXXXX -l 200 dans le terminal sur le raspberry le script fonctionne.
En revanche via le serveur web, rien ne se passe.

J'ai aussi essayé dans le code php de mettre :
sudo /var/www/html/cgi-bin/Camon.py

Le résultat est le même rien ne se passe.
Après plusieurs heures de recherche sur le net, j'en arrive à la conclusion qu'il s'agit d'une question de droit.

Je suis perdu entre les utilisateurs root, www-data, la modification des fichier de configuration apache etc. J'ai l'impression de foutre en l'air mon serveur à force de bidouiller sans savoir exactement ce que je fais.
J'ai essayé de faire sudo chown -R root:www-data /var/www --> le problème persiste
J'ai tenté de suivre la directive à partir de ce lien : https://stackoverflow.com/questions/914 ... in-apache2


edit file /etc/apache2/conf-enables/serve-cgi-bin.conf

====comment old section and add code below:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AddHandler cgi-script .py
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>




edit file /etc/apache2/apache2.conf ***add code below:

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

<Directory /usr/local/apache2/cgi-bin>
Require all granted
</Directory>

Rien à faire...

Quelqu'un peut-il m'aider ?

Evosub
Messages : 5
Enregistré le : lun. 24 juin 2019 08:46

Re: [Python/PHP] - Lancement script python à partir d'un serveur Apache2  [RESOLU]

Message par Evosub » lun. 24 juin 2019 09:30

J'ai trouvé grâce au lien suivant : https://askcodez.com/executer-un-script ... e-php.html

sudo nano /etc/sudoers

puis ajouter :

pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: [Python/PHP] - Lancement script python à partir d'un serveur Apache2

Message par domi » lun. 24 juin 2019 09:31

Bonjour,

Il y a effectivement un problème de droit, mais je ne pense pas que le problème soit dans ton "www".
Je vois deux problèmes possibles à vérifier :
  1. Tu exécutes un script qui se trouve dans le homedirectory de "pi" : "/home/pi/Domo/Scripts/......". Il faut vérifier si l'utilisateur "www-data" y a accès. Ce qui m'étonnerai puisque c'est le homedirectory d'un utilisateur, il faut donc déplacer ce script.
  2. Tu lances via le script PHP une commande "SUDO", est-ce que le sudoers a été configuré afin que www-data puisse utiliser cette commande via sudo. Attention à bien restreindre au strict minimum le sudo de ww-data, surtout si le Rpi est accessible depuis internet, car c'est donner les droits ROOT via internet sans mot de passe.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: [Python/PHP] - Lancement script python à partir d'un serveur Apache2

Message par domi » lun. 24 juin 2019 09:41

Evosub a écrit :
lun. 24 juin 2019 09:30
sudo nano /etc/sudoers
Même si cela semble être la même chose, il est préférable d'utiliser la commande "sudo visudo" plutôt qu'éditer directement le script.
Evosub a écrit :
lun. 24 juin 2019 09:30
www-data ALL=(ALL) NOPASSWD: ALL
Je viens de le dire ci-dessus, c'est justement ce qu'il ne faut pas faire.
Ne pas mettre ALL après NOPASSWD, mais uniquement la ou les commandes nécessaire.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: [Python/PHP] - Lancement script python à partir d'un serveur Apache2

Message par Artemus24 » mer. 26 juin 2019 09:27

Salut à tous.

On ne peut pas lancer un script à partir du serveur apache.
Sauf si l'on vient modifier la procédure qui lance apache.
L'intérêt est limité voire même inexistante.

Il faudrait définir l'action qui va provoquer le lancement de votre script ?

Peut-être en cliquant sur un bouton dans une page web ?
Dans ce cas, c'est du CGI que l'on peut associer à du perl, par exemple.
Apache est configurable pour gérer du CGI.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Evosub
Messages : 5
Enregistré le : lun. 24 juin 2019 08:46

Re: [Python/PHP] - Lancement script python à partir d'un serveur Apache2

Message par Evosub » jeu. 27 juin 2019 18:33

Merci pour vos réponses, je prends notes et je vais voir pour modifier tout ça.

Répondre

Retourner vers « Python »