Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/02/2013, à 15:42

DZ

Php et sudoers

Bonjour,

j'utilise une machine en locale (et uniquement en local, donc les questions de sécurité m'importent totalement, ce qui me permet de prendre certains raccourcis).

J'ai besoin de pouvoir configurer une machine en tactile, via php. En gros la machine se comporte comme une borne tactile sncf par exemple. Je veux pouvoir régler la résolution de l'écran en tactile.

J'ai donc tout simplement tenté de mettre un bouton, qui lance :
shell_exec('DISPLAY=:0.0 sudo "/usr/bin/gnome-control-center"');

Le problème rencontré, c'est que fort logiquement, je me retrouve en utilisateur root. La modification de la résolution de l'écran ne fonctionne pas. J'ai donc tenté de modifier en :
shell_exec('DISPLAY=:0.0 sudo -u monuser "/usr/bin/gnome-control-center"');

Bizarrement, le résultat est également un processus dont le propriétaire est root. Pourtant si je me connecte via un terminal à l'utilisateur root, ou www-data, et que j'exécute cette commande, c'est bien l'utilisateur désiré qui exécute la commande.

J'ai pas mal de commandes pour lesquels il faudrait que l'utilisateur www-data les exécute en tant que monuser. Je suis preneur si vous voyez ce qui pose problème.

Hors ligne

#2 Le 11/02/2013, à 18:57

Maisondouf

Re : Php et sudoers

Ajoutes ça dans le fichier /etc/sudoers :

Cmnd_Alias CHG_DISPLAY=/usr/bin/gnome-control-center
www-data ALL=NOPASSWD: CHG_DISPLAY

L'utilisateur Apache (www-data) aura accès à /usr/bin/gnome-control-center en mode sudo sans qu'on lui demande de mot de passe


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#3 Le 12/02/2013, à 09:17

DZ

Re : Php et sudoers

J'avais même mis ALL, pour qu'il n'ait pas de demande de mot de passe quelque soit la commande (la machine étant en local, j'ai même mis cela pour root et monuser). Ce qui m'étonne c'est que depuis un terminal cela fonctionne normalement.

Hors ligne

#4 Le 12/02/2013, à 09:43

DZ

Re : Php et sudoers

Quand je dis que ça ne fonctionne pas, j'ai bien l'outil qui s'ouvre, mais au lieu qu'il soit ouvert par monuser, il est ouvert par root (si j'en crois ps -aux).

Hors ligne

#5 Le 12/02/2013, à 15:35

Maisondouf

Re : Php et sudoers

Si tu executes la commande depuis un terminal, c'est ton user qui l'execute.
Si tu executes la commande depuis un terminal avec sudo , c'est 'root' qui l'execute.
Si tu executes la commande depuis le PHP, c'est 'www-data' qui l'execute.
Si tu executes la commande depuis le PHP avec sudo, c'est 'root' qui l'execute.

Donc pour cette ligne PHP:

shell_exec('DISPLAY=:0.0 sudo "/usr/bin/gnome-control-center"');

c'est www-data qui demande à passer en mode 'root' (sudo) et avec la modification du sudoers, aucun mot de passe ne sera demandé

Après je ne sais pas ce que tu veux faire avec ta commande "/usr/bin/gnome-control-center" et si elle est bien adapté à un fonctionnement local.
C'est une commande système qui sera lancé sur la console ou le display du système, mais pas dans ton navigateur.


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#6 Le 12/02/2013, à 17:11

DZ

Re : Php et sudoers

Oui c'est pour ça que j'ai essayé :
shell_exec('DISPLAY=:0.0 sudo -u monuser "/usr/bin/gnome-control-center"');
Pour que la gestion de l'affichage apparaisse à l'écran, par-dessus le navigateur. L'affichage fonctionne bien, mais ça l'exécute comme si j'avais pas mis "-u monuser" c'est-à-dire en root. Ce qui m'étonne.

La même commande (sudo -u monuser "/usr/bin/gnome-control-center") dans un terminal où je me log en tant que www-data, me le lance bien comme si j'étais l'utilisateur monuser.

Hors ligne

#7 Le 12/02/2013, à 17:56

Maisondouf

Re : Php et sudoers

"sudo -u .... " n'a pas l'air de fonctionner correctement avec les appels PHP (shell_exec, exec, system, passthru, ...)
ce bout de code te permettra de voir ce qu'il en est:

<?php
$cmd="sudo -u papounet whoami";
//$cmd="whoami";
$ret=shell_exec($cmd);
//$ret=exec($cmd, $tab);
echo "<br>";
echo $ret;
echo "<br>";
var_dump($tab);
?>

Il va falloir que tu tapes directement dans les configs pour changer la résolution de l'écran....


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#8 Le 15/02/2013, à 11:45

DZ

Re : Php et sudoers

Hello,

merci pour cette idée simple mais brillante. Pourtant, cela fonctionne, je suis bien l'utilisateur désiré via ce code...

Y aurait-il un problème de guillemet dans ma ligne ?

shell_exec('DISPLAY=:0.0 sudo -u monuser "/usr/bin/gnome-control-center"');

Hors ligne

#9 Le 15/02/2013, à 11:52

DZ

Re : Php et sudoers

En fait j'ai pu mal lire les droits.

Via ps -aux, l'appel à sudo -u monuser se fait via root, par contre /usr/bin/gnome-control-center appartient bien à monuser, comme si je l'exécutais en commande depuis www-data.

Par contre, quand je l'exécute en ligne de commande depuis www-data via sudo -u monuser, gnome-control-center se lance en français, et fonctionne.
Quand je l'exécute via le code php, il se lance en anglais (comme si je le lançais en étant root), et la modification de la résolution ne fonctionne pas.

Hors ligne

#10 Le 26/02/2013, à 10:38

DZ

Re : Php et sudoers

Bonjour,

bon, j'ai eu le temps de m'y remettre. J'ai essayé d'externaliser la commande dans un fichier test.sh dont le contenu est :

#!/bin/bash
DISPLAY=:0.0 sudo -u monuser "/usr/bin/gnome-control-center"

Si je me mets en root, et que j'exécute le fichier sh, cela fonctionne bien.
Si je me mets en utilisateur www-data et que j'exécute le fichier sh, cela fonctionne bien.

Si en php je lance le fichier sh, ça n'est pas l'utilisateur monuser qui lance le programme. A priori pas de solutions propres ?

Pour le moment je pars sur l'idée de lancer l'explorateur de fichiers, qui automatiquement ouvre le dossier home en root, et d'y glisser ici tous les fichiers sh, qui permettront de lancer en tant que monuser, les outils principaux dont j'ai besoin, mais c'est pas hyper propre...

Hors ligne