<-
Apache > Serveur HTTP > Documentation > Version 2.4

Support suEXEC

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

La fonctionnalit� suEXEC permet l'ex�cution des programmes CGI et SSI sous un utilisateur autre que celui sous lequel s'ex�cute le serveur web qui appelle ces programmes. Normalement, lorsqu'un programme CGI ou SSI est lanc�, il s'ex�cute sous le m�me utilisateur que celui du serveur web qui l'appelle.

Utilis�e de mani�re appropri�e, cette fonctionnalit� peut r�duire consid�rablement les risques de s�curit� encourus lorsqu'on autorise les utilisateurs � d�velopper et faire s'ex�cuter des programmes CGI ou SSI de leur cru. Cependant, mal configur�, suEXEC peut causer de nombreux probl�mes et m�me cr�er de nouvelles failles dans la s�curit� de votre ordinateur. Si vous n'�tes pas familier avec la gestion des programmes setuid root et les risques de s�curit� qu'ils comportent, nous vous recommandons vivement de ne pas tenter d'utiliser suEXEC.

top

Avant de commencer

Avant de foncer t�te baiss�e dans la lecture de ce document, vous devez tenir compte de certaines hypoth�ses concernant vous-m�me et l'environnement dans lequel vous allez utiliser suexec.

Premi�rement, vous devez utiliser un syst�me d'exploitation UNIX ou d�riv�, capable d'effectuer des op�rations setuid et setgid. Tous les exemples de commande sont donn�s en cons�quence. D'autres plates-formes, m�me si elles supportent suEXEC, peuvent avoir une configuration diff�rente.

Deuxi�mement, vous devez �tre familier avec les concepts de base relatifs � la s�curit� de votre ordinateur et son administration. Ceci implique la compr�hension des op�rations setuid/setgid et des diff�rents effets qu'elles peuvent produire sur votre syst�me et son niveau de s�curit�.

Troisi�mement, vous devez utiliser une version non modifi�e du code de suEXEC. L'ensemble du code de suEXEC a �t� scrut� et test� avec soin par les d�veloppeurs et de nombreux b�ta testeurs. Toutes les pr�cautions ont �t� prises pour s'assurer d'une base s�re de code non seulement simple, mais aussi solide. La modification de ce code peut causer des probl�mes inattendus et de nouveaux risques de s�curit�. Il est vivement recommand� de ne pas modifier le code de suEXEC, � moins que vous ne soyez un programmeur sp�cialiste des particularit�s li�es � la s�curit�, et souhaitez partager votre travail avec l'�quipe de d�veloppement du serveur HTTP Apache afin de pouvoir en discuter.

Quatri�mement et derni�rement, l'�quipe de d�veloppement du serveur HTTP Apache a d�cid� de ne PAS inclure suEXEC dans l'installation par d�faut d'Apache httpd. Pour pouvoir mettre en oeuvre suEXEC, l'administrateur doit porter la plus grande attention aux d�tails. Apr�s avoir bien r�fl�chi aux diff�rents points de la configuration de suEXEC, l'administrateur peut l'installer selon les m�thodes classiques. Les valeurs des param�tres de configuration doivent �tre d�termin�es et sp�cifi�es avec soin par l'administrateur, afin de maintenir la s�curit� du syst�me de mani�re appropri�e lors de l'utilisation de la fonctionnalit� suEXEC. C'est par le biais de ce processus minutieux que nous esp�rons r�server l'installation de suEXEC aux administrateurs prudents et suffisamment d�termin�s � vouloir l'utiliser.

Vous �tes encore avec nous ? Oui ? Bien. Alors nous pouvons continuer !

top

Mod�le de s�curit� de suEXEC

Avant d'installer et configurer suEXEC, nous allons tout d'abord d�crire le mod�le de s�curit� que vous �tes sur le point d'impl�menter. Vous devriez ainsi mieux comprendre ce qui se passe vraiment � l'int�rieur de suEXEC et quelles pr�cautions ont �t� prises pour pr�server la s�curit� de votre syst�me.

