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_IPci-dessous
1. Option A : installer le paquet apt avec Apache
Bashapt 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 :
Bashphpenmod 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.
Bashmariadb
SQLCREATE 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 :
BashSUFFIX=$(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 :
Apache1AuthType 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.
Bashapache2ctl 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) :
Bashapt 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';
Bashmkdir -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 :
Nginx1location ^~ /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}
Bashnginx -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 :
Bashssh -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
Bashcurl -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.