Réseaux locaux et TCP/IP Configuration d`un serveur - Accueil

Transcription

Réseaux locaux et TCP/IP Configuration d`un serveur - Accueil
EICW
Réseaux locaux et TCP/IP
Configuration d’un serveur web avec HTaccess
Notes de cours G. Barmarin
YRES
(50 périodes)
Formation webmaster
EICW
2007-2008
1
Configuration d’un serveur apache avec le fichier .htaccess
(Source : http://www.webmaster-hub.com/publication/article4.html et site d’OVH)
Le fichier .htaccess
Ce chapitre a pour but de vous faire découvrir le fichier .htaccess et son utilisation pour
améliorer votre site web.
Le fichier .htaccess est un fichier texte particulier qui est détecté par le serveur web (Apache), et
qui permet de définir des règles spéciales sur un répertoire et l'ensemble de ses sousrépertoires. Ces fichiers n'apparaissent pas dans l'arborescence du répertoire concerné si un
internaute fait un accès à un répertoire listable (qui ne contient pas de page index, et dont le
listage n'est pas interdit).
Ce simple fichier texte vous permet d’ajuster finement certains paramètres de votre serveur
Apache tels que les redirections, les réécritures d’URL, les redirections et les restrictions
d’accès. Avec le protocole ftp, il est impératif de transférer le fichier .htaccess en mode texte et
non en mode binaire, de manière à obtenir les caractères de fin de ligne appropriés au système
d’exploitation du serveur. De même, l’édition en local devra se faire en mode texte.
Cette puissance permet le meilleur comme le pire. Même si la syntaxe des règles du fichier
.htaccess est souvent triviale, la moindre faute dans celles-ci se traduira le plus souvent par une
« erreur 500 ». L’erreur 500 est une erreur interne au serveur, survenant le plus souvent lors de
l’appel d’un module inexistant ou effectuant une opération illégale.
L’une des utilisations les plus répandues de ce fichier est l’affichage d’une page 404 (page
inexistante) personnalisée, beaucoup plus utile que celle procurée par défaut par votre
navigateur favori.
Votre hébergement permet-il son utilisation ?
C’est, bien sûr, la première question à se poser. Elle ne fait malheureusement pas partie de
celles auxquelles on peut répondre simplement.
Si votre hébergement se fait sur un système Unix/Linux et que le serveur Web est de type
Apache, le fichier .htaccess est supporté. Ceci ne veut malheureusement pas dire que votre
hébergeur en autorise l’utilisation.
Le plus souvent, les hébergements gratuits ont cette fonctionnalité désactivée.
Si votre hébergeur vous permet de restreindre l’accès à certains de vos répertoires à l’aide d’un
mot de passe, c’est en général à l’aide du fichier .htaccess, dans ce cas, tout va bien.
De deux choses l’une : soit vous téléchargez votre fichier .htaccess et tout fonctionne comme
vous l’espériez, soit cela ne fonctionne pas et au pire vous obtenez une "erreur 500". Dans ce
cas, il ne vous reste plus qu’à retirer le fichier incriminé. Ce n’est pas bien dangereux, mais
réservez vos essais à une période creuse. Le seul cas où un fichier .htaccess pourrait poser de
réels problèmes est celui où le serveur utilise des extensions Microsoft FrontPage.
Ces dernières utilisent le fichier .htaccess et son écrasement les empêcherait à jamais de
fonctionner.
Si vous n’aimez pas vivre dangereusement, le plus simple reste encore de demander à votre
hébergeur ou à une connaissance ayant le même type d’hébergement que vous.
2
Pour effectuer vos tests, il est judicieux de créer un répertoire temporaire sur votre site, dans
lequel vous mettrez un fichier index.html et le fichier .htaccess sur lequel vous travaillez.
Une fois votre fichier .htaccess mis au point, déplacez le dans le répertoire que vous voulez
protéger, ou à la racine de votre site.
C’est supporté ? Bien ! Continuons !
Comment créer un fichier .htaccess
Avant toutes choses, il faut arriver à créer ce fichier. Sous pratiquement tous les systèmes
d’exploitation, cela se fait sans problème comme n’importe quel fichier texte. Windows peut
toutefois ne pas accepter la création de ce fichier tel que souhaité. En effet, .htaccess est vu par
Windows comme un fichier sans nom comportant une extension non standard. Si notepad ou
votre éditeur favori ne vous permet pas d’enregistrer ce fichier avec le nom souhaité, sauvez-le
comme htaccess.txt, vous le renommerez plus tard sur votre serveur à l’aide de votre logiciel de
transfert ftp.
Note : Sous windows, vous ne pouvez pas créer directement un fichier nommé .htaccess ou
.htpasswd. Il vous suffit alors de le nommer autrement, de le transférer sur votre espace web, et
de le renommer en .htaccess ou .htpasswd ensuite à l'aide de votre client FTP.
Attention : Avec le protocole ftp, il est impératif de transférer le fichier .htaccess en mode texte
et non en mode binaire, de manière à obtenir les caractères de fin de ligne appropriés au
système d’exploitation du serveur. De même, l’édition en local devra se faire en mode texte.
Une fois renommé, le fichier doit impérativement se nommer « .htaccess » (débutant par un
point), sinon il sera sans effet.
Que puis-je faire avec un fichier .htaccess ?
Les deux éléments les plus intéressants concernent la protection des accès à votre site web.
Ces deux éléments possèdent des guides séparés :
- protection des accès à un répertoire via une authentification :: HtaccessProtection ::
- empécher certaines adresses IP d'accéder à votre site :: HtaccessProtectIP ::
Vous pouvez également effectuer d'autres opérations que nous allons détailler ci-dessous...
Empécher le listage du contenu d'un répertoire
Pour empécher les internautes de lister l'ensemble des fichiers contenus dans un répertoire en
l'absence d'index (.cgi, .html, .php etc ....), créez un fichier .htaccess contenant la ligne cidessous :
Options -Indexes
Rediriger les messages d'erreur
Si vous voulez utiliser des messages d'erreur personnalisés ou rediriger les erreurs sur une
page web, créez un fichier .htaccess contenant des lignes de cette forme :
ErrorDocument numéro_d_erreur message_ou_destination
Remplacez "numéro_d_erreur" par le numéro correspondant.
3
Les 3 erreurs les plus courantes sont :
404 : page inexistante
403 : accès interdit
500 : erreur interne du serveur
Remplacez "message_ou_destination" par l'action à effectuer. Pour afficher un simple message,
tapez le message correspondant entre guillements. Pour rediriger sur une page, mettez le
chemin d'accès à cette page.
Voici deux exemples pour vous éclairer :
Vous souhaitez indiquer "Désolé, vous n'avez pas le droit d'accéder à ce fichier" lors d'une
erreur 403. Vous mettez la ligne ci-dessous dans votre .htaccess :
ErrorDocument 403 "Désolé, vous n'avez pas le droit d'accéder à ce
fichier"
Vous souhaitez renvoyer les erreurs 404 sur votre page personnalisée 404.html (pour votre
domaine : domaine.com) :
ErrorDocument 404 http://www.domaine.com/404.php
Si cela ne fonctionne pas verifiez que dans les proprietes d'Internet explorer vous avez
-onglet Avancé
-décocher "Afficher des messages d'erreur HTTP simplifiés".
Spécifier un fichier d'index différent
Par défaut, le fichier index d'un répertoire est index.html, index.htm ou index.php. Si vous voulez
que ce soit un autre fichier, vous pouvez mettre une ligne de ce type dans votre .htaccess :
DirectoryIndex nom_du_fichier
Par exemple, si vous voulez utiliser la page accueil.html comme page d'index, utilisez la ligne
suivante :
DirectoryIndex accueil.html
Faire de la réécriture d'URL
Vous pouvez, pour des raisons diverses, souhaiter réécrire les URLs de votre site. Pour cela,
vous pouvez utiliser un fichier .htaccess de la forme suivante :
RewriteEngine on
RewriteRule règle_de_réécriture
Il suffit de remplacer "règle_de_réécriture" par la règle dont vous avez besoin. Vous pouvez bien
sûr écrire plusieurs règles différentes dans un même fichier. Malheureusement, les possibilités
sont trop nombreuses et les besoins trop diversifiés pour en faire le tour dans ce guide. Référezvous à la documentation officielle pour plus de détails:
http://httpd.apache.org/docs/misc/rewriteguide.html[4]
Pour les spécificités de mod_rewrite sur les hébergements OVH, vous pouvez également
consulter ce guide: HtaccessModRewrite
4
Nous allons commencer notre découverte avec une fonctionnalité bien utile
La page d’erreur « sur mesure »
Comme tout internaute, vous avez déjà eu l’occasion de faire face à l’erreur la plus répandue,
l’erreur 404. Cette erreur vient du fait que l’Internet est essentiellement mouvant, des millions de
pages y apparaissent et disparaissent chaque jour.
Si un de vos visiteurs décide de mettre en favori l’une de vos pages pour y revenir plus tard, rien
ne lui garantit que cette page sera toujours accessible à sa prochaine visite.
Vous pouvez à tout moment décider de la déplacer, de la renommer ou de la supprimer. C’est
votre site, vous en avez le droit le plus absolu.
Que se passera-t-il lors du retour de ce même visiteur ? C’est simple : son navigateur fera une
requête pour la page souhaitée, requête à laquelle le serveur répondra « pas trouvé ».
Dès la genèse du Web, les différents concepteurs ont bien intégré le fait que les utilisateurs
seraient d’origines différents et qu’une page mentionnant ce laconique « pas trouvé » ne pourrait
pas être exhaustive sur le plan linguistique. Ils ont donc défini des codes pour chaque type
d’erreurs, laissant aux navigateurs le soin d’afficher le message dans la langue de l’utilisateur.
D’où, dans ce cas précis, l’erreur communément appelée « erreur 404 ».
Pour éviter à vos visiteurs cette page peu esthétique, une seule ligne suffit dans le fichier
.htaccess :
ErrorDocument
404
/mapage.html
Dès ce moment, toutes les requêtes pour des pages inexistantes recevront en retour la page
mapage.html. Si vous êtes prévoyant, cette page pourrait présenter un plan de votre site qui
évitera à votre visiteur de se sentir seul et abandonné de tous. Il faut bien sûr que ce fichier
« mapage.html » existe à la racine de votre site sinon votre serveur ne saura plus où donner de
la tête. Ne souriez pas, c’est arrivé à l’auteur de ces lignes.
D’une manière plus générale, l’instruction « ErrorDocument » s’écrit :
ErrorDocument
code-erreur
fichier
En plus de l’erreur 404, vous pouvez donc fournir des pages spécifiques pour les erreurs les
plus fréquentes, par exemple :
401
400
403
500
-
Autorisation Requise
Mauvaise requête
Interdit
Erreur interne serveur
La restriction d’accès par mot de passe
Nous avons tous sur nos sites certains répertoires que nous souhaitons protéger des yeux
indiscrets. Qu’il soit bien entendu ici, que la meilleure protection possible pour un document
passe par la non publication sur le Web, quelle que soit le niveau de protection du serveur ou du
répertoire.
Ceci est encore plus vrai s’il s’agit d’un hébergement mutualisé dont la gestion est assurée par
un organisme indépendant. Ne stockez donc pas sur votre serveur Web d’informations dont la
divulgation pourrait vous pénaliser.
Ces limitations étant exprimées, il est souvent utile ou dans certains cas indispensable d’avoir
dans un répertoire des informations telles que le mot de passe d’accès à votre base de données
ou les statistiques de fréquentation de votre serveur.
5
Dans le cadre des hébergements sur serveur Apache, il est aisé de soustraire certains
répertoires à la curiosité du public. Cette fois encore, le fichier .htaccess est votre allié.
Le mode opératoire en est simple et s’appuie sur un deuxième fichier qui contiendra les noms et
mots de passe des personnes autorisées à accéder au contenu du répertoire.
Dans le fichier .htaccess, saisissez les informations suivantes :
AuthUserFile /home/login/.htpasswd
AuthGroupFile /dev/null
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
Analysons de plus près ces quelques lignes :
AuthUserFile /home/login/.htpasswd ou AuthUserFile
/home/votre_login_ftp/www/'chemin d'accès au fichier
.htpasswd'/.htpasswd
donne le répertoire dans lequel se trouve le fichier contenant les paires login/mot de passe des
visiteurs autorisés. Notez bien qu’il ne s’agit pas d’une URL, mais bien d’un chemin d’accès
depuis la racine du serveur.
L’usage veut que ce fichier soit souvent nommé .htpasswd, mais ce n’est pas du tout une
obligation. Il est même conseillé d’utiliser un autre nom, le fichier sera d’autant plus difficile à
trouver. Ne le mettez pas dans un répertoire qui fait partie du site mais placez-le plutôt en
dehors de cette arborescence si vous en avez le choix.
Dans le système d’exploitation Unix/Linux, tous les fichiers dont le nom commence par un point
décimal sont des fichiers cachés. Attention : caché ne signifie pas invisible, mais signifie plutôt
qu’ils n’apparaissent pas dans les commandes les plus fréquentes si leur affichage n’est pas
spécifiquement demandé.
AuthGroupFile /dev/null
permet de donner un droit d’accès à un ensemble d’utilisateurs faisant partie d’un même groupe
et est rarement utilisée dans le cas de sites Web personnels. Dans l’exemple, le fichier
« /dev/null » est l’équivalent Unix de « nulle-part » ou « pas de fichier spécifique »
AuthName "Acces Restreint"
est la chaîne de caractère qui apparaîtra dans la boîte de dialogue au moment de la saisie du
nom et du mot de passe.
AuthType Basic
détermine le type d’authentification utilisé, dans notre cas l’authentification HTTP standard.
<limit GET POST> ... </limit>
6
détermine le type d’opérations permises. GET s’applique à la majorité des pages Web, PUT est
utilisé par certains scripts ou éditeurs pour faire de l’upload sous protocole http. Il est important
de mettre GET et POST en majuscule sur les dernières versions d’Apache.
require valid-user
signifie littéralement qu’un utilisateur valide est requis, à savoir un utilisateur pour le nom duquel
une ligne existe dans le fichier .htpasswd. Une variante pourrait être :
require user pierre paul
pour limiter l’accès aux seuls utilisateurs pierre et paul
Par défaut, Apache applique les restrictions du fichier .htaccess à l'ensemble des fichiers du
répertoire dans lequel il se trouve ainsi qu'à tous les fichiers contenus dans ses sous-répertoires.
Pour bloquer l'accés à un ou plusieurs fichiers précis et non pas à tout le répertoire, il suffit
d'ajouter les balises (une balise FILES par fichier):
<Files test.php>
AuthUserFile /home/votre_login_ftp/www/'chemin d'accès au fichier .htpasswd'/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthType basic
<Limit GET POST>
require valid-user
</Limit>
</Files>
Il faut utiliser une seule balise <Files> par fichier.
Sinon, l'erreur suivante est reportée dans le fichier de log des erreurs :
.htaccess: Multiple arguments not (yet) supported.
Pour info, il faut ajouter que depuis Apache 1.3, il est conseillé d'utiliser la balise <FilesMatch> à
la place de la balise <Files>.
Cette nouvelle balise ne supporte aussi qu'un seul argument.
Le fichier .htpasswd
Ce fichier contiendra la liste des utilisateurs ayant le droit de se connecter, et le mot
de passe qui leur est associé. Il sera ensuite utilisé par le fichier .htaccess.
Il s'agit d'un fichier texte simple, à l'intérieur duquel sont indiqués les noms des
utilisateurs et leur mot de passe sous forme cryptée, par exemple
« pierre :saqKFoHV4rU.E »
Le fichier .htpasswd ne doit pas forcément être au même endroit que le fichier .htaccess. Vous
pouvez par exemple le placer à la racine de votre hébergement, et l'utilisez pour protéger
différents répertoires de votre site, étant donné qu'un seul fichier .htpasswd peut être utilisé par
plusieurs fichiers .htaccess. Le fichier .htpasswd doit contenir une ligne par utilisateur précisant
le nom d'utilisateur et le mot de passe associé.
Ces lignes sont de la forme suivante :
7
utilisateur:mot_de_passe_crypté
Pensez a mettre un retour chariot a la suite du mot de passe crypté.
La seule difficulté, pour autant que c’en soit une, étant de crypter le mot de passe. Si vous avez
accès a un shell Unix/Linux utilisez la commande :
htpasswd -c passwdfile username
Dans cette commande, « passwdfile » représente le chemin complet du fichier mot de passe
souhaité, « username » est le nom de l’utilisateur.
Si vous n’avez pas accès à cette commande, vous trouverez un programme pour encoder vos
mots de passe à l’adresse suivante :
http://www.webmaster-hub.com/publication/Le-fichier-htaccess.html (en bas de page)
Voici comment encrypter votre mot de passe (algorithme DES avec clé) :
Nom:
Mot de passe:
Clé:
Crypter
La clé de deux caractères demandée permet de diversifier les mots de passe générés. Ces deux
caractères constituent ce qu’on appelle le "sel" (salt) de l’encryptage. Vous voilà en mesure de
restreindre l’accès à vos répertoires privés ou, pourquoi pas, de créer des répertoires réservés
aux copains ou aux membres de votre famille.
Après avoir rempli les deux premiers champs et cliqué sur "crypter", vous
récupérerez la forme crypté du mot de passe dans le champs "Le mot crypté". Il
faudra copier le texte correspondant dans le fichier .htpasswd
Un autre programme se trouve sur ovh :
http://www.ovh.com/cgi-bin/crypt.pl
Vous avez déplacé vos pages ?
Il est parfois nécessaire de déplacer certaines pages ou répertoires d’un site dans l’optique
d’une restructuration. Ceci ne va pas sans poser quelques problèmes inhérents au changement
d’adresse :
la page n’est plus accessible pour les visiteurs qui l’ont mise dans leurs favoris.
les références à cette page dans les moteurs de recherche et annuaires pointent vers
l’ancienne adresse.
Dans ces deux cas de figure, plutôt que de présenter une page d’erreur personnalisée au
visiteur, il est beaucoup plus élégant de le rediriger automatiquement vers la nouvelle adresse.
Ici encore, le fichier .htaccess nous sera précieux.
8
Pour déplacer une page :
RedirectPermanent ancien.html http://www.domaine.tld/nouveau.html
Cette directive signale au navigateur que la page ancien.html a été renommée nouveau.html et
renvoie l’entête correcte au navigateur pour signaler ce fait (entête 301 "déplacement
permanent"). L’avantage de cette approche est que les robots d’indexation des différents
moteurs apprendront que cette page a été déplacée et modifieront leur index pour refléter la
nouvelle adresse. Dans le cas de Google, le PageRank ( Indice de mesure de popularité d’une
page utilisé par Google et noté sur une échelle de 0 à 10.) de l’ancienne page sera
automatiquement transmis à la nouvelle page.
Pour déplacer un répertoire :
RedirectPermanent /ancien http://www.domaine.tld/nouveau/
Il est important de noter que dans le cas d’utilisation de la directive RedirectPermanent, la
nouvelle adresse de page ou de répertoire doit être une URL complète.
Pour changer de nom de domaine :
RedirectPermanent / http://www.nouveaudomaine.tld/
redirigera la racine de l’ancien site vers le nouveau domaine.
Note : Seuls les moteurs de recherche ajusteront leur index pour refléter la nouvelle adresse.
N’oubliez pas de demander aux annuaires de modifier leurs liens vers vos pages.
Comment bloquer certaines IP au niveau de mon site ?
Procédure à suivre
Il vous suffit de créer un fichier nommé .htaccess et de le placer dans le répertoire www (ou
dans un repertoire répertoire particulier que vous souhaitez restreindre). Ce fichier devra
contenir des règles de blocage. Chaque règle est définie sur une ligne de la forme suivante :
Deny from adresse_IP
Ou Deny from plage_IP
Ou Deny from domaine
Il vous suffit ensuite de remplacer le terme générique par l'élément que vous voulez bloquer.
Voici quelques exemples :
Vous souhaitez bloquer l'adresse IP 192.168.1.2, vous écrivez :
Deny from 192.168.1.2
Vous souhaitez bloquer toutes les IP en 192.168.x.x, vous écrivez :
Deny from 192.168
9
Vous souhaitez bloquer toutes les adresses IP qui ont une identification Wanadoo (c'est un
exemple, il n'y pas de raison de le faire à priori...), vous écrivez :
Deny from .wanadoo.fr
Gérer les types de fichiers
Un type MIME (en anglais MIME type) est un ensemble de types de fichiers standard,
permettant d'associer une extension de fichier donnée à une application, afin d'automatiser le
lancement de l'application.
Ajouter un Mime-Type à un répertoire
La syntaxe est la suivante :
AddType (mime/type [liste d'extension])
Voici un exemple de mise en oeuvre du fichier .htaccess :
AddType image/x-photoshop PSD
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .htm
Le serveur enverra au navigateur Internet le fichier en lui disant de lancer le programme
PhotoShop (s'il est installé sur votre machine) et de lui donner le fichier.
Habituellement, ceci est utilisé pour des fichiers nécessitant un Plug-In particulier non reconnu
par votre navigateur.
Cette commande permet aussi d'annuler tout élément prédéfini. Ainsi, vous pouvez enregistrer
un fichier .wav avec une extension .gif et préciser au navigateur de considérer les fichiers .gif
comme des fichiers audio !
En pratique, on pourra donc utiliser cette commande pour ordonner à PHP de parser d'autres
extensions de fichier, .htm par exemple.
Forcer tous les fichiers d'un répertoire à un Mime-Type
Voici la syntaxe à adopter :
ForceType (mime/type)
Par exemple avec la ligne suivante, tous les fichiers du répertoire contenant le fichier .htaccess
seront considérés comme étant des fichiers .jpg quelle que soit leur extension :
ForceType image/jpg
Note aux utilisateurs FrontPage
Lorsque les extensions FrontPage sont installées, un fichier .htaccess est créé à la racine du
site. Il faut donc être très prudent et éviter d’écraser ce fichier, faute de quoi les extensions
FrontPage ne fonctionneraient plus sur votre site. De même, avant toute modification, une
sauvegarde du fichier originel est utile, car toute erreur dans ce fichier pourrait rendre l’entièreté
de votre site inaccessible.
Sur cette page Web, vous pouvez générer via un simple formulaire les instructions les
plus souvent utilisées à mettre dans votre fichier HTaccess:
10
http://aspirine.org/htaccess.html
Note aux utilisateurs FrontPage
Lorsque les extensions FrontPage sont installées, un fichier .htaccess est créé à la racine du
site. Il faut donc être très prudent et éviter d’écraser ce fichier, faute de quoi les extensions
FrontPage ne fonctionneraient plus sur votre site. De même, avant toute modification, une
sauvegarde du fichier originel est utile, car toute erreur dans ce fichier pourrait rendre l’entièreté
de votre site inaccessible.
Sur cette page vous pouvez générer les instructions à mettre dans votre fichier HTaccess
via un formulaire : http://aspirine.org/htaccess.html
Références
http://help.ovh.com/HtaccessOther
http://guide.ovh.com/HtaccessAutre
http://www.domaine.com/404.php
http://httpd.apache.org/docs/misc/rewriteguide.html
http://www.infres.enst.fr/~danzart/frames/htaccess.html
http://www.commentcamarche.net/apache/apacht.php3
11