Professional Documents
Culture Documents
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
GNRALITS
CONFIGURATION GNRALE LANCEMENT DU DAEMON : RPERTOIRE RACINE DU SERVEUR ACCS AUX DOCUMENTS LA PROTECTION PAR DOMAINES LA PROTECTION PAR UTILISATEURS PROGRAMMES CGI
6 6 6 7 10 11 13
15
17
EXEMPLE
18
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Introduction
Le logiciel Apache est actuellement le logiciel serveur http le plus utilis dans lInternet. Dot de nombreuses fonctionnalits, performant et gratuit, il constitue un choix trs intressant pour ceux voulant mettre en place un service WWW. Mais comme pour tout logiciel, le fait doffrir de nombreuses fonctionnalits implique galement une complexit plus grande dutilisation et en particulier de configuration. Cela entrane galement trs souvent, dans le domaine de lInternet, des problmes potentiels supplmentaires concernant la scurit. Ce papier essaie de faire le tour de la question concernant les aspects de la configuration dApache qui entrent en jeux dans les problmes de scurit. Il naborde donc pas tous les problmes de configuration dApache mais se consacre uniquement ceux lis la scurit. Les conseils qui y sont donns peuvent tre adapts, car ladministration des serveurs http varie beaucoup dun site un autre.
-3-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Gnralits
Linstallation du logiciel Apache se fait, par dfaut, dans le rpertoire /usr/local/etc/httpd. Ce rpertoire contient en particulier un rpertoire conf qui va contenir les fichiers de configuration dApache : httpd.conf, srm.conf et access.conf
Rpertoire dinstallation
conf
httpd.conf srm.conf access.conf
cgi-bin
icons
Ces fichiers sont organiss de la faon suivante : httpd.conf contient les directives de configuration gnrale
srm.conf contient les directives concernant les ressources du serveur access.conf contient les directives concernant la politique daccs au serveur.
A cot de ces 3 fichiers, on peut galement utiliser des fichiers de configuration que lon place dans les rpertoires mmes des documents du serveur. Ces fichiers ont un nom particulier (par dfaut .htaccess) et peuvent contenir peu prs les mmes directives que les 3 fichiers ci-dessus.
-4-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Les aspects scurit du logiciel Apache ne concernent pas uniquement le fichier access.conf. Elles sont lis lutilisation dun ensemble de directives qui se trouvent dans les 3 fichiers de configuration et lutilisation de certaines fonctionnalits du logiciel :
politique daccs aux documents : accs libre, filtrage par rapport aux domaines
ou accs par utilisateur et mot de passe.
utilisation des programmes CGI utilisation des directives Server Side Include . accs aux rpertoires des utilisateurs de la machine o tourne le serveur Apache
-5-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Configuration gnrale
Lancement du daemon
Le premier point sensible concernant la scurit des serveurs httpd est la faon dont ceux-ci sont dmarrs et en particulier lidentit sous laquelle est dmarr le serveur. On ne traite ici que le cas o la directive ServerType a pour valeur standalone, cest dire o on ne dmarre pas le serveur par inetd, ce qui nest pratiquement jamais le cas, pour des raisons de performance. Si le serveur est dmarr par un utilisateur autre que root, tous les processus appartiendront cet utilisateur. Sil est dmarr par root, le processus pre appartiendra root, mais tous les processus fils, qui rpondront aux requtes, appartiendront lutilisateur dfinit par les directives User et Group dans le fichier httpd.conf. En cas de trou de scurit, et donc de possibilit dintrusion sur la machine, travers le serveur http, ce problme pourra tre exploit avec les droits de lutilisateur auquel appartient les processus fils. Il est donc fort dconseill de donner la valeur root la directive User, mais de choisir plutt un utilisateur de la machine sans droits particuliers, par exemple nobody ou un utilisateur cr spcialement pour cela.
-6-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
une protection par domaine, qui permet de dfinir des droits daccs en fonction
des noms de machines ou de domaines
une protection par utilisateur, qui permet de protger tout ou partie du serveur
par nom dutilisateur et mot de passe (4). La premire mthode est simple mettre en uvre et ne ncessite pratiquement pas dadministration particulire. Par contre, la seconde implique la gestion de comptes utilisateur et donc plus de travail. Les deux mthodes se dfinissent dans le fichier access.conf. Celui-ci contient au moins une directive <Directory> qui va dfinir la politique par dfaut pour tous les documents du serveur. On peut ensuite ajouter des directives <Directory> pour modifier les caractristiques de certaines sous-arborescences. La directive <Directory> est un bloc pouvant contenir un certain nombre de sous-directives : Options : est suivi par une liste doptions possibles :
Indexes : indique que lon peut avoir accs la liste des fichiers des
rpertoires.
Includes : indique que lon peut avoir des fichiers contenant des directives
AllowOverride : indique si on peut ou non utiliser des fichiers de configuration lintrieur des rpertoires. Ces fichiers, appels par dfaut .htaccess, peuvent
-7-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
contenir peu prs les mmes directives que les fichier httpd.conf, srm.conf et access.conf, et ne concernent que le rpertoire dans lequel ils se trouvent. Valeurs possibles :
All : les fichiers .htaccess sont autoriss None : les fichiers .htaccess sont interdits
Indexes : autorise les directives concernant la prsentation des rpertoires (!DD$ESCRIPTION, !DD)CON"Y%NCODING, !DD)CON"Y4YPE, $EFAULT)CON, $IRECTORY)NDEX, &ANCY)NDEXING, (EADER.AME, )NDEX)GNORE, )NDEX/PTIONS, 2EADME.AME, etc.). Limit : autorise les sous-directives de la directive Limit (ALLOW, DENY and
ORDER).
<Limit> : est un bloc contenant des sous-directives permettant de dfinir les droits
ORDER : indique lordre dans lequel on va dfinir les droits : ORDER ALLOW DENY
ou
ORDER DENY ALLOW ALLOW : autorise un ou plusieurs domaines DENY : interdit un ou plusieurs domaines
require : dans le cas daccs par utilisateur et mot de passe, indique le ou les
Exemple :
-8-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
<Directory /usr/local/etc/httpd/htdocs> Options Indexes SymLinksIfOwnerMatch Includes AllowOverride None <Limit GET> order allow,deny allow from all </Limit> </Directory> <Directory /usr/local/etc/httpd/htdocs/docs> Options +ExecCGI AllowOverride None <Limit GET> order allow,deny allow from all </Limit> </Directory>
On suppose ici que /usr/local/etc/httpd/htdocs est le rpertoire racine du serveur. Dans lexemple ci-dessus, la premire directive <Directory> permet de dfinir la politique gnrale daccs au serveur. La suivante spcifie les mmes proprits pour larborescence /usr/local/etc/httpd/htdocs/docs mais ajoute la possibilit dy mettre des programmes CGI (+ExecCGI)
-9-
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Exemple :
<Directory /usr/local/etc/httpd/htdocs/> Options Indexes SymLinksIfOwnerMatch Includes AllowOverride None <Limit GET> order allow,deny allow from all </Limit> </Directory> <Directory /usr/local/etc/httpd/htdocs/local> <Limit GET> order deny,allow deny from all allow from .urec.fr </Limit> </Directory>
Dans cette exemple, la premire directive <Directory> indique que les documents du serveur sont accessibles tout le monde. La deuxime directive <Directory> dfinit un filtre pour les documents dans /usr/local/etc/httpd/htdocs/local qui ne sont accessibles quaux machines appartenant au domaine urec.fr.
- 10 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
utilisateurs ainsi que leur mot de passe. Ce fichier a, peu prs, la mme syntaxe que le fichier passwd sur les systmes UNIX.
Dans cette exemple, on cre, pour tous les fichiers sous les arborescences /usr/local/etc/httpd/htdocs/prive1 et /usr/local/etc/httpd/htdocs/prive2, une protection par utilisateur. Dans le premier cas, laccs est rserv aux utilisateurs appartenant au groupe urec, dans le deuxime, seul lutilisateur gross aura droit daccs.
- 11 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
AuthType : indique le type dauthentification AuthUserFile : indique le nom du fichier utilisateurs AuthGroupFile : indique le nom du fichier groupe AuthName : indique une chane de caractre qui sera utilis dans la fentre du
La principale difficult dans ce type de configuration est de ne pas se tromper dans les noms de fichiers, de groupes ou dutilisateurs. Les relations peuvent se reprsenter ainsi :
access.conf
htpasswd
gross:8t1/3BLsV9BRg dupont:47gtR83uhY0e
$IRECTORYUSRLOCALETCHTTPDHTDOCS !UTH5SER&ILEUSRLOCALETCHTTPDCONFHTPASSWD !UTH'ROUP&ILEUSRLOCALETCHTTPDCONFHTGROUP $IRECTORY $IRECTORYUSRLOCALETCHTTPDHTDOCSPRIVE REQUIREGROUPEUREC $IRECTORY $IRECTORYUSRLOCALETCHTTPDHTDOCSPRIVE REQUIREUSERGROSS $IRECTORY
htgroup
urec : gross dupont
- 12 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Programmes CGI
Les programmes CGI sont des programmes destins tre excuts par le serveur http, en gnral pour le traitement dun formulaire, ou dans un autre but. Ces programmes, crits dans nimporte quel langage support sur la machine, sont excuts avec les droits de lutilisateur auquel appartient les processus fils du serveur (utilisateur qui a lanc le serveur si ce nest pas root, ou utilisateur identifi par les directives User et Group dans httpd.conf dans le cas dun lancement par root). Lutilisation de programmes CGI induit des problmes de scurit potentiels supplmentaires car ils peuvent eux mmes contenir des trous de scurit. Ainsi des programmes CGI peuvent, accidentellement ou de faon malveillante, annihiler compltement les efforts faits pour rendre scuris le logiciel Apache lui-mme (7). Pour utiliser des programmes CGI, il existe diffrentes possibilits au niveau de la configuration dApache :
la directive
ScriptAlias dans srm.Conf permet de dfinir un ou plusieurs rpertoires qui seront connus du serveur comme contenant des programmes CGI. Toute requte un fichier de ces rpertoires sera interprte par le serveur comme une demande dexcution du fichier demand.
Exemple :
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/
si la directive
ExecCGI, cela implique que ce rpertoire peut contenir des programmes CGI. Cela permet davoir ainsi des programmes CGI ailleurs que dans les rpertoires dfinis par ScriptAlias. Cette mthode implique galement que le serveur puisse distinguer les fichiers excuter des autres fichiers. Cela est fait laide de la directive AddHandler dans srm.conf qui permet dassocier un suffixe particulier aux fichiers contenant les programmes CGI.
Exemple :
AddHandler cgi-script .cgi
- 13 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Pour essayer de limiter les risques induits par lutilisation de programmes CGI, on peut :
- 14 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
ou <suffixe> est le suffixe que lon veut associer aux fichiers contenant des SSI, par exemple .shtml . Exemples :
le serveur remplacera cette directive par le contenu du fichier /divers/intro.html qui est donn par son nom sur le serveur
dans ce cas le nom du fichier est relatif au rpertoire courant. Dans ces 2 cas, on ne peut normalement accder quaux fichiers accessibles par ailleurs par le serveur.
le serveur remplace cette directive par le rsultat de la commande /usr/bin/date . Toute commande du systme peut tre ainsi utilise.
dans ce cas la commande excuter est un programme CGI dont le chemin est relatif au serveur.
- 15 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Le problme principal avec les SSI est donc la possibilit de faire excuter des programmes par le serveur. En cela, le problme est sensiblement le mme quavec les programmes CGI. Pour rduire les risques lis lutilisation des SSI on peut :
ne pas utiliser les SSI en ne mettant pour aucun des rpertoires dans
access.conf la valeur )NCLUDES dans la directive Options. Cest la mthode la
si vous mettez la valeur )NCLUDES dans la directive Options, il vous faut alors
contrler srieusement le contenu de vos fichiers, surtout si vous laissez dautres personnes la possibilit de dposer des fichiers sur votre serveur.
- 16 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
ou <dir> est le nom du rpertoire que les utilisateurs devront crer dans leur rpertoire personnel. Tous les fichiers contenus dans ces rpertoires seront alors accessibles avec des URLs de la forme :
http ://machine.domaine/~dupont/a/b/c.html
Le fait de rendre ainsi accessibles des fichiers des utilisateurs oblige prendre certaines prcautions :
crer dans le fichier access.conf des directives <Directory> spcifique pour les
rpertoires contenant des rpertoires personnels dutilisateurs.
pour ces directives <Directory> : interdire lutilisation de fichiers .htaccess qui pourrait modifier la
configuration que vous avez mis en place :
AllowOverride None
ExecCGI dans
- 17 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Exemple
<Directory /home> Options Indexes AllowOverride None <Limit GET POST> allow from all </Limit> </Directory> <Directory /usr/local/etc/httpd/htdocs>. Options Indexes SymLinksIfOwnerMatch AllowOverride All <Limit GET> order allow,deny allow from all </Limit> </Directory> <Directory /usr/local/etc/httpd/htdocs/local> <Limit GET> order deny,allow deny from all allow from .labo.fr </Limit> </Directory> <Directory /usr/local/etc/httpd/htdocs/prive> Options +Includes +ExecCGI AllowOverride All AuthType Basic AuthUserFile /usr/local/etc/httpd/conf/htpasswd AuthGroupFile /usr/local/etc/httpd/conf/htgroup AuthName Acces reserve <Limit GET> require group labo </Limit> </Directory> rpertoire contenant les rpertoires des utilisateurs. On met le minimum de possibilits au niveau de ce rpertoire.
rpertoire racine.
rpertoire particulier dont laccs est protg par utilisateur et mot de passe. On suppose cette partie administre de faon plus stricte et donc on peut ajouter des options.
- 18 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Conclusion
La scurisation dun serveur http utilisant le logiciel Apache doit se faire diffrents niveaux. Si ladministrateur est seul matre du contenu du serveur, il est clair que les choses seront plus simples, mais la plupart du temps ce nest pas le cas et certaines prcautions sont mettre en uvre. En particulier :
noubliez pas que la protection de documents par utilisateur et mot de passe, mme
dsactivez les Server Side Include partout o cest possible. interdisez les CGI l o ils ne sont pas ncessaires. De plus, prenez grand soin dans protgez
lcriture des programmes CGI. Il est trs facile dintroduire un trou de scurit ainsi.
si elle offre une protection correcte, nest pas une garantie absolue. Les mots de passe transitant en clair sur le rseau, il est toujours possible dtre attaqu ainsi.
les rpertoires des utilisateurs en y limitant au maximum les fonctionnalits : pas de SSI, pas de CGI, pas de fichiers .htaccess.
AllowOverride None partout o cest possible.
- 19 -
C o n f i g u r a t i o n
d u
l o g i c i e l
A p a c h e
A s p e c t s
s c u r i t
Rfrences
1. Apache documentation http://www.apache.org/docs 2. Apache Week http://www.apacheweek.com/ 3. Security tips for server configuration, http://www.apache.org/docs/misc/security_tips.html 4. Using User Authentication http://www.apacheweek.com/features/userauth 5. Making your setup more secure http://hoohoo.ncsa.uiuc.edu/docs/tutorials/security.html 6. CERT advisorie, CA-96.06.cgi_example_code, ftp://ftp.urec.fr/pub/securite/CERTs/miroir.cert.org/cert_advisories/CA96.06.cgi_example_code 7. The World Wide Web Security FAQ http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html 8. Security Concerns on the Web http://hoohoo.ncsa.uiuc.edu/security/ Voir aussi les recommendations du comit de cordination des serveurs web du CNRS : http://www.cnrs.fr/Gazette/Comite/comite.html
- 20 -