Serveur Apache HTTP Version 2.4
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.
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 !
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 :
Ceci permet de s'assurer que l'utilisateur qui ex�cute le conteneur est vraiment un utilisateur appartenant au syst�me.
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.
Cet utilisateur est-il celui autoris� � ex�cuter le conteneur ? Un seul utilisateur (celui d'Apache) est autoris� � ex�cuter ce programme.
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).
L'utilisateur cible existe-t-il ?
Le groupe cible existe-t-il ?
suEXEc ne permet pas �
root
d'ex�cuter des programmes CGI/SSI.
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.
Actuellement, suEXEC ne permet pas au groupe
root
d'ex�cuter des programmes CGI/SSI.
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".
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.
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.
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) ?
Le r�pertoire ne doit pas �tre ouvert aux autres utilisateurs ; seul l'utilisateur propri�taire doit pouvoir modifier le contenu du r�pertoire.
S'il n'existe pas, il ne peut pas �tre ex�cut�.
Les utilisateurs autres que le propri�taire ne doivent pas pouvoir modifier le programme CGI/SSI.
Les programmes cibles ne doivent pas pouvoir modifier � nouveau les identifiants utilisateur/groupe.
L'utilisateur est-il le propri�taire du fichier ?
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).
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.
C'est ici que nous entrons dans le vif du sujet.
Options de configuration de suEXEC
--enable-suexec
--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
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
--with-suexec-userdir=DIR
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
".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
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
--with-suexec-gidmin=GID
--with-suexec-logfile=FILE
suexec_log
" et se trouve dans votre
r�pertoire standard des fichiers journaux d�fini par
--logfiledir
--with-suexec-safepath=PATH
/usr/local/bin:/usr/bin:/bin
".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.
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.
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.
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
.
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.
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.
Pour des raisons de s�curit� et d'efficacit�, toutes les requ�tes suEXEC ne doivent concerner que des ressources situ�es dans la racine des documents d�finie pour les requ�tes concernant un h�te virtuel, ou des ressources situ�es dans la racine des documents d�finies pour les requ�tes concernant un r�pertoire utilisateur. Par exemple, si vous avez configur� quatre h�tes virtuels, vous devrez d�finir la structure des racines de documents de vos h�tes virtuels en dehors d'une hi�rarchie de documents principale de httpd, afin de tirer parti de suEXEC dans le contexte des h�tes virtuels (Exemple � venir).
Modifier cette variable peut s'av�rer dangereux. Assurez-vous que tout chemin que vous ajoutez � cette variable est un r�pertoire de confiance. Vous n'avez probablement pas l'intention d'ouvrir votre serveur de fa�on � ce que l'on puisse y ex�cuter un cheval de Troie.
Encore une fois, ceci peut vous causer de graves ennuis si vous vous y essayez sans savoir ce que vous faites. Evitez de vous y risquer dans la mesure du possible.