mic78000
Posts: 52
Joined: Tue Dec 24, 2013 8:07 am

Lighttpd PHP GPIO

Sat Jan 11, 2014 1:13 pm

Edit :
En fait ça marche (il fallait faire un reboot) mais par contre, cette solution d'ajouter via un "sudo visudo" : www-data ALL=(ALL) NOPASSWD:ALL

N'est pas sécurit.
Comment font les pros ?



Bonjour,

Je cherche à allumer ou éteindre des led via une page PHP.
J'ai installé lighttpd comme serveur web

en mode console (donc rien à voir avec PHP), si je fais

Code: Select all

sudo gpio mode 1 out
puis

Code: Select all

sudo gpio write 1 1
ça marche, ma led s'allume bien
A noter d'ailleurs que ça fonctionne aussi sans le sudo
=> Gpio est bien installé.

J'ai donc une page php (dans /.var/www) qui contient :

Code: Select all

<?php
echo '<pre>';

# system ('sudo gpio mode 1 out');
 exec ('sudo gpio mode 1 out');
# system('sudo gpio write 1 1');
  exec('sudo gpio write 1 1');
  
 echo exec('whoami');

?>
(comme on peut le voir, j'ai fait des essais avec system et avec exe).
La page m’exécute bien le echo exec('whoami'); et me renvoie 'www-data'
J'en déduis que PHP est bien installé et que la commande exec est active dans mon php.

Je pense que la commande sudo gpio (ou gpio tout court, j'ai essayé, c'est pareil) ne fonctionne pas car je suis 'www-data' comme utilisateur et non pi.
Je ne sais pas comment faire. Une idée ?

J'ai essayé aussi en ajoutant dans le "sudo visudo" : www-data ALL=(ALL) NOPASSWD:ALL

Code: Select all

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL

# ajouté par Moi
www-data ALL=(ALL) NOPASSWD:ALL

totoharibo
Posts: 4249
Joined: Thu Jan 24, 2013 8:43 am

Re: Lighttpd PHP GPIO

Sat Jan 11, 2014 7:23 pm

regarder les droits de gpio pour qu'il soit executable par www-data
en ajoutant le groupe pi à www-data par exemple. (cf /etc/group)

ou la commande sg (cf. man sg)

J'ai pas de pi en route pour vérifier si c'est valide.

jelopo
Posts: 1515
Joined: Wed Oct 17, 2012 7:53 pm

Re: Lighttpd PHP GPIO

Sat Jan 11, 2014 11:00 pm

Bonjour,

Pour être plus sécurisé, tu peux être plus restrictif dans /etc/sudoers. (cf man sudoers).
par exemple, pour n'activer que la commande service, je fais :

Code: Select all

www-data ALL=(root) NOPASSWD: /usr/sbin/service
En remplaçant root par pi et /usr/sbin/service par le chemin de ta commande gpio, ça devrait rouler.
Attention dans te scripts d'appel avec les sudo il faudra aussi mettre le chemin complet pour la commande gpio.

Sinon , comme le dit totoharibo, tu peux lister les droits de ta commande gpio. Puis si le groupe est executable tu ajoute ce groupe au user www-data.
ex : ajout du groupe pi à www-data

Code: Select all

sudo usermod -aG www-data pi
A+

mic78000
Posts: 52
Joined: Tue Dec 24, 2013 8:07 am

Re: Lighttpd PHP GPIO

Sun Jan 12, 2014 12:01 pm

Bonjour,
Merci pour la réponse.
Les tests :
à l'origine donc www-data ALL=(ALL) NOPASSWD:ALL fonctionne
www-data ALL=(pi) NOPASSWD:ALL ne fonctionne pas

Code: Select all

www-data ALL=(root) NOPASSWD: /usr/local/bin/gpio
fonctionne. :D
Merci !!!

Il faudra aussi que j'explore la réponse de totolaribo car effectivement, les commandes gpio passe dans la console sans sudo.
Rétrospectivement, je ne comprends pas pourquoi www-data ALL=(pi) NOPASSWD:ALL ne fonctionne pas. Si quelqu'un a une explication ?

Return to “Français”