Le mercredi 8 septembre, Jean-Marc Coursimault a écrit :
> Comment exécuter, à partir d'une page php un script qui doit tourner sous
> root ? A part le mettre suid ?
Je ne pense pas que ça marche : le script est interprété, ce n'est pas
vraiment un exécutable. J'essayerais plutôt de faire un vrai exécutable
suid root en C, aussi petit que possible, et l'appeler par la fonction
PHP system(). Ou alors tu fais ton script en Perl et tu utilises le
mécanisme suidperl et le « taint mode ».
Mais suis d'abord le conseil de Nooks et assure-toi que tu es bien
obligé d'être root.
> Est-ce que le mécanisme de suexec s'applique aussi aux scripts PHP ?
Il me semble que non : le scrip suivant
<?php
header("Content-Type: text/plain");
system("id");
?>
produit chez moi
uid=48(apache) gid=48(apache) groups=48(apache)
alors que celui-ci :
#!/bin/sh
echo "Content-Type: text/plain"
echo
id
me donne
uid=501(edgar) gid=501(edgar) groups=501(edgar),5(tty)[...]
La différence à mes yeux est que le script shell est exécuté (au sens de
l'appel système execve()) alors que le script PHP est interprété par le
processus Apache lui-même (l'interpréteur PHP est en module).
D'ailleurs suexec ne t'aidera pas si tu dois vraiment être root :
Presently, suEXEC does not allow 'root' to execute CGI/SSI
programs.
dixit
http://httpd.apache.org/docs/suexec.html .
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org