Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Exécuter un script sh depuis un bouton html
#1

Bonjour,
Je suis actuellement en train de monter un interface web pour pouvoir gérer mon raspberry pi.
Sur mon Raspberry Pi, je possède quelques script sh qui fonctionne très bien. Je souhaite pouvoir lancer ces scripts depuis une page web grâce à un bouton html, par exemple un bouton intitulé "redémmarrer" lance le script sh pour redémarrer le raspberry pi. J'ai essayé en créant une page php et en utilisant la commande exec() ou shell_exec() sans succès pour l'instant. Je me suis ensuite penché sur le CGI mais toujours sans aucun succès....
Si quelqu'un a une petite idée de comment faire ça, je suis preneur.

Merci d'avance
Répondre
#2

Salut,
Le PHP doit fonctionner si :
- Le path complet de l'exécutable est bien spécifié
- Le serveur Web ne bloque pas l'exécution de binaire en dehors du répertoire root

Si tu peux expliquer ce qui n'a pas fonctionné avec le PHP, le serveur web, ses logs, etc.

Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
Répondre
#3

Affiche le retour de la commande exec() et les logs de /etc/log/apache2/error.log

essaye une commande basique, par exemple un ls, et affiche le résultat.

Soit apache n'a pas le droit d’exécuter une commande Shell, soit apache n'a pas le droit de redémarrer la machine ( fort probable)

si c'est le cas regarde du coté de seteuid et setuid, mais attention à ce que tu fais !
Répondre
#4

Merci pour vos réponses.
Après divers essais, voici ce que je peux vous dire.
Le script.sh permet au Raspberry Pi de lancer ou en l'occurrence d'arrêter mon logiciel de vidéo surveillance géré par mon NAS (192.168.1.2), le voici :
Code :
[== Indéfini ==]
ssh [email protected] "killall motion"

J'ai essayé en remplaçant le contenu de script.sh par :
Code :
ls -l

et j'ai obtenu l'affichage du contenu de mon dossier dans mon navigateur web lorsque j'ai appelé la page php (ici test.php

Le contenu de mon test.php est le suivant :
Code :
[== PHP ==]
<?php
$output = shell_exec('sh /home/pi/script.sh');
echo "<pre>$output</pre>";
?>


J'ai remarqué que lorsque j'exécute la page php dans mon terminal en ssh (php test.php), le script s'éxécute convenablement et ce quelque soit le contenu de script.sh (la commande ssh du script fonctionne très bien). Cependant lorsque j'appelle ma page php depuis mon navigateur impossible d'éxécuter le script.sh lorsque celui ci contient la commande ssh vers mon NAS.

J'ai aussi essayé en plaçant un "sudo" devant ma commande sh sans succès.
Je précise aussi que le script s'éxécute très bien depuis mon terminal et que je me connecte en ssh au NAS depuis le raspberry pi sans rentrer de mot de passe, j'ai enregistré la clef publique/clef privée.

Si quelqu'un a une autre idée, je suis preneur.

Merci
Répondre
#5

Quand tu lance en ligne de commande, tu utilises les droits de l'utilisateurs.
Alors que par la page web, c est ceux d'apache.
essaye de faire :
#sudo su www-data
puis relance ton script
#php tonscript.php
Répondre
#6

Effectivement l'utilisateur www-data n'a pas le droit de se connecter à mon NAS en SSH.....
J'essaie de lui donner les droits permanents, je lance la commande ssh-keygen -t rsa, mais j'obtient l'erreur suivante : Saving the key failed: /home/www-data/.ssh/id_rsa.
Si tu as une idée....
Répondre
#7

Parfait, j'ai réussi à faire ce que je voulais..... ^^ J'ai attribuer les bon droits aux bonnes personnes et tout est rentré dans l'ordre je n'ai plus qu'à faire mes boutons html Smile

Merci à tous pour votre aide
Répondre
#8

Bonjour,

Personnellement je préfère donner les droits sudo seulement pour exécuter un script bien déterminé (avec visudo) en incluant la ligne: www-data ALL=(ALL) NOPASSWD: /home/Script.sh
Code :
# User privilege specification
root    ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD: /home/Script.sh
Répondre
#9

mike913 a écrit :Bonjour,

Personnellement je préfère donner les droits sudo seulement pour exécuter un script bien déterminé (avec visudo) en incluant la ligne: www-data ALL=(ALL) NOPASSWD: /home/Script.sh
Code :
# User privilege specification
root    ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD: /home/Script.sh

Ce qui n'est pas franchement bien, car si quelqu'un peut modifier son Script.sh, il peut faire n'importe quoi sur ton serveur.

S'il y'a des commandes précises à lancer en root, je ferais plutôt ceci :

www-data ALL=(root) NOPASSWD: /usr/bin/macommande monparametre
Répondre
#10

Sachant que macommande doit avoir des droits empêchants la modification autre que par root non ?

Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
Répondre
#11

Désolé je croyais que seul le propriétaire du fichier pouvais le modifier.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)