Configuration d'Apache

Temps30 min

Identifier les fichiers et répertoires utilisé par apache. S'initier à la configuration du serveur.

Arborescence et fichiers d'Apache

RépertoireFonction
binRépertoire où est stocké le binaire httpd (pragramme exécutable d'Apache) et les utilitaires livrés avec Apache (htpasswd : création de mot de passe, apxs : compilation de modules, ab : apachebench, utilitaire pour tester la charge d'un serveur...)
cgi-binRéperoire contenant les scripts CGI publiés sur le serveur. (différent de publication docuement html : pas les mêmes contraintes de sécurité)
confRépertoire où sont stockés les fichiers de configuration.
htdocsRacine de publication. Ce qui est situé sous htdocs est pbulié sur le site web
iconsImages utilisés par le serveur : symboles par types de fichiers,...
includesFichiers includes utilisés pour la compilation de modules additionnels
libLibrairies utilisées par Apache
libexecEmplacement standard où sont stockés les modules dynamiques (*.so) d'Apache
logs
modulesModules / extensions pour Apache sous Windows
proxyRépertoire de cache du proxy lorsque Apache joue ce rôle (stockage des fichiers demandés fréquemment par les utilisateurs du proxy)

Création d'un alias

nous allons maintenant rendre accessible par le web un répertoire quelconque du disque dur à l'aide de moudle mod_alias. Ce mdules permet d'associer une URL du serveur, par exemple /mesexemples, à un répertoire visible par le serveur (peut être situé sur un lecteur réseau), par exemple D:\mesexemples. Le répertoire est alors accessible par l'URL http://localhost/mesexemples.

Nous avons bien crée l'Alias, mais il nous est interdit d'y accéder. C'est parce qu'il est situé en dehors de la racine de publication (C:\web\htdocs). Nous allons voir pourquoi.

Protection des répertoires et fichiers .htaccess

Le serveur web Apache est un programme. Il peut voir tous les répertoires visibles par l'utilisateur sous l'identité duquel il s'exécute.

La configuration d'Apache contient une protection qui limite l'accès aux répertoires visibles par Apache.

Les protections pour un répertoires sont définies à l'intérieur d'une directive <Directory "C:\monrepertoire_monrep2\">. Le même type de protections est possible sur une URL. On utilise alors des directives <Location "/url/">

La racine de l'ordinateur (C:\ sous Windows, / sous Unix) est en accès interdit pour tout le monde :

<Directory / >
    Options FollowSymLinks
    AllowOverride None
</Directory>

La racine de publication (dans notre cas C:\web\htdocs) est en accès libre pour tout le monde :

<Directory "C:/web/htdocs">

#
# This may also be "None", "All", or any combination of "Indexes",
# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
    Options Indexes FollowSymLinks MultiViews

#
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo", 
# "AuthConfig", and "Limit"
#
    AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

Pour que l'accès à un répertoire soit autorisé il faut que cela soit expréssement précisé. Un répertoire qui n'a pas de directive de protections hérite de celles de ses répertoires parents.

Apache intérprête soit d'abord les autorisations et ensuite les interdictions (order allow,deny) soit l'inverse (order deny,allow). Le plus prudent est donc d'utiliser la premièere forme (une interdiction est alors prioritaire sur une autorisation)

Les directives Allow (autoriser) et Deny (interdire) prennent comme argument : all, none, x.x.x.x (numéro IP de machine ou de réseau), nom.domaine.com (nom DNS de machine ou de réseau)

On peut protéger des répertoires, des urls, des répertoires en fonction du nom (expressions réguliéres), des URLs en fonction du nom, des fichiers, des fichiers en fonction du nom/de l'extension.

L'ordre dans lequel les directives sont interprétées est le suivant :

  1. <Directory> et fichiers .htaccess done simultaneously (avec les .htaccess, si autorisé, qui surchargent les <Directory>)

  2. <DirectoryMatch>, et <Directory> avec expressions réguliéres

  3. <Files> et <FilesMatch> simultanément

  4. <Location> et <LocationMatch> simultanément

On protége donc le répertoire C:\tp_php explicitement :

<directory "C:\tp_php">
	order allow,deny
	allow from all
</directory>

Après avoir démarré le serveur, l'URL http://localhost/tp-php/ est accessible.

Les directives de protections peuvent être contenues dans un fichier .htaccess qui définit les portections pour le répertoire où il est situé et ses sous-répertoires.

Pour protéger un répertoire pour que seul l'utilisateur toto peuisse y accéder utiliser (contenu du fichier .htaccess) :

# Acces restreint a l'utilisateur toto
order allow,deny
allow from all
 
AuthType Basic
AuthName "Zone Protegee"
AuthUserFile C:\web\conf\passwd
AuthGroupFile C:\web\conf\group
Require user invite

Où le fichier passwd est contient les noms d'utilisateur et les mots de passe crypté avec l'utilitaire htpasswd