30 min
Identifier les fichiers et répertoires utilisé par apache. S'initier à la configuration du serveur.
| Répertoire | Fonction |
|---|---|
| bin | Ré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-bin | Réperoire contenant les scripts CGI publiés sur le serveur. (différent de publication docuement html : pas les mêmes contraintes de sécurité) |
| conf | Répertoire où sont stockés les fichiers de configuration. |
| htdocs | Racine de publication. Ce qui est situé sous htdocs est pbulié sur le site web |
| icons | Images utilisés par le serveur : symboles par types de fichiers,... |
| includes | Fichiers includes utilisés pour la compilation de modules additionnels |
| lib | Librairies utilisées par Apache |
| libexec | Emplacement standard où sont stockés les modules dynamiques (*.so) d'Apache |
| logs | |
| modules | Modules / extensions pour Apache sous Windows |
| proxy | Répertoire de cache du proxy lorsque Apache joue ce rôle (stockage des fichiers demandés fréquemment par les utilisateurs du proxy) |
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.
Créer le répertoire C:\tp_php et copier un fichier html sous le nom index.html.
Editer le fichier de configuration d'Apache
Créer l'alias : Avant la section Virtual host en fin de fichier ajouter la ligne :
Alias /tp-php "C:\tp_php"démarrer le serveur et consulter l'URL http://localhost/tp-php
Ca ne marche pas, la consultation de cette URL est interdite (code HTTP 401 : Forbidden). C'est normal...
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.
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 :
<Directory> et fichiers .htaccess done simultaneously (avec les .htaccess, si autorisé, qui surchargent les <Directory>)
<DirectoryMatch>, et <Directory> avec expressions réguliéres
<Files> et <FilesMatch> simultanément
<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