Bonjour,
J'ai installé ligttpd sur mon beaglebone avec Ubuntu arm 12.10. Il fonctionne mais lorsque je veux exécuter ces lignes de commandes via une page PHP, il ne se passe rien :
<?php
if (isset($_POST['on']))
{
exec("echo 34 > /sys/class/gpio/export");
exec("echo out > /sys/class/gpio/gpio34/direction");
exec("echo 1 > /sys/class/gpio/gpio34/value");
}
?>
Sur d'autre distribution je pouvais le faire, mais pas sur celle-ci car lighttpd n'est pas root. Comment faire ?
En vous remerciant de votre aide.
PS : je comprends bien que ce n'est pas sécurisé
StevN
# configuration
Posté par nono14 (site web personnel) . Évalué à 2.
Est-elle identique ?
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: configuration
Posté par StevN . Évalué à 1.
La page PHP ? Oui c'est la même.
[^] # Re: configuration
Posté par NeoX . Évalué à 4.
je penses qu'il parlait surtout de la configuration de lighthttpd
dans le lancement d'un service (daemon) il est possible de lui dire de s'executer avec un utilisateur ou un autre.
soit tu changes le propriétaire de lighthttpd là,
soit tu changes les droits sur les dossiers /sys/class/gpio pour que le nouvel utilisateur (ou groupe) puisse ecrire dedans.
[^] # Re: configuration
Posté par chimrod (site web personnel) . Évalué à 3.
Et pourquoi pas sudo ?
Ça évite de faire tourner le service en root, et ça explicite la demande d'élévation de privilège pour cette commande.
[^] # Re: configuration
Posté par StevN . Évalué à 1.
Pour la configuration de lighttpd, j'ai pas été voir sous angstrom. Ca fonctionnait tout de suite.
J'ai pu changer les droits du dossier, mais les sous-dossiers n'héritent pas. Comment je peux faire pour changer le propriétaire d'un service ?
En exécutant les commandes avec sudo ca ne fonctionne pas non plus.
[^] # Re: configuration
Posté par StevN . Évalué à 1.
J'ai suivi ce tuto : http://blogmotion.fr/systeme/executer-un-script-shell-avec-permission-root-en-php-1312
Mais toujours rien :(
[^] # Re: configuration
Posté par NeoX . Évalué à 2.
si tu autorise le groupe de lighthttpd à ecrire dans le dossier/fichier
et que tu veux que les sous-dossiers qui pourraient etre créés heritent de ces droits, il faut mettre le droit 2775 sur le dossier de depart.
attention, au demarrage de la machine, les dossiers /sys/class reprennent peut-etre leurs droits par defaut.
enfin pour sudo, il doit falloir autoriser l'utilisateur de lighthttpd à faire la commande "sudo echo…" sans mot de passe, ca se fait dans le fichier /etc/sudoers
editable avec
visudo
[^] # Re: configuration
Posté par StevN . Évalué à 1.
J'ai fait chmod 2775 /sys/class et j'ai drwxrwsr-x 42 root root 0 May 5 07:56 class
Pour sudo, j'ai édité /etc/sudoers.d comme sur le tuto que j'ai posté précédement. Mais toujours rien.
[^] # Re: configuration
Posté par chimrod (site web personnel) . Évalué à 2.
Peux-tu te connecter avec le compte lighthttpd et lancer la commande ?
et vérifier que la commande s'exécute sans te demander de mot de passe ?
[^] # Re: configuration
Posté par StevN . Évalué à 1.
La commande me demande un mot de passe.
[^] # Re: configuration
Posté par StevN . Évalué à 1.
Avec la commande usermod -a -G sudo www-data l'utilisateur fait partie du groupe sudo, mais j'ai toujours permission denied sur certains fichiers qui appartiennent à root.
[^] # Re: configuration
Posté par NeoX . Évalué à 2.
donc tu donnes les droits au groupe d'ecrire dedans et d'heriter
donc l'utilisateur root peut lire/ecrire dedans
le groupe root peut lire/ecrire dedans
mais comme tu le disais precedemment ton lighthttpd n'est pas root, et n'appartient pas au groupe root.
du coup ca ne marche pas.
[^] # Re: configuration
Posté par StevN . Évalué à 1. Dernière modification le 05 mai 2014 à 15:54.
Pourtant uid=33(www-data) gid=33(www-data) groups=33(www-data),27(sudo)
Donc www-data appartient bien au groupe sudo. Comment se fait-il qu'on ne puisse pas écrire dans le dossier gpio ?
[^] # Re: configuration
Posté par NeoX . Évalué à 2.
parce que la commande sudo va te demander un mot de passe,
il faut donc ajouter une ligne dans /etc/sudoers
pour dire que l'utilisateur www-data à le droit de faire echo, via sudo, sans mot de passe
[^] # Re: configuration
Posté par StevN . Évalué à 1.
Finallement retrour sur Angstrom 3.2. La seule qui marchait pour ce que je voulais faire, sauf le web-server. En changeant les liens de mise à jours (à partir de ceux d'Angstrom 3.8) dans le dossier /etc/opkg. Lighttpd est bien installé en root.
Merci beaucoup pour votre aide !
[^] # Re: configuration
Posté par NeoX . Évalué à 2.
c'est une technique aussi ;)
# Mauvaise idée
Posté par benja . Évalué à 3. Dernière modification le 06 mai 2014 à 10:55.
Désolé d'arriver comme un cheveux dans la soupe, mais c'est une très très mauvaise idée de vouloir faire tourner lightttpd en root (surtout si c'est pour de l'embeded: longue durée de vie, pas de mises-à-jour; surtout si on y rajoute du php aussi…).
Alors pourquoi ne pas définir les permissions sur les fichiers /sys/class correctement en premier lieu ? Ça me parait la solution la plus simple et la plus adaptée.
Seconde possibilité: utiliser sudo ET PASSER par un wrapper, c'est-à-dire php->exec("sudo /usr/local/bin/led_on.sh"), et configure sudoers pour n'autoriser www-data qu'à lancer ce script, et uniquement ce script ! Ne pas faire cela, et en admettant que le code php est troué (ce qu'il est forcément…) on se retrouve dans la même situation où le serveur tourne en root.
PS: Y a-t-il une raison pour laquelle mettre server.username à root ne fonctionne pas (cf. http://redmine.lighttpd.net/projects/lighttpd/wiki/Server_usernameDetails) ? Même si je maintiens que c'est une très mauvaise idée :P
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.