Protéger un serveur Apache avec .htaccess
Protéger un serveur Apache avec .htaccess
<Directory "c:/www/monsite/AccesProtege">
Protection d'un serveur Apache PHP MySQL AllowOverride AuthConfig
Options Indexes
.htaccess est un simple fichier texte qui vous permet de </Directory>
gérer de manière décentralisée un serveur Apache (le
serveur des élèves, par exemple). Par exemple, La directive AllowOverride permet de dire au serveur
.htaccess vous permet de protéger certains répertoires quelles sont les options de configuration que vous
avec des mots de passe, de restreindre l'accès à votre pouvez spécifier dans le fichier .htaccess. Ici, on lui dit
page Web, d'empêcher le listage de vos répertoires de ne s'occuper que des Authentifications par mot de
(quand ils ne contiennent pas de fichier index.html), ou passe et on permet l'affichage du contenu du dossier.
encore d'utiliser vos propres pages d'erreur (404, 403)...
Créons maintenant un fichier contenant les informations
1. Protection d'un répertoire par .htaccess de groupes. Les groupes correspondent à un grade, un
(authentification par mot de passe) rang de personnes ayant les mêmes pouvoirs. Ici BOB
et TOTO sont des administrateurs du site et JACKY est
un simple membre. Nous allons stocker ces informations
Nous allons voir ensemble comment protéger un
de groupe dans le fichier groups dans c:\www\apache-
répertoire. D'abord, créons un répertoire à protéger
2.2\users. Vous pouvez lui donner le nom que vous
c:\www\monsite\AccesProtege. Il pourra contenir toutes
voulez. Voici son contenu :
sortes d'informations à protéger, afin de voir s'il est
efficace, mettez y des fichiers html, ou des images...
Ensuite, il va falloir créer un répertoire servant à stocker admins: BOB TOTO
les fichiers de mot de passe et de groupes d'utilisateurs. membres: JACKY
Ce répertoire doit lui même être protégé, il ne doit donc
pas se situer dans un répertoire racine du site ou de ses Attention : ne mettez surtout pas d'espace entre le nom
enfants. Créons le dossier c:\www\apache-2.2\users. du groupe et les deux points (:) sinon cela ne marchera
pas.
Création des utilisateurs et mots de passe avec la
commande htpasswd. Maintenant, créons un utilisateur Ensuite, plaçons nous dans le dossier
BOB ayant marley pour mot de passe (crypté en MD5 c:\www\monsite\AccesProtege et créons le fichier
par défaut) et le fichier de mots de passe (vous pouvez .htaccess. Petite astuce : comme vous ne pouvez pas
le nommer autrement). À la première insertion d'un directement créer un fichier ayant un nom commençant
utilisateur, il faut créer le fichier à l'aide du paramètre -c par un point (.) nommez le comme vous voulez puis
À la création des utilisateurs suivants JACKY et TOTO, il renommez le sous l'invite MS-DOS à l'aide de la
ne faut pas donner en argument le paramètre -c car le commande ren AncienNom .htaccess vous devez bien
fichier est déjà existant. Vous pouvez voir la liste des entendu vous trouver dans le répertoire contenant ces
paramètres possibles en tapant htpasswd /?. fichiers. Ensuite éditez .htaccess et insérez y ces
quelques lignes :
C:\>htpasswd -c c:\www\apache-2.2\users\passwords
BOB AuthType Basic
Automatically using MD5 format. AuthName "zone protégée"
New password: ****** AuthUserFile c:/www/apache-2.2/users/passwords
Re-type new password: ****** AuthGroupFile c:/www/apache-2.2/users/groups
Adding password for user BOB Require group admins
La syntaxe de .htaccess s'en trouve légèrement points, par exemple l'adresse IP de clipper est
modifiée, par exemple pour protéger un fichier nommé 129.199.121.1.
common.php :
Pour interdire une adresse IP :
<Files common.php>
deny from 123.456.789.10
AuthName "Accès limité au fichier
common.php par .htaccess" Inversement, on peut autoriser une adresse IP :
3
ENI
AuthGroupFile /dev/null
AuthName InterditPartiel ErrorDocument 400 "Erreur de requete"
AuthType Basic
order deny,allow
deny from all
order allow,deny allow from .telecom-paristech.fr
allow from all
deny from ulysse.telecom-paristech.fr
Exemple 2 :
Après cela, les fichiers qui se trouvent dans le répertoire
protégé ne seront accessibles qu'au domaine de
8. Personnalisation des messages (pages) Telecom-ParisTech.
d'erreur Si une personne non autorisée tente d'y accéder, elle
verra s'afficher la page ErreurAcces.html sur son
navigateur.
Vous pouvez personnaliser le message d'erreur qui
apparaîtra à l'utilisateur non autorisé lors d'une tentative
Htaccess.txt
d'accès à une page protégée en précisant une page
html à afficher dans ce cas. Ceci est également valable
AuthGroupFile /dev/null
pour d'autres messages d'erreur (fichier non trouvé,
AuthName Authorisation
requête annulée).
AuthType Basic
D'abord, créez vos propres pages d'erreur. Ensuite,
dans votre fichier .htaccess, écrivez :
ErrorDocument 403 /~danzart/erreurs/ErreurAcces.html
ErrorDocument 402 /~danzart/erreurs/ErreurAcces.html
ErrorDocument numero_d'_erreur /chemin/fichier.html ErrorDocument 405 /~danzart/erreurs/ErreurAcces.html
5
ENI
phpMyAdmin ne serait plus en mesure d'accéder au Avec false l'authentification se fait selon une ancienne
serveur MySQL). méthode qui utilise les valeurs de $cfgServers[1]['user']
et $cfgServers[1]['password'] pour s'identifier auprès de
En fait le fonctionnement de phpMyAdmin est réglé par MySQL. L'installation de base résumée ci-dessus reflète
le fichier /var/www/html/phpMyAdmin/config.inc.php3 cette authentification. En clair phpMyAdmin s'enregistre
sous compte root et sans mot de passe. C'est
précisément la raison pour laquelle il ne faut surtout pas,
Ce fichier, assez court, contient notamment les lignes
en cours d'installation de MySQL, donner suite à la
suivantes :
proposition du script de définir un mot de passe
administrateur. Définir un mot de passe à ce stade de
l'installation bloquerait le fonctionnement ultérieur de
// The $cfgServers array starts with phpMyAdmin. Pour le vérifier faites simplement l'essai
$cfgServers[1]. Do not use $cfgServers[0]. de fixer un mot de passe pour root dans MySQL. La
syntaxe SQL est la suivante (mais vous l'aurez déjà
// You can disable a server config entry by deviné) :
setting host to ''.
mysql> update user set
$cfgServers[1]['host'] = 'localhost'; // MySQL Password=password('mdp_root') where user = 'root';
hostname
Un petit coup de # mysqladmin flush-privileges (y'en a
$cfgServers[1]['port'] = ''; // MySQL port - qui avaient oublié !?) et voilà le mot de passe
leave blank for default port administrateur pris en compte par le serveur MySQL.
Pour la petite histoire c'est la dernière fois que vous
$cfgServers[1]['adv_auth'] = false; // Use tapez cette commande avec cette syntaxe simple.
advanced authentication? Maintenant que root a un mot de passe dans MySQL il
faudra utiliser la syntaxe # mysqladmin -u root -p flush-
$cfgServers[1]['stduser'] = 'root'; // MySQL privileges, ce qui va provoquer la demande du mot de
standard user (only needed with advanced passe par le serveur.
auth)
Et maintenant adieu phpMyAdmin, ça ne marche plus !
$cfgServers[1]['stdpass'] = ''; // MySQL Seulement voilà, arrivé à ce stade de notre étude nous
standard password (only needed with savons comment faire prendre en compte ce mot de
advanced auth) passe par phpMyAdmin. Il suffit de l'incorporer au fichier
de configuration
/var/www/html/phpMyAdmin/config.inc.php3 à la ligne
$cfgServers[1]['user'] = 'root'; // MySQL user $cfgServers[1]['password'] = ' root'.
(only needed with basic auth)
Pour certains PhpMyAdmin (EasyPhp1.8,XAMP,
$cfgServers[1]['password'] = ''; // MySQL WAMP etc) , faire
password (only needed with basic auth) $cfg['Servers'][$i]['auth_type']=
'config'; // Authentication method
$cfgServers[1]['only_db'] = ''; // If set to a db- (config, http or cookie based)?
name, only this db is accessible
$cfg['Servers'][$i]['password'] =
$cfgServers[1]['verbose'] = ''; // Verbose 'root';// MySQL password (only needed
name for this host - leave blank to show the
hostname Au prochain lancement de phpMyAdmin le fichier de
configuration va être pris en compte et tout va rentrer
Le texte de ce fichier semble assez explicite. Il nécessite dans l'ordre, la connexion s'effectuant à nouveau de
toutefois une analyse plus détaillée pour bien en façon directe...
comprendre certaines finesses.
9.2 Configuration avec adv_auth=true
$cfgServers[1] désigne le premier serveur MySQL, le
seul qui nous intéresse ici (il semblerait qu'il y ait des L'authentification avancée diffère légèrement du cas
vicieux qui démarrent plusieurs serveurs.. imaginez un précédent en ce que le login et le mot de passe de
peu ;-)). l'utilisateur qui lance phpMyAdmin sont demandés au
lancement. Il n'y a plus un login de connexion unique,
Le paramètre important est [adv_auth]. Il peut prendre celui-ci peut changer en fonction des informations
deux valeurs, false (défaut à l'installation) et true. données par l'utilisateur qui lance phpMyAdmin. Ces
informations sont ensuite comparées à la base de
9.1 Configuration avec adv_auth = false
6
ENI
Une fois que les champs ont été remplis, l'URL sera
de nouveau appelée, avec les variables prédéfinies
PHP_AUTH_USER, PHP_AUTH_PW et
AUTH_TYPE contenant respectivement le nom
d'utilisateur, le mot de passe et le type
d'identification.