61 votes

Comment sécuriser phpMyAdmin

J'ai remarqué qu'il y a des demandes étranges sur mon site Web essayant de trouver phpmyadmin, comme

/phpmyadmin/
/pma/

etc.

Maintenant, j'ai installé PMA sur Ubuntu via apt et j'aimerais y accéder via une adresse web différente de /phpmyadmin/. Que puis-je faire pour le changer?

Merci


Mise à jour

Pour Ubuntu 9.10 et Apache2, le paramètre correspondant se trouve dans le fichier /etc/apache2/conf.d/phpmyadmin.conf qui est un lien vers /etc/phpmyadmin/apache.conf. Le fichier contient

Alias /phpmyadmin /usr/share/phpmyadmin

où le premier /phpmyadmin devrait être changé à quelque chose de différent si l'on veut éviter l'activité inutile, par exemple:

Alias /secret /usr/share/phpmyadmin

2 votes

Ne devrait pas le titre avoir été "comment déplacer phpMyAdmin"? Changer l'URL ne sécurise pas réellement...

0 votes

Je renomme toujours le répertoire phpmyadmin (pas l'alias d'URL) après chaque utilisation afin qu'il ne soit pas du tout accessible. Ensuite, chaque fois que j'en ai besoin, je le renomme à nouveau. Pas très malin, mais ça me donne plus de confiance.

87voto

Rook Points 34698

La plus grande menace est qu'un attaquant pourrait exploiter une vulnérabilité telle que; la traversée de répertoire, ou l'utilisation d'une injection SQL pour appeler load_file() afin de lire les noms d'utilisateur/mots de passe en texte clair dans le fichier de configuration, puis se connecter en utilisant phpmyadmin ou via le port tcp 3306. En tant que pentester, j'ai utilisé ce modèle d'attaque pour compromettre un système.

Voici un excellent moyen de sécuriser phpmyadmin:

  • PhpMyAdmin manque d'une protection efficace contre les tentatives de force brute, vous devez donc utiliser un mot de passe long généré de manière aléatoire.
  • NE PAS AUTORISER LES CONNEXIONS ROOT À DISTANCE! Au lieu de cela, phpmyadmin peut être configuré pour utiliser "Authentification par cookie" pour limiter les utilisateurs pouvant accéder au système. Si vous avez besoin de certains privilèges d'administrateur, créez un compte personnalisé qui peut ajouter/supprimer/créer, mais qui n'a pas les privilèges grant ou file_priv.
  • Supprimez les permissions file_priv de tous les comptes. file_priv est l'un des privilèges les plus dangereux de MySQL car il permet à un attaquant de lire des fichiers ou de télécharger une porte dérobée.
  • Établissez une liste blanche des adresses IP autorisées à accéder à l'interface de phpmyadmin. Voici un exemple de règle .htaccess:
Order deny,allow
Deny from all
allow from 199.166.210.1
  • N'utilisez pas un emplacement de fichier prévisible comme: http://127.0.0.1/phpmyadmin. Les scanners de vulnérabilités comme Nessus/Nikto/Acunetix/w3af vont chercher cela.

  • Bloquez le port tcp 3306 avec un pare-feu pour qu'il ne puisse pas être accessible par un attaquant.

  • Utilisez HTTPS, sinon les données et mots de passe peuvent être divulgués à un attaquant. Si vous ne voulez pas dépenser les 30 $ pour un certificat, utilisez un certificat auto-signé. Vous l'accepterez une fois, et même s'il était modifié en raison d'une attaque de l'homme du milieu, vous en serez notifié.

8 votes

Je ne veux pas être critique, mais c'est drôle comment vous ne traitez pas la 'plus grande menace' jusqu'à la dernière étape. La plus grande menace pour la plupart des gens est le brute forcing - que vos autres étapes abordent. Utiliser un mot de passe décent est également une bonne idée.

1 votes

@therealsix Vous avez raison mais j'ai supposé que c'était évident. La force brute pour mysql est moins courante que mssql car vous avez xp_cmdshell() qui appelle cmd.exe. Dans mysql, l'exécution de code wormable n'est pas aussi directe.

3 votes

Nous avons également basculé AllowRoot sur false dans la configuration de phpMyAdmin.

12voto

Jae Cho Points 203

Un de mes soucis avec phpMyAdmin était qu'en par défaut, tous les utilisateurs MySQL peuvent accéder à la base de données. Si le mot de passe root de la base de données est compromis, quelqu'un peut causer des dégâts à la base de données. Je voulais trouver un moyen d'éviter cela en restreignant quels utilisateurs MySQL peuvent se connecter à phpMyAdmin.

