Forum Linux.debian/ubuntu Faire fonctionner lighttpd en root

Posté par  . Licence CC By‑SA.
Étiquettes :
0
5
mai
2014

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  (site web personnel) . Évalué à 2.

    Est-elle identique ?

    Système - Réseau - Sécurité Open Source

    • [^] # Re: configuration

      Posté par  . Évalué à 1.

      La page PHP ? Oui c'est la même.

      • [^] # Re: configuration

        Posté par  . É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  (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  . É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  . Évalué à 1.

            • [^] # Re: configuration

              Posté par  . É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  . É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  (site web personnel) . Évalué à 2.

                  Peux-tu te connecter avec le compte lighthttpd et lancer la commande ?

                  $ sudo -u lighthttpd  bash
                  $ sudo …

                  et vérifier que la commande s'exécute sans te demander de mot de passe ?

                • [^] # Re: configuration

                  Posté par  . É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  . Évalué à 2.

                  J'ai fait chmod 2775 /sys/class

                  donc tu donnes les droits au groupe d'ecrire dedans et d'heriter

                  et j'ai drwxrwsr-x 42 root root 0 May 5 07:56 class

                  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.

                  Pour sudo, j'ai édité /etc/sudoers.d comme sur le tuto que j'ai posté précédement. Mais toujours rien.
                  le sudo est peut-etre bloqué au niveau de PHP pour des questions evidentes de securité

                  • [^] # Re: configuration

                    Posté par  . É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  . É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  . É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 !

  • # Mauvaise idée

    Posté par  . É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.