Page 1 sur 1

[PHP] exécuter commande root avec exec [Résolu]

Publié : mar. 30 oct. 2012, 17:59
par mauribilis
bonjour,
je tourne avec lighttpd, je voudrais exécuter une commande root avec exec

Code : Tout sélectionner

exec("echo 0 > /sys/class/gpio/gpio65/value", $err);
mais ça me retourne l'erreur suivante

Code : Tout sélectionner

sh: /sys/class/gpio/gpio65/value: Permission denied
je ne dois pas avoir les autorisations.

comment faire ?

merci d'avance

Re: [PHP] exécuter commande root avec exec

Publié : mar. 30 oct. 2012, 20:03
par benjarobin
Lancer un programme en C qui est setuid, c'est ce qu'il y a de plus simple

Re: [PHP] exécuter commande root avec exec

Publié : jeu. 01 nov. 2012, 22:37
par mauribilis
salut la compagnie,

j'ai fais mon programme c il marche, je l'ai testé en ligne de commande mais pas avec php le setuid ne doit pas êtrm
mon c

Code : Tout sélectionner

 
 
int main(int argc, char *argv[])
{
system("echo 1 > /sys/class/gpio/gpio65/value");
 return 0;
}
mon php

Code : Tout sélectionner

<?php
echo exec("cd /home && ./led");
?>
pour le setuid j'ai fais chmod ug+s et chmod u+s et chmod g+s sur mon programme compilé mais php dit toujours "Permission denied"

Re: [PHP] exécuter commande root avec exec

Publié : jeu. 01 nov. 2012, 23:43
par benjarobin
Il ne faut pas faire ceci... Demain je te donnerai le code
Sinon ton programme doit appartenir a l'utilisateur root

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 12:38
par benjarobin

Code : Tout sélectionner

#include <stdio.h>

#define GPIO_FILE "/sys/class/gpio/gpio65/value"

int main(void)
{
        int ret = 0;
        FILE *f = fopen(GPIO_FILE, "w");

        if (f != NULL)
        {
                if (fputs("1\n", f) <= 0)
                {
                        perror("Fail to write to: " GPIO_FILE);
                        ret = 2;
                }
        }
        else
        {
                perror("Fail to open: " GPIO_FILE);
                ret = 1;
        }
        return ret;
}
Compilation:

Code : Tout sélectionner

gcc -Wall -Wextra led.c -o led
En root :

Code : Tout sélectionner

chown root:root led
chmod ug+s led
Php :

Code : Tout sélectionner

<?php
echo exec("/chemin-vers-led/led");
?>

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 20:59
par mauribilis
merci beacoup ça marche ! mais comment faire au lieu de echo (écrire) un cat (lire la valeur)

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 21:42
par benjarobin
fread ? fscanf ?
Tout dépend ce que tu veux faire :-)
Mais tu n'as pas besoin des droits root pour la lecture

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 22:03
par mauribilis
je suis pas très sûr de mon code :

Code : Tout sélectionner

#include <stdio.h>

#define GPIO_FILE "/sys/class/gpio/gpio65/value"

int main(void)
{
        int ret = 0;
        FILE *f = fopen(GPIO_FILE, "r");

      
		fscanf(f, "%d", &GPIO_FILE);  
    printf ("Valeur lu : %d\n", GPIO_FILE);  
  
    fclose(f);  
            
        return ret;
}

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 22:31
par benjarobin
Hum c'est faux, d'ailleurs cela ne devrait pas compiler, mais encore une fois sans savoir ce que tu veux faire... De plus pourquoi ne pas utiliser cat ?

Re: [PHP] exécuter commande root avec exec

Publié : ven. 02 nov. 2012, 23:22
par mauribilis

Code : Tout sélectionner

 De plus pourquoi ne pas utiliser cat ?
cat /sys/class/gpio/gpio65/value est une ligne de commande doi-je exécuter cette ligne de commande dans un code c ?

Re: [PHP] exécuter commande root avec exec

Publié : sam. 03 nov. 2012, 10:45
par benjarobin
... Je ne comprend vraiment pas ce que que tu veux faire... Peux tu développer
Pourquoi ne pas faire simplement

Code : Tout sélectionner

exec("cat /sys/class/gpio/gpio65/value");
Pourquoi vouloir faire un code C ?!

Re: [PHP] exécuter commande root avec exec

Publié : sam. 03 nov. 2012, 12:57
par mauribilis
:D ah oui je n’avais plus pensais qu'une simple lecture nécessite pas de droit setuid, comment fait-on pour mettre le sujet en résolu ?

Re: [PHP] exécuter commande root avec exec

Publié : sam. 03 nov. 2012, 14:04
par benjarobin
Il faut éditer ton premier message