security_tips.xml.fr revision 8542a70aedb77a3353d52151d0aa8a01b6393b52
97a9a944b5887e91042b019776c41d5dd74557aferikabele<?xml version="1.0" encoding="ISO-8859-1" ?>
97a9a944b5887e91042b019776c41d5dd74557aferikabele<!DOCTYPE manualpage SYSTEM "/style/manualpage.dtd">
97a9a944b5887e91042b019776c41d5dd74557aferikabele<?xml-stylesheet type="text/xsl" href="/style/manual.fr.xsl"?>
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive<!-- English revision : 1226477 -->
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive<!-- French translation : Lucien GENTIS -->
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive<!-- Reviewed by : Vincent Deffontaines -->
b686b6a420bde7f78c416b90be11db94cb789979nd
b686b6a420bde7f78c416b90be11db94cb789979nd<!--
b686b6a420bde7f78c416b90be11db94cb789979nd Licensed to the Apache Software Foundation (ASF) under one or more
b686b6a420bde7f78c416b90be11db94cb789979nd contributor license agreements. See the NOTICE file distributed with
b686b6a420bde7f78c416b90be11db94cb789979nd this work for additional information regarding copyright ownership.
b686b6a420bde7f78c416b90be11db94cb789979nd The ASF licenses this file to You under the Apache License, Version 2.0
b686b6a420bde7f78c416b90be11db94cb789979nd (the "License"); you may not use this file except in compliance with
b686b6a420bde7f78c416b90be11db94cb789979nd the License. You may obtain a copy of the License at
b686b6a420bde7f78c416b90be11db94cb789979nd
b686b6a420bde7f78c416b90be11db94cb789979nd http://www.apache.org/licenses/LICENSE-2.0
b686b6a420bde7f78c416b90be11db94cb789979nd
b686b6a420bde7f78c416b90be11db94cb789979nd Unless required by applicable law or agreed to in writing, software
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd distributed under the License is distributed on an "AS IS" BASIS,
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd See the License for the specific language governing permissions and
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd limitations under the License.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd-->
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd<manualpage metafile="security_tips.xml.meta">
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd <parentdocument href="./">Documentations diverses</parentdocument>
b686b6a420bde7f78c416b90be11db94cb789979nd
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <title>Conseils sur la s&eacute;curit&eacute;</title>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <summary>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>Ce document propose quelques conseils et astuces concernant les
06ba4a61654b3763ad65f52283832ebf058fdf1cslive probl&egrave;mes de s&eacute;curit&eacute; li&eacute;s
06ba4a61654b3763ad65f52283832ebf058fdf1cslive &agrave; l'installation d'un serveur web. Certaines suggestions seront &agrave; caract&egrave;re
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd g&eacute;n&eacute;ral, tandis que d'autres seront sp&eacute;cifiques &agrave; Apache.</p>
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd </summary>
5b10fd3977e6dfff19afe770e612e276962f7950nd
5b10fd3977e6dfff19afe770e612e276962f7950nd <section id="uptodate"><title>Maintenez votre serveur &agrave; jour</title>
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd <p>Le serveur HTTP Apache a une bonne r&eacute;putation en mati&egrave;re de s&eacute;curit&eacute;
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd et poss&egrave;de une communaut&eacute; de d&eacute;veloppeurs tr&egrave;s sensibilis&eacute;s aux probl&egrave;mes
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd de s&eacute;curit&eacute;. Mais il est in&eacute;vitable de trouver certains probl&egrave;mes
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd -- petits ou grands -- une fois le logiciel mis &agrave; disposition. C'est pour
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd cette raison qu'il est crucial de se tenir inform&eacute; des mises &agrave; jour. Si
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd vous avez obtenu votre version du serveur HTTP directement depuis Apache,
5b10fd3977e6dfff19afe770e612e276962f7950nd nous vous conseillons grandement de vous abonner &agrave; la <a
5b10fd3977e6dfff19afe770e612e276962f7950nd href="http://httpd.apache.org/lists.html#http-announce">Liste de diffusion
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd des annonces du serveur HTTP</a> qui vous informera de
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd la parution des nouvelles versions et des mises &agrave; jour de s&eacute;curit&eacute;. La
2aff288113d772cedca6add888eb643afffe9fb1nd plupart des distributeurs tiers d'Apache fournissent des services
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd similaires.</p>
2aff288113d772cedca6add888eb643afffe9fb1nd
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd <p>Gardez cependant &agrave; l'esprit que lorsqu'un serveur web est compromis, le
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd code du serveur HTTP n'est la plupart du temps pas en cause. Les probl&egrave;mes
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd proviennent plut&ocirc;t de code ajout&eacute;, de scripts CGI, ou du syst&egrave;me
2aff288113d772cedca6add888eb643afffe9fb1nd d'exploitation sous-jacent. Vous devez donc vous tenir inform&eacute; des
2aff288113d772cedca6add888eb643afffe9fb1nd probl&egrave;mes et mises &agrave; jour concernant tous les logiciels pr&eacute;sents sur
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd votre syst&egrave;me.</p>
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd </section>
2aff288113d772cedca6add888eb643afffe9fb1nd
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd <section id="dos">
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd <title>Attaques de type "D&eacute;ni de service"
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd (Denial of Service - DoS)</title>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <p>Tous les services r&eacute;seau peuvent faire l'objet d'attaques de type
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd "D&eacute;ni de service" qui tentent de les emp&ecirc;cher de r&eacute;pondre aux clients en
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd saturant leurs ressources. Il est impossible de se pr&eacute;munir totalement
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd contre ce type d'attaques, mais vous pouvez accomplir certaines actions
db99fa79ac42b9cc42b63386eb289aecb0f3cb9cnd afin de minimiser les probl&egrave;mes qu'elles cr&eacute;ent.</p>
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd
2aff288113d772cedca6add888eb643afffe9fb1nd <p>Souvent, l'outil anti-DoS le plus efficace sera constitu&eacute; par le
2aff288113d772cedca6add888eb643afffe9fb1nd pare-feu ou certaines configurations du syst&egrave;me d'exploitation. Par
2aff288113d772cedca6add888eb643afffe9fb1nd exemple, la plupart des pare-feu peuvent &ecirc;tre configur&eacute;s de fa&ccedil;on &agrave;
2aff288113d772cedca6add888eb643afffe9fb1nd limiter le nombre de connexions simultan&eacute;es depuis une adresse IP ou un
2aff288113d772cedca6add888eb643afffe9fb1nd r&eacute;seau, ce qui permet de pr&eacute;venir toute une gamme d'attaques simples.
2aff288113d772cedca6add888eb643afffe9fb1nd Bien s&ucirc;r, ceci n'est d'aucun secours contre les attaques de type
2aff288113d772cedca6add888eb643afffe9fb1nd "D&eacute;ni de service" distribu&eacute;es (DDoS).</p>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <p>Certains r&eacute;glages de la configuration d'Apache peuvent aussi
2aff288113d772cedca6add888eb643afffe9fb1nd minimiser les probl&egrave;mes :</p>
2aff288113d772cedca6add888eb643afffe9fb1nd
aa0b2780958e9b1467c9d0153a05738e399811a5nd <ul>
2aff288113d772cedca6add888eb643afffe9fb1nd <li>La directive <directive
42af92a661a06b3cebc88d585aad75064a309d51nd module="mod_reqtimeout">RequestReadTimeout</directive> permet de
42af92a661a06b3cebc88d585aad75064a309d51nd limiter le temps que met le client pour envoyer sa requ&ecirc;te.</li>
2aff288113d772cedca6add888eb643afffe9fb1nd
aa0b2780958e9b1467c9d0153a05738e399811a5nd <li>La valeur de la directive
2aff288113d772cedca6add888eb643afffe9fb1nd <directive module="core">TimeOut</directive> doit &ecirc;tre diminu&eacute;e sur les
2aff288113d772cedca6add888eb643afffe9fb1nd sites sujets aux attaques DoS. Une valeur de quelques secondes devrait
2aff288113d772cedca6add888eb643afffe9fb1nd convenir. Cependant, comme <directive module="core">TimeOut</directive>
64c02f1310b7747423957823ee09fb3608430f89nd est actuellement concern&eacute; par de nombreuses op&eacute;rations diff&eacute;rentes, lui
aa0b2780958e9b1467c9d0153a05738e399811a5nd attribuer une valeur trop faible peut provoquer des probl&egrave;mes avec les
2aff288113d772cedca6add888eb643afffe9fb1nd scripts CGI qui pr&eacute;sentent un long temps de r&eacute;ponse.</li>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <li>La valeur de la directive
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd <directive module="core">KeepAliveTimeout</directive> doit aussi &ecirc;tre
2aff288113d772cedca6add888eb643afffe9fb1nd diminu&eacute;e sur les sites sujets aux attaques DoS. Certains sites
2aff288113d772cedca6add888eb643afffe9fb1nd d&eacute;sactivent m&ecirc;me compl&egrave;tement le "maintien en vie" (keepalives)
2aff288113d772cedca6add888eb643afffe9fb1nd &agrave; l'aide de la directive
2aff288113d772cedca6add888eb643afffe9fb1nd <directive module="core">KeepAlive</directive>, ce qui bien s&ucirc;r
2aff288113d772cedca6add888eb643afffe9fb1nd pr&eacute;sente des inconv&eacute;nients en mati&egrave;re de performances.</li>
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd
2aff288113d772cedca6add888eb643afffe9fb1nd <li>Les valeurs des diff&eacute;rentes directives fournies par d'autres modules
e67fa8d3f161e595dd448fc24a591ee17ae59131nd et en rapport avec des d&eacute;lais doivent aussi &ecirc;tre v&eacute;rifi&eacute;es.</li>
05ede5110427cb9dc071cc671d5aaba5d3b88c79nd
bf94bedcb62d7f0b926f4286069def5ee6b07b60nd <li>Les directives
bf94bedcb62d7f0b926f4286069def5ee6b07b60nd <directive module="core">LimitRequestBody</directive>,
2aff288113d772cedca6add888eb643afffe9fb1nd <directive module="core">LimitRequestFields</directive>,
2aff288113d772cedca6add888eb643afffe9fb1nd <directive module="core">LimitRequestFieldSize</directive>,
bbcbf978a3074512c627c797fedcb30eeab7b39dslive <directive module="core">LimitRequestLine</directive>, et
ee5db395bc3723609919edfa96af387eea37c491jim <directive module="core">LimitXMLRequestBody</directive> doivent &ecirc;tre
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd configur&eacute;es avec prudence afin de limiter la consommation de ressources
2aff288113d772cedca6add888eb643afffe9fb1nd induite par les demandes des clients.
e55e60efce8a3e2139132c1d6ad9f6f0d2976614nd </li>
e55e60efce8a3e2139132c1d6ad9f6f0d2976614nd
2aff288113d772cedca6add888eb643afffe9fb1nd <li>Sur les syst&egrave;mes d'exploitation qui le supportent, assurez-vous que
7f3fdc63be07f2ad39e01a44e68e9324998a5c03slive la directive <directive module="core">AcceptFilter</directive> est
7f3fdc63be07f2ad39e01a44e68e9324998a5c03slive activ&eacute;e afin de d&eacute;l&eacute;guer une partie du traitement des requ&ecirc;tes au
7f3fdc63be07f2ad39e01a44e68e9324998a5c03slive syst&egrave;me d'exploitation. Elle est activ&eacute;e par d&eacute;faut dans le d&eacute;mon httpd
75585bd48fe0f30483dba4762e61edf39ea3e0f6nd d'Apache, mais peut n&eacute;cessiter une reconfiguration de votre noyau.</li>
75585bd48fe0f30483dba4762e61edf39ea3e0f6nd
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd <li>Optimisez la directive <directive
03a4ff9ac4c9b8009249010e7c53bb86ff05915and module="mpm_common">MaxRequestWorkers</directive> de fa&ccedil;on &agrave; d&eacute;finir le nombre
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd maximum de connexions simultan&eacute;es au dessus duquel les ressources
3b58542e01ec69422f3086db5825a12fc77b726end s'&eacute;puisent. Voir aussi la <a
a0d937b340692a3578f1d2f2535890c520c4bf0cnd href="perf-tuning.html">documentation sur l'optimisation des
a0d937b340692a3578f1d2f2535890c520c4bf0cnd performances</a>.</li>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <li>L'utilisation d'un <a href="/mpm.html">module mpm</a> thread&eacute;
2aff288113d772cedca6add888eb643afffe9fb1nd vous permet de traiter d'avantage de connexions simultan&eacute;es, ce qui
2aff288113d772cedca6add888eb643afffe9fb1nd minimise l'effet des attaques DoS. Dans le futur, le module mpm
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd <module>event</module> utilisera un traitement asynchrone afin de ne pas
08842292d2f1550b40ae73e0dafc7641c5955c82nd d&eacute;dier un thread &agrave; chaque connexion. De par la
2aff288113d772cedca6add888eb643afffe9fb1nd nature de la biblioth&egrave;que OpenSSL, le module mpm <module>event</module> est actuellement incompatible
d2b809e5d72658bff23819d8b77f20e4939af541nd avec le module <module>mod_ssl</module> ainsi que d'autres filtres
2aff288113d772cedca6add888eb643afffe9fb1nd en entr&eacute;e. Dans ces cas, son comportement se ram&egrave;ne &agrave; celui
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd du module mpm <module>worker</module>.</li>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <li>Il existe de nombreux modules tiers disponibles &agrave; <a
2aff288113d772cedca6add888eb643afffe9fb1nd href="http://modules.apache.org/">http://modules.apache.org/</a> qui
2aff288113d772cedca6add888eb643afffe9fb1nd peuvent retreindre les comportements de certains clients et ainsi
2aff288113d772cedca6add888eb643afffe9fb1nd minimiser les probl&egrave;mes de DoS.</li>
2aff288113d772cedca6add888eb643afffe9fb1nd
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd </ul>
c023f60e35022146373e40249f0c8c8d623b6fcfnd
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd </section>
a43bfa789f4e52dde53ae8e53fa0427b5c1cf977nd
a43bfa789f4e52dde53ae8e53fa0427b5c1cf977nd
a43bfa789f4e52dde53ae8e53fa0427b5c1cf977nd <section id="serverroot">
a43bfa789f4e52dde53ae8e53fa0427b5c1cf977nd
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd <title>Permissions sur les r&eacute;pertoires de la racine du serveur</title>
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd <p>Typiquement, Apache est d&eacute;marr&eacute; par l'utilisateur root, puis il devient
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd la propri&eacute;t&eacute; de l'utilisateur d&eacute;fini par la directive <directive
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd module="mpm_common">User</directive> afin de r&eacute;pondre aux demandes. Comme
73ba54c33b4fcad0e13005e10ea8648c9fe4265bnd pour toutes les commandes ex&eacute;cut&eacute;es par root, vous devez vous assurer
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd qu'elle n'est pas modifiable par les utilisateurs autres que root. Les
2aff288113d772cedca6add888eb643afffe9fb1nd fichiers eux-m&ecirc;mes, mais aussi les r&eacute;pertoires ainsi que leurs parents ne
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd doivent &ecirc;tre modifiables que par root. Par exemple, si vous avez choisi de
2aff288113d772cedca6add888eb643afffe9fb1nd placer la racine du serveur dans <code>/usr/local/apache</code>, il est conseill&eacute; de
2aff288113d772cedca6add888eb643afffe9fb1nd cr&eacute;er le r&eacute;pertoire en tant que root, avec des commandes du style :</p>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <example>
2aff288113d772cedca6add888eb643afffe9fb1nd mkdir /usr/local/apache <br />
2aff288113d772cedca6add888eb643afffe9fb1nd cd /usr/local/apache <br />
2aff288113d772cedca6add888eb643afffe9fb1nd mkdir bin conf logs <br />
2aff288113d772cedca6add888eb643afffe9fb1nd chown 0 . bin conf logs <br />
2aff288113d772cedca6add888eb643afffe9fb1nd chgrp 0 . bin conf logs <br />
2aff288113d772cedca6add888eb643afffe9fb1nd chmod 755 . bin conf logs
2aff288113d772cedca6add888eb643afffe9fb1nd </example>
2aff288113d772cedca6add888eb643afffe9fb1nd
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd <p>Nous supposerons que <code>/</code>, <code>/usr</code> et
2aff288113d772cedca6add888eb643afffe9fb1nd <code>/usr/local</code> ne sont modifiables que par
2aff288113d772cedca6add888eb643afffe9fb1nd root. Quand vous installez l'ex&eacute;cutable <program>httpd</program>, vous
2aff288113d772cedca6add888eb643afffe9fb1nd devez vous assurer qu'il poss&egrave;de des protections similaires :</p>
2aff288113d772cedca6add888eb643afffe9fb1nd
2aff288113d772cedca6add888eb643afffe9fb1nd <example>
03c25fb6f628ac81f2ecb637d1e7502dcee783f3nd cp httpd /usr/local/apache/bin <br />
03c25fb6f628ac81f2ecb637d1e7502dcee783f3nd chown 0 /usr/local/apache/bin/httpd <br />
2aff288113d772cedca6add888eb643afffe9fb1nd chgrp 0 /usr/local/apache/bin/httpd <br />
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd chmod 511 /usr/local/apache/bin/httpd
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd </example>
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd <p>Vous pouvez cr&eacute;er un sous-r&eacute;pertoire htdocs modifiable par d'autres
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd utilisateurs -- car root ne cr&eacute;e ni ex&eacute;cute aucun fichier dans ce
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd sous-r&eacute;pertoire.</p>
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7nd
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd <p>Si vous permettez &agrave; des utilisateurs non root de modifier des fichiers
b95ae799514ad86a15610ad75808d7065e9847c9kess que root &eacute;crit ou ex&eacute;cute, vous exposez votre syst&egrave;me &agrave; une compromission
b686b6a420bde7f78c416b90be11db94cb789979nd de l'utilisateur root. Par exemple, quelqu'un pourrait remplacer le binaire
80d3dc69b0e6ad772135f6a78af3d16bd6cccc42nd <program>httpd</program> de fa&ccedil;on &agrave; ce que la prochaine fois que vous le
red&eacute;marrerez, il ex&eacute;cutera un code arbitraire. Si le r&eacute;pertoire des
journaux a les droits en &eacute;criture (pour un utilisateur non root), quelqu'un
pourrait remplacer un fichier journal par un lien symbolique vers un autre
fichier syst&egrave;me, et root pourrait alors &eacute;craser ce fichier avec des donn&eacute;es
arbitraires. Si les fichiers journaux eux-m&ecirc;mes ont des droits en
&eacute;criture (pour un utilisateur non root), quelqu'un pourrait
modifier les journaux eux-m&ecirc;mes avec des donn&eacute;es fausses.</p>
</section>
<section id="ssi">
<title>Inclusions c&ocirc;t&eacute; serveur</title>
<p>Les inclusions c&ocirc;t&eacute; serveur (Server Side Includes - SSI) exposent
l'administrateur du serveur &agrave; de nombreux risques potentiels en mati&egrave;re de
s&eacute;curit&eacute;.</p>
<p>Le premier risque est l'augmentation de la charge du serveur. Tous les
fichiers o&ugrave; SSI est activ&eacute; doivent &ecirc;tre analys&eacute;s par Apache, qu'ils
contiennent des directives SSI ou non. L'augmentation de la charge induite
est minime, mais peut devenir significative dans le contexte d'un
serveur partag&eacute;.</p>
<p>Les fichiers SSI pr&eacute;sentent les m&ecirc;mes risques que les scripts CGI en
g&eacute;n&eacute;ral. Les fichiers o&ugrave; SSI est activ&eacute; peuvent ex&eacute;cuter tout script CGI
ou autre programme &agrave; l'aide de la commande <code>"exec cmd"</code> avec les permissions
des utilisateur et groupe sous lesquels Apache s'ex&eacute;cute, comme d&eacute;fini
dans <code>httpd.conf</code>.</p>
<p>Des m&eacute;thodes existent pour am&eacute;liorer la s&eacute;curit&eacute; des fichiers SSI, tout
en tirant parti des b&eacute;n&eacute;fices qu'ils apportent.</p>
<p>Pour limiter les dommages qu'un fichier SSI agressif pourrait causer,
l'administrateur du serveur peut activer<a href="/suexec.html">suexec</a>
comme d&eacute;crit dans la section <a href="#cgi">Les CGI en g&eacute;n&eacute;ral</a>.</p>
<p>L'activation des SSI pour des fichiers poss&eacute;dant des extensions
<code>.html</code> ou
<code>.htm</code> peut s'av&eacute;rer dangereux. Ceci est particuli&egrave;rement vrai dans un
environnement de serveur partag&eacute; ou &eacute;tant le si&egrave;ge d'un traffic &eacute;lev&eacute;. Les
fichiers o&ugrave; SSI est activ&eacute; doivent poss&eacute;der une extension sp&eacute;cifique, telle
que la conventionnelle <code>.shtml</code>. Ceci permet de limiter la charge du serveur
&agrave; un niveau minimum et de simplifier la gestion des risques.</p>
<p>Une autre solution consiste &agrave; interdire l'ex&eacute;cution de scripts et
programmes &agrave; partir de pages SSI. Pour ce faire, remplacez
<code>Includes</code> par <code>IncludesNOEXEC</code> dans la directive
<directive module="core">Options</directive>. Notez que les utilisateurs
pourront encore utiliser <code>&lt;--#include virtual="..." --&gt;</code> pour ex&eacute;cuter
des scripts CGI si ces scripts sont situ&eacute;s dans des r&eacute;pertoires sp&eacute;cifi&eacute;s
par une directive
<directive module="mod_alias">ScriptAlias</directive>.</p>
</section>
<section id="cgi">
<title>Les CGI en g&eacute;n&eacute;ral</title>
<p>Tout d'abord, vous devez toujours garder &agrave; l'esprit que vous devez
faire confiance aux d&eacute;veloppeurs de scripts ou programmes CGI ainsi qu'&agrave;
vos comp&eacute;tences pour d&eacute;celer les trous de s&eacute;curit&eacute; potentiels dans les
CGI, que ceux-ci soient d&eacute;lib&eacute;r&eacute;s ou accidentels. Les scripts CGI peuvent
essentiellement ex&eacute;cuter des commandes arbitraires sur votre syst&egrave;me avec
les droits de l'utilisateur du serveur web, et peuvent par cons&eacute;quent &ecirc;tre
extr&egrave;mement dangereux s'ils ne sont pas v&eacute;rifi&eacute;s avec soin.</p>
<p>Tous les scripts CGI s'ex&eacute;cutent sous le m&ecirc;me utilisateur, il peuvent
donc entrer en conflit (accidentellement ou d&eacute;lib&eacute;r&eacute;ment) avec d'autres
scripts. Par exemple, l'utilisateur A hait l'utilisateur B, il &eacute;crit donc
un script qui efface la base de donn&eacute;es CGI de l'utilisateur B. Vous pouvez
utiliser le programme <a href="/suexec.html">suEXEC</a> pour faire en
sorte que les scripts s'ex&eacute;cutent sous des utilisateurs diff&eacute;rents. Ce
programme est inclus dans la distribution d'Apache depuis la version 1.2
et est appel&eacute; &agrave; partir de certaines portions de code du serveur Apache. Une
autre m&eacute;thode plus connue est l'utilisation de
<a href="http://cgiwrap.sourceforge.net/">CGIWrap</a>.</p>
</section>
<section id="nsaliasedcgi">
<title>CGI sans alias de script</title>
<p>Vous ne devez permettre aux utilisateurs d'ex&eacute;cuter des scripts CGI
depuis n'importe quel r&eacute;pertoire que dans l'&eacute;ventualit&eacute; o&ugrave; :</p>
<ul>
<li>Vous faites confiance &agrave; vos utilisateurs pour ne pas &eacute;crire de
scripts qui vont d&eacute;lib&eacute;r&eacute;ment ou accidentellement exposer votre
syst&egrave;me &agrave; une attaque.</li>
<li>Vous estimez que le niveau de s&eacute;curit&eacute; dans les autres parties de
votre site est si faible qu'un trou de s&eacute;curit&eacute; de plus ou de moins
n'est pas tr&egrave;s important.</li>
<li>Votre syst&egrave;me ne comporte aucun utilisateur, et personne ne visite
jamais votre site.</li>
</ul>
</section>
<section id="saliasedcgi">
<title>CGI avec alias de script</title>
<p>Le confinement des CGI dans des r&eacute;pertoires sp&eacute;cifiques permet &agrave;
l'administrateur de contr&ocirc;ler ce que l'on met dans ces r&eacute;pertoires. Ceci
est bien entendu mieux s&eacute;curis&eacute; que les CGI sans alias de script, mais
seulement &agrave; condition que les utilisateurs avec les droits en &eacute;criture sur
les r&eacute;pertoires soient dignes de confiance, et que l'administrateur ait la
volont&eacute; de tester chaque programme ou script CGI &agrave; la recherche d'&eacute;ventuels
trous de s&eacute;curit&eacute;.</p>
<p>La plupart des sites choisissent cette approche au d&eacute;triment des CGI
sans alias de script.</p>
</section>
<section id="dynamic">
<title>Autres sources de contenu dynamique</title>
<p>
Les options de scripting int&eacute;gr&eacute;es qui s'ex&eacute;cutent en tant que partie du
serveur lui-m&ecirc;me, comme <code>mod_php</code>, <code>mod_perl</code>,
<code>mod_tcl</code>, et <code>mod_python</code>,
s'ex&eacute;cutent sous le m&ecirc;me utilisateur que le serveur (voir la directive
<directive module="mpm_common">User</directive>), et par cons&eacute;quent,
les scripts que ces moteurs ex&eacute;cutent peuvent acc&eacute;der aux m&ecirc;mes ressources
que le serveur. Certains moteurs de scripting peuvent proposer des
restrictions, mais pour plus de s&ucirc;ret&eacute;, il vaut mieux partir du principe
que ce n'est pas le cas.</p>
</section>
<section id="systemsettings">
<title>Protection de la configuration du syst&egrave;me</title>
<p>Pour contr&ocirc;ler &eacute;troitement votre serveur, vous pouvez interdire
l'utilisation des fichiers <code>.htaccess</code> qui permettent de
passer outre les fonctionnalit&eacute;s de s&eacute;curit&eacute; que vous avez configur&eacute;es.
Voici un moyen pour y parvenir :</p>
<p>Ajoutez dans le fichier de configuration du serveur</p>
<example>
&lt;Directory /&gt; <br />
AllowOverride None <br />
&lt;/Directory&gt;
</example>
<p>Ceci interdit l'utilisation des fichiers <code>.htaccess</code> dans
tous les r&eacute;pertoires, sauf ceux pour lesquels c'est explicitement
autoris&eacute;.</p>
</section>
<section id="protectserverfiles">
<title>Protection par d&eacute;faut des fichiers du serveur</title>
<p>Le concept d'acc&egrave;s par d&eacute;faut est un aspect d'Apache qui est parfois mal
compris. C'est &agrave; dire que, &agrave; moins que vous ne changiez explicitement ce
comportement, si le serveur trouve son chemin vers un fichier en suivant
les r&egrave;gles normales de correspondance URL - fichier, il peut le retourner
aux clients.</p>
<p>Consid&eacute;rons l'exemple suivant :</p>
<example>
# cd /; ln -s / public_html <br />
puis acc&egrave;s &agrave; <code>http://localhost/~root/</code>
</example>
<p>Ceci permettrait aux clients de parcourir l'ensemble du syst&egrave;me de
fichiers. Pour l'&eacute;viter, ajoutez le bloc suivant &agrave; la configuration
de votre serveur :</p>
<example>
&lt;Directory /&gt; <br />
Order Deny,Allow <br />
Deny from all <br />
&lt;/Directory&gt;
</example>
<p>ceci va interdire l'acc&egrave;s par d&eacute;faut &agrave; tous les fichiers du syst&egrave;me de
fichiers. Vous devrez ensuite ajouter les blocs
<directive module="core">Directory</directive> appropri&eacute;s correspondant
aux r&eacute;pertoires auxquels vous voulez autorisez l'acc&egrave;s. Par exemple,</p>
<example>
&lt;Directory /usr/users/*/public_html&gt; <br />
Order Deny,Allow <br />
Allow from all <br />
&lt;/Directory&gt; <br />
&lt;Directory /usr/local/httpd&gt; <br />
Order Deny,Allow <br />
Allow from all <br />
&lt;/Directory&gt;
</example>
<p>Portez une attention particuli&egrave;re aux interactions entre les directives
<directive module="core">Location</directive> et
<directive module="core">Directory</directive> ; par exemple, si une
directive <code>&lt;Directory /&gt;</code> interdit un acc&egrave;s, une
directive <code>&lt;Location /&gt;</code> pourra passer outre.</p>
<p>De m&ecirc;me, soyez m&eacute;fiant en jouant avec la directive
<directive module="mod_userdir">UserDir</directive> ; la positionner &agrave;
<code>"./"</code> aurait le m&ecirc;me effet, pour root, que le premier exemple plus haut.
Nous vous conseillons
fortement d'inclure la ligne suivante dans le fichier de configuration de
votre serveur :</p>
<example>
UserDir disabled root
</example>
</section>
<section id="watchyourlogs">
<title>Surveillez vos journaux</title>
<p>Pour vous tenir inform&eacute; de ce qui se passe r&eacute;ellement dans votre
serveur, vous devez consulter vos
<a href="/logs.html">fichiers journaux</a>. M&ecirc;me si les fichiers journaux
ne consignent que des &eacute;v&egrave;nements qui se sont d&eacute;j&agrave; produits, ils vous
informeront sur la nature des attaques qui sont lanc&eacute;es contre le serveur
et vous permettront de v&eacute;rifier si le niveau de s&eacute;curit&eacute; n&eacute;cessaire est
atteint.</p>
<p>Quelques exemples :</p>
<example>
grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
grep "client denied" error_log | tail -n 10
</example>
<p>Le premier exemple listera les attaques essayant d'exploiter la
<a href="http://online.securityfocus.com/bid/4876/info/">vuln&eacute;rabilit&eacute;
d'Apache Tomcat pouvant provoquer la divulgation d'informations par des
requ&ecirc;tes Source.JSP mal form&eacute;es</a>, le second donnera la liste des dix
derni&egrave;res interdictions client ; par exemple :</p>
<example>
[Thu Jul 11 17:18:39 2002] [error] [client foo.example.com] client denied
by server configuration: /usr/local/apache/htdocs/.htpasswd
</example>
<p>Comme vous le voyez, les fichiers journaux ne consignent que ce qui
s'est d&eacute;j&agrave; produit ; ainsi, si le client a pu acc&eacute;der au fichier
<code>.htpasswd</code>, vous devriez avoir quelque chose du style :</p>
<example>
foo.example.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
</example>
<p>dans votre <a href="/logs.html#accesslog">journal des acc&egrave;s</a> ; ce
qui signifie que vous avez probablement mis en commentaire ce qui suit dans
le fichier de configuration de votre serveur :</p>
<example>
&lt;Files ".ht*"&gt; <br />
Order allow,deny <br />
Deny from all <br />
&lt;/Files&gt;
</example>
</section>
<section id="merging">
<title>Fusion des sections de configuration</title>
<p>La fusion des sections de configuration est complexe et d&eacute;pend
souvent des directives utilis&eacute;es. Vous devez syst&eacute;matiquement tester
vos modifications pour v&eacute;rifier la mani&egrave;re dont les directives sont
fusionn&eacute;es.</p>
<p>Concernant les modules qui n'impl&eacute;mentent aucune logique de
fusion, comme <directive>mod_access_compat</directive>, le
comportement des sections suivantes est tributaire de la pr&eacute;sence
dans ces derni&egrave;res de directives appartenant &agrave; ces modules. La
configuration est h&eacute;rit&eacute;e jusqu'&agrave; ce qu'une modification soit
effectu&eacute;e ; &agrave; ce moment, la configuration est <em>remplac&eacute;e</em> et
non fusionn&eacute;e.</p>
</section>
</manualpage>