next up previous contents Next:  Modules Apache et PHP. Up: Installation et configuration d'Apache. Previous:  Formulaires et CGI.   Table des matières  


37.2.10  setuid des scripts CGI.

Le fait d'éxécuter Apache en tant qu'utilisateur privilégié a des conséquences en terme de sécurité. Une autre façon d'exécuter le script précédent en tant qu'utiliseur postgres consiste à créer un binaire setuid. Pour faire cela, créez un fichier test.cgi en compilant le programme C suivant, similaire à celui de la section 34.2.
i
#include <unistd.h> 
 
int main(int argc, char *argv[]) 
{ 
   setreuid (getuid (), geteuid ()); 
   execl (``/opt/apache/htdocs/test/test.sh'', ``test.sh'', 0); 
   return 0; 
} 
 
 
Ensuite, exécutez chown postgres:www test.cgi et chmod 4550 test.cgi (ou chmod a-w,o-rx,u+s test.cgi). Recréez vos scripts de shell comme test.sh et allez à nouveau à l'URL. Apache exécute test.cgi, devient utilisateur postgres, et donc exécute le script en tant qu'utilisateur postgres. Même si Apache reste utilisateur noboby, le script fonctionnera. Observez bien combien le programme setuid est insécurisé: il ne prend aucun argument et ne réalise qu'une seule fonction. En revanche, il prend des variables d'environnement (ou des entrées de stdin) qui peuvent influencer son comportement. Si un utilisateur pouvait exécuter le script, il pourrait envoyer des données via ces variables ce qui pourrait amener le script à se comporter d'une manière imprévue. Il existe une alternative:

#include <unistd.h> 
 
int main(int argc, char *argv[]) 
{ 
   char *envir[] = {0}; 
   seteruid (geteuid (), geteuid ()); 
   execle (``/opt/apache/htdocs/test/test.sh'', ``test.sh'', 0, envir); 
   return 0; 
} 


Ce script annule l'environnement avant que le script CGI ne démarre, ce qui force l'utilisation exclusive de la méthode POST. Etant donné que la seule information qui peut être passée au script est une simple ligne de texte (ceci via l'option -e q de sed) et parce que cette ligne est passée au peigne fin concernant les caractères illicites, vous augmentez la sécurité d'utilisation du script.


next up previous contents Next:  Modules Apache et PHP. Up: Installation et configuration d'Apache. Previous:  Formulaires et CGI.   Table des matières  
1-01-2006