Page 1 sur 1

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

Posté : lun. 24 juin 2019 09:00
par Evosub
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 ?

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

Posté : lun. 24 juin 2019 09:30
par Evosub
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

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

Posté : lun. 24 juin 2019 09:31
par domi
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.

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

Posté : lun. 24 juin 2019 09:41
par domi
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.

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

Posté : mer. 26 juin 2019 09:27
par Artemus24
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.

@+

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

Posté : jeu. 27 juin 2019 18:33
par Evosub
Merci pour vos réponses, je prends notes et je vais voir pour modifier tout ça.