J'ai trouvé que l'utilisation de la configuration AllowDeny dans PhpMyAdmin était très utile. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

AllowDeny vous permet de configurer l'accès à phpMyAdmin de manière similaire à Apache. Si vous définissez l'ordre sur explicite, il accordera uniquement l'accès aux utilisateurs définis dans la section des 'rules'. Dans la section des 'rules', vous restreignez les utilisateurs MySql qui peuvent accéder à l'utilisation de phpMyAdmin.

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')

Maintenant vous avez un accès limité à l'utilisateur nommé pma-user dans MySQL, vous pouvez accorder des privilèges limités à cet utilisateur.

grant select on db_name.some_table to 'pma-user'@'app-server'

4 votes

Super astuce! Juste un petit bug dans votre code, les règles devraient ressembler à ceci: $cfg['Serveurs'][$i]['AllowDeny']['rules'] = array('autoriser pma-user de tous');

6voto

ppumkin Points 3543

Une autre solution est d'utiliser le fichier de configuration sans aucun paramètre. La première fois, vous devrez peut-être inclure votre login/mot de passe mysql root afin qu'il puisse installer toutes ses choses, puis les supprimer.

$cfg['Servers'][$i]['auth_type'] = 'cookie';

$cfg['Servers'][$i]['host'] = 'localhost';

$cfg['Servers'][$i]['connect_type'] = 'tcp';

$cfg['Servers'][$i]['compress'] = false;

$cfg['Servers'][$i]['extension'] = 'mysql';

Le laisser ainsi sans aucun alias apache/lighttpd vous présentera simplement un écran de connexion. entrer la description de l'image ici

Vous pouvez vous connecter en tant que root mais il est conseillé de créer d'autres utilisateurs et de n'autoriser l'accès root que localement. N'oubliez pas d'utiliser des mots de passe contenant des lettres majuscules, des chiffres et des caractères spéciaux. Par exemple !34sy2rmbr! alias "facile à retenir"

-EDIT : Un bon mot de passe de nos jours est en réalité quelque chose comme des mots qui n'ont aucun sens grammatical mais que vous pouvez retenir car ils sont drôles. Ou utilisez keepass pour générer des mots de passe aléatoires forts et y accéder facilement

6voto

rightstuff Points 2095

Dans les nouvelles versions de phpMyAdmin, les permissions d'accès pour les noms d'utilisateur + adresses IP peuvent être configurées à l'intérieur du fichier config.inc.php de phpMyAdmin. Il s'agit d'une méthode bien meilleure et plus robuste pour limiter l'accès (par rapport à la codification en dur des URL et adresses IP dans le fichier httpd.conf d'Apache).

Voici un exemple complet de comment passer à la liste blanche de tous les utilisateurs (personne en dehors de cette liste n'aura accès), et comment restreindre l'utilisateur root au système local et au réseau seulement.

$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'deny % from all', // refuser tout le monde par défaut, puis -

    'allow % from 127.0.0.1', // permettre à tous les utilisateurs locaux
    'allow % from ::1',

    //'allow % from SERVER_ADRESSE', // permettre à tous depuis l'IP du serveur

    // permettre l'accès à l'utilisateur root à partir de ces emplacements (réseau local)    
    'allow root from localhost',
    'allow root from 127.0.0.1',
    'allow root from 10.0.0.0/8',
    'allow root from 172.16.0.0/12',
    'allow root from 192.168.0.0/16',

    'allow root from ::1',

    // ajouter d'autres noms d'utilisateur et leurs IP (ou plages IP) ici -
    );

Source: Comment installer et sécuriser phpMyAdmin en local sur Windows

Cela vous offre des restrictions d'accès beaucoup plus précises que les permissions d'URL d'Apache ou un fichier .htaccess peuvent fournir, au niveau du nom d'utilisateur MySQL.

Assurez-vous que l'utilisateur avec lequel vous vous connectez a son champ Host: MySQL configuré sur 127.0.0.1 ou ::1, car phpMyAdmin et MySQL sont sur le même système.

4voto

MatW Points 4130

Probablement, quelque part sur votre serveur web, il y aura une directive Alias comme ceci;

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

Dans ma configuration wampserver / localhost, c'était dans c:/wamp/alias/phpmyadmin.conf.

Il suffit de changer la directive d'alias et vous devriez être prêt à partir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X