Identification

Sécurité phpMyAdmin : Le B.A.-BA

Catégorie : Auto-hébergement

Faire le ménage

La première chose à faire après l'installation de phpMyAdmin est de supprimer le dossier contenant les fichiers utilisés lors de l'installation initiale de phpMyAdmin.

Ce dossier contient en effet certains fichiers sensibles qui font régulièrement l'objet de tentatives d'accès douteuses ; et dans la mesure où ils ne seront probablement plus jamais utilisés, il vaut mieux les supprimer :

# rm -rf /usr/share/phpmyadmin/setup

En complément de cette action, vous devez modifier la configuration d'Apache concernant phpMyadmin afin de commenter ou de supprimer les lignes concernant le dossier setup/ (elles ne sont plus utiles) :

# nano /etc/phpmyadmin/apache.conf

Dans ce fichier, commentez avec un # en début de ligne, ou supprimez les lignes suivantes :

#...
# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authn_file.c>
    AuthType Basic
    AuthName "phpMyAdmin Setup"
    AuthUserFile /etc/phpmyadmin/htpasswd.setup
    </IfModule>
    Require valid-user
</Directory>
#...
<Directory /usr/share/phpmyadmin/setup/lib>
    Order Deny,Allow
    Deny from All
</Directory>
#...

Vous pouvez également supprimer le fichier /etc/phpmyadmin/htpasswd.setup qui est devenu inutile :

# rm /etc/phpmyadmin/htpasswd.setup

Rechargez enfin la configuration d'Apache afin que les modifications soient prises en compte :

# /etc/init.d/apache2 reload

Cacher phpMyAdmin

L'accès à l'interface Web de phpMyAdmin se fait par défaut via une URL du type : http//www.monsite.com/phpmyadmin/.
C'est pratique, standard et facilement mémorisable, mais ça donne aussi l'opportunité à tous les script kiddies de la planète de saccager votre travail en utilisant des failles de phpMyAdmin.

Voyons comment nous pouvons brouiller les pistes...

Modifier l'URL de base

Une parade simple et peu coûteuse est de modifier l'alias de base de phpMyAdmin.
Cette modification s'effectue dans le fichier de configuration Apache 2 dédié :

# nano /etc/phpmyadmin/apache.conf

Dans ce fichier, il suffit simplement de remplacer la directive :

#...
Alias /phpmyadmin /usr/share/phpmyadmin
#...
par quelque chose du genre :
#...
Alias /mon_phpmyadmin /usr/share/phpmyadmin
#...

Il faut ensuite recharger la configuration d'Apache afin que les modifications soient prises en compte :

# /etc/init.d/apache2 reload

PhpMyAdmin devrait maintenant être disponible sur une URL du type : http//www.monsite.com/mon_phpmyadmin/

Créer un sous domaine

Une autre solution pour "cacher" phpMyAdmin des yeux du reste du monde est d'utiliser un sous-domaine, l'idée étant encore une fois de modifier l'URL d'accès par défaut à phpMyAdmin.

Prérequis

Pour mettre en oeuvre cette solution vous devez préalablement :

  1. disposer d'un nom de domaine,
  2. avoir accès à la configuration des zones DNS de ce domaine,
  3. ajouter un enregistrement CNAME à votre zone DNS afin de créer une nouvelle adresse du genre : phpmyadmin.mondomaine.com

Modification de la configuration de base

Concernant la configuration d'Apache, il faut dans un premier temps éditer le fichier de configuration Apache pour phpMyAdmin afin d'y commenter l'ensemble des directives relatives à phpMyAdmin :

# nano /etc/phpmyadmin/apache.conf

Dans ce fichier, commenter avec un # en début de ligne, ou supprimez les lignes suivantes :

#...
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
  Options FollowSymLinks
  DirectoryIndex index.php
 
  <IfModule mod_php5.c>
    AddType application/x-httpd-php .php
    
    php_flag magic_quotes_gpc Off
    php_flag track_vars On
    php_flag register_globals Off
    php_admin_flag allow_url_fopen Off
    php_value include_path .
    php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
    php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmi$
  </IfModule>
</Directory>
#...
# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/libraries>
  Order Deny,Allow
  Deny from All
</Directory>
#...

Remarque : à ce stade, si vous avez bien suivi et si vous avez déjà modifié votre fichier de configuration phpMyAdmin-Apache de base afin d'y supprimer/commenter les directives concernant le dossier setup/, ce fichier de configuration se retrouve soit entièrement vide, soit entièrement commenté.

Ajout du nouveau VirtualHost

Rien de plus simple, il suffit de créer un fichier de configuration Apache :

# nano /etc/apache2/sites-available/phpmyadmin.mondomaine.com

et d'y inscrire les directives suivantes (remplacez les {...} par vos valeurs personnalisée):

<VirtualHost *:80>
  ServerAdmin {administrateur@mondomaine.com}
  ServerName {phpmyadmin.mondomaine.com}
  LogLevel warn
  DirectoryIndex index.php
</VirtualHost>

<Directory /usr/share/phpmyadmin>
  Options FollowSymLinks
  <IfModule mod_php5.c>
    AddType application/x-httpd-php .php
    php_flag magic_quotes_gpc Off
    php_flag track_vars On
    php_flag register_globals Off
    php_admin_flag allow_url_fopen Off
    php_value include_path .
    php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
    php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmi$
  </IfModule>
</Directory>

<Directory /usr/share/phpmyadmin/libraries>
  Order Deny,Allow
  Deny from All
</Directory>

Une fois le fichier sauvegardé, il faut qu'Apache recharge sa configuration :

# apache2ctl configtest
# a2ensite mysql.mon-domaine.com
# /etc/init.d/apache2 reload

Note : la première commande vérifie la syntaxe des fichiers de configuration Apache, la seconde active le site demandé (création du lien symbolique dans /etc/apache2/sites-enabled/), et la troisième force Apache à recharger sa configuration.

Interdire la connexion root

Selon votre version de PHPMyAdmin, il se peut que par défaut l'utilisateur root soit autorisé à se connecter à l'interface, ce qui n'est pas une très bonne idée. Nous allons donc procéder à quelques ajustements afin de corriger ceci.

Restreindre l'accès root

La directive de configuration qui permet d'interdire l'accès de root à phpMyAdmin est AllowRoot. Elle doit être déclarée dans le bloc d'instructions de la condition if(!empty($dbname)) du fichier de configuration /etc/phpmyadmin/config.inc.php :

# nano /etc/phpmyadmin/config.inc.php
//...
/* Configure according to dbconfig-common if enabled */
if (!empty($dbname)) {
    //...
    /* Optional: Advanced phpMyAdmin features */
    //...
    $cfg['Servers'][$i]['AllowRoot'] = FALSE;
    //...
    /* Advance to next server for rest of config */
    $i++;
}
//...

Voilà, à partir de maintenant root ne peut plus se connecter à votre instance de phpMyAdmin.

Renommer le root MySQL

Une des premières choses à faire lorsqu'on installe une instance de MySQL, c'est de renommer le compte de l'utilisateur root afin de s'immuniser contre certains type d'attaques.