Installer et sécuriser phpMyAdmin sur un VPS Linux

3 min
Hébergement VPS/VDS

phpMyAdmin est une interface web pratique pour MariaDB et MySQL, mais aussi l'une des URL les plus scannées d'Internet. Ce guide présente deux installations sur votre VPS Linux Infrawire, le paquet apt avec Apache et une installation manuelle derrière Nginx, puis les mesures qui le tiennent hors de portée des robots.

📋 Prérequis

  • Un VPS sous Ubuntu 24.04 ou Debian 12, avec un accès root ou sudo (l'IP et le mot de passe root se trouvent dans votre espace client)
  • Une pile LAMP (option A) ou LEMP (option B) fonctionnelle avec MariaDB
  • Votre propre IP publique, appelée ADMIN_IP ci-dessous

1. Option A : installer le paquet apt avec Apache

Bash
apt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl

Dans l'installateur, sélectionnez apache2 avec la barre d'espace (un astérisque doit apparaître), puis répondez « Oui » pour configurer la base avec dbconfig-common et définissez un mot de passe pour le compte interne de phpMyAdmin. Rechargez ensuite Apache :

Bash
phpenmod mbstring systemctl reload apache2

phpMyAdmin est maintenant servi sur http://VPS_IP/phpmyadmin.

2. Créer un utilisateur de base de données dédié

Ne vous connectez jamais en root. Sur MariaDB sous Ubuntu et Debian, root utilise l'authentification unix_socket et phpMyAdmin la refusera de toute façon : laissez-la ainsi et créez un compte ordinaire.

Bash
mariadb
SQL
CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;

N'accordez de droits que sur les bases que l'utilisateur gère réellement. N'activez pas AllowNoPassword dans la configuration.

3. Cacher l'URL et ajouter une authentification (Apache)

Remplacez l'alias par défaut par un alias aléatoire et créez un fichier de mots de passe :

Bash
SUFFIX=$(openssl rand -hex 6); echo "pma-$SUFFIX" sed -i "s#Alias /phpmyadmin#Alias /pma-$SUFFIX#" /etc/phpmyadmin/apache.conf htpasswd -c /etc/phpmyadmin/.htpasswd USER

Ajoutez ensuite ces lignes dans le bloc <Directory /usr/share/phpmyadmin> déjà présent dans /etc/phpmyadmin/apache.conf :

Apache
1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>

Sans <RequireAll>, Apache accepterait l'une ou l'autre condition ; avec ce bloc, le mot de passe et l'IP sont tous deux exigés.

Bash
apache2ctl configtest && systemctl reload apache2

4. Option B : installation manuelle derrière Nginx

Installez les dépendances, puis téléchargez la dernière version depuis le site officiel de phpMyAdmin (remplacez VERSION par le numéro actuel) :

Bash
apt install -y nginx php-fpm php-mysql php-mbstring php-xml php-zip php-gd php-curl apache2-utils cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/VERSION/phpMyAdmin-VERSION-all-languages.tar.gz tar xzf phpMyAdmin-VERSION-all-languages.tar.gz mkdir -p /var/www/pma mv phpMyAdmin-VERSION-all-languages /var/www/pma/pma-SECRET cd /var/www/pma/pma-SECRET cp config.sample.inc.php config.inc.php openssl rand -hex 16

Remplacez pma-SECRET par un nom aléatoire. Modifiez config.inc.php et collez la valeur générée (32 caractères) comme secret :

PHP
$cfg['blowfish_secret'] = 'RANDOM_32_CHARS'; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Bash
mkdir -p /var/lib/phpmyadmin/tmp chown www-data:www-data /var/lib/phpmyadmin/tmp chmod 700 /var/lib/phpmyadmin/tmp chown -R root:www-data /var/www/pma chmod 640 /var/www/pma/pma-SECRET/config.inc.php htpasswd -c /etc/nginx/.htpasswd USER

Ajoutez ce bloc dans le server { ... } de votre site. Sur Debian 12, le socket est php8.2-fpm.sock au lieu de php8.3-fpm.sock :

Nginx
1location ^~ /pma-SECRET/ { 2 allow ADMIN_IP; 3 deny all; 4 auth_basic 'Restricted area'; 5 auth_basic_user_file /etc/nginx/.htpasswd; 6 root /var/www/pma; 7 index index.php; 8 9 location ~ \.php$ { 10 include snippets/fastcgi-php.conf; 11 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 12 } 13}
Bash
nginx -t && systemctl reload nginx

5. L'option la plus sûre : un tunnel SSH

Si vous ne voulez aucune exposition publique, gardez l'interface accessible uniquement depuis le VPS et ouvrez un tunnel depuis votre ordinateur :

Bash
ssh -L 8080:127.0.0.1:80 USER@VPS_IP

Tant que la session est ouverte, allez sur http://127.0.0.1:8080/pma-SECRET/. Sous Apache, remplacez Require ip ADMIN_IP par Require local dans le bloc ; sous Nginx, utilisez allow 127.0.0.1;. Cela règle aussi le problème d'une IP domestique qui change.

6. Vérifier la protection

Bash
curl -sI http://VPS_IP/phpmyadmin | head -n 1 curl -sI http://VPS_IP/pma-SECRET/ | head -n 1

La première requête doit renvoyer 404. La seconde renvoie 403 depuis toute IP autre que ADMIN_IP, et 401 depuis la vôtre tant que vous ne fournissez pas le mot de passe d'authentification basique. Servez aussi phpMyAdmin uniquement en HTTPS, sinon les mots de passe circulent en clair.

🛠️ Dépannage

404 Not Found. L'alias ou le nom de la location ne correspond pas à l'URL saisie, ou le serveur web n'a pas été rechargé.

403 Forbidden pour vous. Votre IP publique a changé. Mettez à jour ADMIN_IP ou passez au tunnel SSH.

« The mbstring extension is missing » ou page blanche. Installez php-mbstring, puis lancez phpenmod mbstring (Apache) ou redémarrez php8.3-fpm (Nginx).

Access denied pour root. C'est normal et souhaitable. Connectez-vous avec l'utilisateur dédié créé à l'étape 2.


🎉 phpMyAdmin est installé, caché et restreint : vous seul accédez à vos bases de données.

Restez à jour avec les dernières offres, réductions et promotions spéciales.

Voir les promotions

Nous utilisons des cookies

Nous utilisons des cookies analytiques pour améliorer votre expérience sur notre site. Aucune donnée n'est revendue à des tiers. En savoir plus dans notre politique de confidentialité.