suEXEC est bas� sur un programme "conteneur" (wrapper) setuid qui est appel� par le serveur HTTP Apache principal. Ce conteneur est appel� quand une requ�te HTTP concerne un programme CGI ou SSI que l'administrateur a d�cid� de faire s'ex�cuter sous un utilisateur autre que celui du serveur principal. Lorsqu'il re�oit une telle requ�te, Apache httpd fournit au conteneur suEXEC le nom du programme, ainsi que les identifiants utilisateur et groupe sous lesquels le programme doit s'ex�cuter.

Le conteneur effectue ensuite les v�rifications suivantes afin de d�terminer la r�ussite ou l'�chec du processus -- si une seule de ces conditions n'est pas v�rifi�e, le programme journalise l'erreur et se termine en retournant un code d'erreur, sinon il continue :

  1. L'utilisateur qui ex�cute le conteneur est-il un utilisateur valide de ce syst�me ?

    Ceci permet de s'assurer que l'utilisateur qui ex�cute le conteneur est vraiment un utilisateur appartenant au syst�me.

  2. Le conteneur a-t-il �t� appel� avec un nombre d'arguments correct ?

    Le conteneur ne s'ex�cutera que si on lui fournit un nombre d'arguments correct. Le serveur HTTP apache sait quel est le bon format des arguments. Si le conteneur ne re�oit pas un nombre d'arguments correct, soit il a �t� modifi�, soit quelque chose ne va pas dans la portion suEXEC de votre binaire Apache httpd.

  3. Cet utilisateur valide est-il autoris� � ex�cuter le conteneur ?

    Cet utilisateur est-il celui autoris� � ex�cuter le conteneur ? Un seul utilisateur (celui d'Apache) est autoris� � ex�cuter ce programme.

  4. Le chemin du programme CGI ou SSI cible est-il non s�r ?

    Le chemin du programme CGI ou SSI cible d�bute-t-il par un '/' ou contient-il une r�f�rence arri�re '..' ? Ceci est interdit ; le programme CGI ou SSI cible doit se trouver dans la hi�rarchie de la racine des documents de suEXEC (voir --with-suexec-docroot=DIR ci-dessous).

  5. Le nom utilisateur cible est-il valide ?

    L'utilisateur cible existe-t-il ?

  6. Le nom du groupe cible est-il valide ?

    Le groupe cible existe-t-il ?

  7. L'utilisateur cible n'est-il PAS superutilisateur ?

    suEXEc ne permet pas � root d'ex�cuter des programmes CGI/SSI.

  8. Le num�ro de l'identifiant de l'utilisateur cible est-il SUPERIEUR au num�ro d'identifiant minimum ?

    Le num�ro d'identifiant utilisateur minimum est d�fini � l'ex�cution du script configure. Ceci vous permet de d�finir le num�ro d'identifiant utilisateur le plus bas qui sera autoris� � �x�cuter des programmes CGI/SSI. En particulier, cela permet d'�carter les comptes syst�me.

  9. Le groupe cible n'est-il PAS le groupe superutilisateur ?

    Actuellement, suEXEC ne permet pas au groupe root d'ex�cuter des programmes CGI/SSI.

  10. Le num�ro d'identifiant du groupe cible est-il SUPERIEUR au num�ro d'identifiant minimum ?

    Le num�ro d'identifiant de groupe minimum est sp�cifi� lors de l'ex�cution du script configure. Ceci vous permet de d�finir l'identifiant de groupe le plus bas possible qui sera autoris� � ex�cuter des programmes CGI/SSI, et est particuli�rement utile pour �carter les groupes "syst�me".

  11. Le conteneur peut-il obtenir avec succ�s l'identit� des utilisateur et groupe cibles ?

    C'est ici que le programme obtient l'identit� des utilisateur et groupe cibles via des appels � setuid et setgid. De m�me, la liste des acc�s groupe est initialis�e avec tous les groupes auxquels l'utilisateur cible appartient.

  12. Peut-on se positionner dans le r�pertoire dans dequel sont situ�s les programmes CGI/SSI ?

    S'il n'existe pas, il ne peut pas contenir de fichier. Et si l'on ne peut pas s'y positionner, il n'existe probablement pas.

  13. Le r�pertoire est-il dans l'espace web de httpd ?

    Si la requ�te concerne une portion de la racine du serveur, le r�pertoire demand� est-il dans la hi�rarchie de la racine des documents de suEXEC ? Si la requ�te concerne un UserDir, le r�pertoire demand� est-il dans la hi�rarchie du r�pertoire d�fini comme le r�pertoire utilisateur de suEXEC (voir les options de configuration de suEXEC) ?

  14. L'�criture dans le r�pertoire est-elle interdite pour un utilisateur autre que le propri�taire

    Le r�pertoire ne doit pas �tre ouvert aux autres utilisateurs ; seul l'utilisateur propri�taire doit pouvoir modifier le contenu du r�pertoire.

  15. Le programme CGI/SSI cible existe-t-il ?

    S'il n'existe pas, il ne peut pas �tre ex�cut�.

  16. Les utilisateurs autres que le propri�taire n'ont-ils PAS de droits en �criture sur le programme CGI/SSI ?

    Les utilisateurs autres que le propri�taire ne doivent pas pouvoir modifier le programme CGI/SSI.

  17. Le programme CGI/SSI n'est-il PAS setuid ou setgid ?

    Les programmes cibles ne doivent pas pouvoir modifier � nouveau les identifiants utilisateur/groupe.

  18. Le couple utilisateur/groupe cible est-il le m�me que celui du programme ?

    L'utilisateur est-il le propri�taire du fichier ?

  19. Peut-on nettoyer avec succ�s l'environnement des processus afin de garantir la s�ret� des op�rations ?

    suExec nettoie l'environnement des processus en �tablissant un chemin d'ex�cution s�r (d�fini lors de la configuration), et en ne passant que les variables dont les noms font partie de la liste de l'environnement s�r (cr��e de m�me lors de la configuration).

  20. Le conteneur peut-il avec succ�s se substituer au programme CGI/SSI cible et s'ex�cuter ?

    C'est l� o� l'ex�cution de suEXEC s'arr�te et o� commence celle du programme CGI/ssi cible.

Ce sont les op�rations standards effectu�es par le mod�le de s�curit� du conteneur suEXEC. Il peut para�tre strict et est susceptible d'imposer de nouvelles limitations et orientations dans la conception des programmes CGI/SSI, mais il a �t� d�velopp� avec le plus grand soin, �tape par �tape, en se focalisant sur la s�curit�.

Pour plus d'informations sur la mesure dans laquelle ce mod�le de s�curit� peut limiter vos possibilit�s au regard de la configuration du serveur, ainsi que les risques de s�curit� qui peuvent �tre �vit�s gr�ce � une configuration appropri�e de suEXEC, se r�f�rer � la section "Avis � la population !" de ce document.

top

Configurer et installer suEXEC

C'est ici que nous entrons dans le vif du sujet.

Options de configuration de suEXEC

--enable-suexec
Cette option active la fonctionnalit� suEXEC qui n'est jamais install�e ou activ�e par d�faut. Au moins une option --with-suexec-xxxxx doit accompagner l'option --enable-suexec pour qu'APACI (l'utilitaire de configuration de la compilation d'Apache) accepte votre demande d'utilisation de la fonctionnalit� suEXEC.
--with-suexec-bin=PATH
Le chemin du binaire suexec doit �tre cod� en dur dans le serveur pour des raisons de s�curit�. Cette option vous permet de modifier le chemin par d�faut. Par exemple --with-suexec-bin=/usr/sbin/suexec
--with-suexec-caller=UID
L'utilisateur sous lequel httpd s'ex�cute habituellement. C'est le seul utilisateur autoris� � ex�cuter le wrapper suEXEC.
--with-suexec-userdir=DIR
Cette option d�finit le sous-r�pertoire de la hi�rarchie des r�pertoires utilisateurs dans lequel l'utilisation de suEXEC sera autoris�e. Tous les ex�cutables situ�s dans ce r�pertoire seront ex�cutables par suEXEC sous l'utilisateur cible ; ces programmes doivent donc �tre s�rs. Si vous utilisez une directive UserDir "simple" (c'est � dire ne contenant pas de "*"), l'option --with-suexec-userdir devra contenir la m�me valeur. SuEXEC ne fonctionnera pas correctement si la directive UserDir contient une valeur diff�rente du r�pertoire home de l'utilisateur tel qu'il est d�fini dans le fichier passwd. la valeur par d�faut est "public_html".
Si vous avez plusieurs h�tes virtuels avec une directive UserDir diff�rente pour chacun d'entre eux, vous devrez faire en sorte que chaque UserDir poss�de un r�pertoire parent commun ; donnez alors � l'option --with-suexec-userdir le nom de ce r�pertoire commun. Si tout ceci n'est pas d�fini correctement, les requ�tes CGI "~userdir" ne fonctionneront pas !
--with-suexec-docroot=DIR
Cette option fonctionne comme la directive DocumentRoot pour httpd. Il s'agit de la seule hi�rarchie (en dehors des directives UserDir) dans laquelle la fonctionnalit� suEXEC pourra �tre utilis�e. La valeur par d�faut est la valeur de --datadir accompagn�e du suffixe "/htdocs" ; Par exemple, si vous ex�cutez configure avec "--datadir=/home/apache", la valeur "/home/apache/htdocs" sera utilis�e par d�faut comme racine des documents pour le conteneur suEXEC.
--with-suexec-uidmin=UID
Cette option d�finit l'identifiant utilisateur le plus bas avec lequel un utilisateur pourra �tre la cible de suEXEC. 500 ou 100 sont des valeurs courantes sur la plupart des syst�mes. la valeur par d�faut est 100.
--with-suexec-gidmin=GID
Cette option d�finit l'identifiant de groupe le plus bas avec lequel un utilisateur pourra �tre la cible de suEXEC. 100 est une valeur courante sur la plupart des syst�mes et est par cons�quent la valeur par d�faut.
--with-suexec-logfile=FILE
Cette option permet de d�finir le fichier dans lequel toutes les transactions et erreurs de suEXEC seront journalis�es (� des fins d'analyse ou de d�bogage). Par d�faut, le fichier journal se nomme "suexec_log" et se trouve dans votre r�pertoire standard des fichiers journaux d�fini par --logfiledir
--with-suexec-safepath=PATH
Cette option permet de d�finir une variable d'environnement PATH s�re � passer aux ex�cutables CGI. La valeur par d�faut est "/usr/local/bin:/usr/bin:/bin".

Compilation et installation du conteneur suEXEC

Si vous avez activ� la fonctionnalit� suEXEC � l'aide de l'option --enable-suexec, le binaire suexec sera automatiquement construit (en m�me temps que httpd) lorsque vous ex�cuterez la commande make.

Lorsque tous les composants auront �t� construits, vous pourrez ex�cuter la commande make install afin de les installer. Le binaire suexec sera install� dans le r�pertoire d�fini � l'aide de l'option --sbindir. La localisation par d�faut est "/usr/local/apache2/bin/suexec".

Veuillez noter que vous aurez besoin des privil�ges root pour passer l'�tape de l'installation. Pour que le conteneur puisse changer l'identifiant utilisateur, il doit avoir comme propri�taire root, et les droits du fichier doivent inclure le bit d'ex�cution setuserid.

>Mise en place de permissions pour parano�aque

Bien que le conteneur suEXEC v�rifie que l'utilisateur qui l'appelle correspond bien � l'utilisateur sp�cifi� � l'aide de l'option --with-suexec-caller du programme configure, il subsiste toujours le risque qu'un appel syst�me ou une biblioth�que fasse appel � suEXEC avant que cette v�rification ne soit exploitable sur votre syst�me. Pour tenir compte de ceci, et parce que c'est en g�n�ral la meilleure pratique, vous devez utiliser les permissions du syst�me de fichiers afin de vous assurer que seul le groupe sous lequel s'ex�cute httpd puisse faire appel � suEXEC.

Si, par exemple, votre serveur web est configur� pour s'ex�cuter en tant que :

User www
Group webgroup
      

et suexec se trouve � "/usr/local/apache2/bin/suexec", vous devez ex�cuter les commandes

chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec

Ceci permet de s'assurer que seul le groupe sous lequel httpd s'ex�cute (ici webgroup) puisse faire appel au conteneur suEXEC.

top

Activation et d�sactivation de suEXEC

Au d�marrage, httpd v�rifie la pr�sence du fichier suexec dans le r�pertoire d�fini par l'option --sbindir du script configure (le r�pertoire par d�faut est "/usr/local/apache/sbin/suexec"). Si httpd trouve un conteneur suEXEC correctement configur�, il enregistrera le message suivant dans le journal des erreurs :

[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)

Si ce message n'est pas g�n�r� au d�marrage du serveur, ce dernier ne trouve probablement pas le programme conteneur � l'endroit o� il est sens� �tre, ou l'ex�cutable suexec n'est pas install� en setuid root.

Si le serveur HTTP Apache est d�j� en cours d'ex�cution, et si vous activez le m�canisme suEXEC pour la premi�re fois, vous devez arr�ter et red�marrer httpd. Un red�marrage � l'aide d'un simple signal HUP ou USR1 suffira.

Pour d�sactiver suEXEC, vous devez supprimer le fichier suexec, puis arr�ter et red�marrer httpd.

top

Utilisation de suEXEC

Les requ�tes pour des programmes CGI ne feront appel au conteneur suEXEC que si elles concernent un h�te virtuel contenant une directive SuexecUserGroup, ou si elles sont trait�es par mod_userdir.

H�tes virtuels :
Une des m�thodes d'utilisation du conteneur suEXEC consiste � ins�rer une directive SuexecUserGroup dans une section VirtualHost. En d�finissant des valeurs diff�rentes de celles du serveur principal, toutes les requ�tes pour des ressources CGI seront ex�cut�es sous les User et Group d�finis pour cette section <VirtualHost>. Si cette directive est absente de la section <VirtualHost>, l'utilisateur du serveur principal sera pris par d�faut

R�pertoires des utilisateurs :
Avec cette m�thode, les requ�tes trait�es par mod_userdir appelleront le conteneur suEXEC pour ex�cuter le programme CGI sous l'identifiant utilisateur du r�pertoire utilisateur concern�. Seuls pr�requis pour pouvoir acc�der � cette fonctionnalit� : l'ex�cution des CGI doit �tre activ�e pour l'utilisateur concern�, et le script doit passer avec succ�s le test des v�rifications de s�curit� d�crit plus haut. Voir aussi l' option de compilation --with-suexec-userdir.

top

D�bogage de suEXEC

Le conteneur suEXEC va �crire ses informations de journalisation dans le fichier d�fini par l'option de compilation --with-suexec-logfile comme indiqu� plus haut. Si vous pensez avoir configur� et install� correctement le conteneur, consultez ce journal, ainsi que le journal des erreurs du serveur afin de d�terminer l'endroit o� vous avez fait fausse route.

top

Avis � la population ! Avertissements et exemples

NOTE ! Cette section est peut-�tre incompl�te. Pour en consulter la derni�re r�vision, voir la version de la Documentation en ligne.

Quelques points importants du conteneur peuvent imposer des contraintes du point de vue de la configuration du serveur. Veuillez en prendre connaissance avant de soumettre un rapport de bogue � propos de suEXEC.

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.