Dans ce TP, vous travaillez dans le terminal administrateur (root) de Kali Linux :
toutes les commandes sont donc données sans sudo. En dehors de ce cadre, avec un
utilisateur normal, il faudrait faire précéder chaque commande d’administration de sudo.
Vérification : la commande whoami doit afficher root.
- Dans les blocs de commandes, les lignes qui commencent par
#sont des commentaires : ne les tapez pas. - Le
$représente l’invite du shell, il ne se tape pas non plus. - Le bouton « Copier » ne copie que les commandes utiles, sans les commentaires ni l’invite
$. - Les blocs gris clair sont des exemples de sortie attendue : ils ne sont pas à copier.
Objectifs et architecture
Objectifs du TP
- Mettre à jour Kali Linux.
- Installer un serveur de base de données MariaDB, compatible MySQL.
- Installer phpMyAdmin.
- Configurer l’accès web à phpMyAdmin.
- Créer un utilisateur MySQL/MariaDB capable de se connecter via phpMyAdmin.
- Vérifier les services et diagnostiquer les erreurs courantes.
Architecture logique
Navigateur web
↓
Apache2
↓
phpMyAdmin
↓
MariaDB / MySQL
En résumé : Apache sert les pages, PHP (déjà installé) exécute phpMyAdmin, phpMyAdmin interroge MariaDB/MySQL, et MariaDB/MySQL stocke les bases de données.
1Mettre à jour le système
On actualise d’abord la liste des paquets disponibles, puis on installe les mises à jour. Faire les deux évite des erreurs de dépendances.
# Actualise la liste des paquets disponibles
$ apt update
# Applique les mises à jour complètes du système
$ apt full-upgrade -y
apt update seul ne met à jour que la liste des paquets, pas le système.
Il faut ajouter une commande d’upgrade. Sur Kali, distribution « rolling », on utilise
généralement apt full-upgrade.
Si vous travaillez dans une machine virtuelle, faites un snapshot avant de commencer. Kali étant une distribution rolling, une mise à jour importante peut parfois modifier le comportement de certains paquets.
2Installer le serveur de base de données
Sur Kali/Debian, le serveur de base de données fourni par défaut est MariaDB. MariaDB est un fork compatible avec MySQL. Dans la suite du TP, on parlera donc de MySQL/MariaDB.
# Installe le serveur MariaDB
$ apt install mariadb-server -y
# Démarre MariaDB et l'active au démarrage du système
$ systemctl enable --now mariadb
# Vérifie l'état du service
$ systemctl status mariadb --no-pager
# Vérifie que MariaDB écoute bien sur le port 3306
$ ss -ltnp | grep 3306
# Se connecte à la console SQL en tant que root MariaDB
$ mysql
Dans la console, le prompt devient généralement :
MariaDB [(none)]>
Pour vérifier la version et quitter :
MariaDB [(none)]> SELECT VERSION();
MariaDB [(none)]> QUIT;
mariadb-server: serveur MariaDB, recommandé ici.default-mysql-server: méta-paquet Debian/Kali qui installe MariaDB.mysql-client: client MySQL/MariaDB, souvent installé avec le serveur.mysql.server: n’existe pas.mysql-server: peut être introuvable dans les dépôts Kali/Debian par défaut.
La commande mysql -u root -p échoue généralement avec une erreur du type
Access denied for user 'root'@'localhost'.
Ce n’est pas forcément une erreur d’installation. Sur Kali/Debian, le compte root
de MariaDB s’authentifie via le compte système root, avec le plugin unix_socket.
Il n’a donc pas forcément de mot de passe MariaDB.
Depuis un terminal administrateur, on se connecte simplement avec :
$ mysql
C’est la raison pour laquelle il faudra créer un utilisateur MySQL/MariaDB dédié, avec un mot de passe, pour se connecter à phpMyAdmin.
3Installer phpMyAdmin
phpMyAdmin est une application web écrite en PHP. Elle s’appuie donc sur :
- Apache2 pour servir les pages web ;
- PHP pour exécuter l’application ;
php-mysqlpour communiquer avec MariaDB/MySQL ;- le serveur MariaDB/MySQL installé à l’étape précédente.
# Installe phpMyAdmin
$ apt install phpmyadmin -y
# Relance l'assistant de configuration si nécessaire
$ dpkg-reconfigure phpmyadmin
-y ne remplit pas l’assistant Debconf
Le -y répond seulement « oui » à la confirmation APT.
Il ne répond pas automatiquement aux questions de configuration de phpMyAdmin.
L’assistant peut s’afficher pendant l’installation. S’il ne s’affiche pas, ou si vous avez répondu incorrectement, relancez-le avec :
$ dpkg-reconfigure phpmyadmin
Réponses conseillées à l’assistant
Navigation : flèches pour se déplacer, Espace pour cocher, Entrée pour valider.
| Question | Réponse conseillée | Remarque |
|---|---|---|
| Serveur web à reconfigurer automatiquement | Cocher apache2 avec Espace |
Sans cette case cochée, la configuration Apache de phpMyAdmin n’est pas forcément activée.
C’est l’erreur la plus fréquente, provoquant une erreur 404 sur /phpmyadmin.
|
Configurer la base de données avec dbconfig-common |
Oui | Cela permet de créer automatiquement la base interne utilisée par phpMyAdmin. |
| Mot de passe de l’application phpMyAdmin | Au choix, ou vide pour générer un mot de passe aléatoire |
Ce mot de passe sert à la configuration interne de phpMyAdmin via dbconfig-common.
Ce n’est pas forcément le compte que vous utiliserez pour vous connecter à l’interface web.
|
Les informations générées par l’assistant peuvent se trouver notamment dans :
$ ls -l /etc/phpmyadmin/config-db.php
Pour la connexion à l’interface web, on utilisera un utilisateur MariaDB/MySQL, par exemple celui créé à l’étape 6.
4Accéder à phpMyAdmin
Avant d’accéder à phpMyAdmin, on vérifie qu’Apache tourne et que la configuration phpMyAdmin est activée.
# Vérifie qu'Apache est actif
$ systemctl status apache2 --no-pager
# Active la configuration phpMyAdmin dans Apache
$ a2enconf phpmyadmin
# Recharge Apache sans couper les connexions en cours
$ systemctl reload apache2
# Vérifie que la configuration phpMyAdmin est bien activée
$ ls -l /etc/apache2/conf-enabled/ | grep phpmyadmin
Dans le navigateur de Kali, ouvrir :
http://localhost/phpmyadmin
On doit voir la page de connexion de phpMyAdmin. Si c’est le cas, passer directement à l’étape 6 pour créer un utilisateur utilisable.
localhost et accès depuis une autre machine
localhost désigne la machine elle-même, c’est-à-dire l’adresse
127.0.0.1.
Depuis une autre machine, on utiliserait l’adresse IP de la VM Kali, trouvable avec :
$ ip a
phpMyAdmin est une interface d’administration sensible. Ne l’exposez pas directement sur Internet.
En TP local, http://localhost/phpmyadmin est acceptable.
Depuis une autre machine, préférez un tunnel SSH.
Exemple de tunnel SSH à lancer depuis la machine cliente :
ssh -L 8080:localhost:80 utilisateur@IP_DE_KALI
Puis ouvrir dans le navigateur de la machine cliente :
http://localhost:8080/phpmyadmin
Si vous devez absolument autoriser une IP dans Apache, limitez l’accès à cette IP précise, et seulement pour le TP.
5Dépannage : la page ne s’affiche pas
Cette section traite principalement des erreurs 404, 403, 500, et des problèmes de connexion à la base de données.
Erreur 404 sur /phpmyadmin
Une erreur 404 signifie souvent que la configuration Apache de phpMyAdmin n’est pas activée.
# 1) Les fichiers de phpMyAdmin existent-ils ?
$ ls /usr/share/phpmyadmin
# 2) La configuration est-elle disponible dans Apache ?
$ ls /etc/apache2/conf-available/ | grep phpmyadmin
# 3) La configuration est-elle activée ?
$ ls /etc/apache2/conf-enabled/ | grep phpmyadmin
# 4) Active proprement la configuration phpMyAdmin
$ a2enconf phpmyadmin
# 5) Recharge Apache
$ systemctl reload apache2
# 6) Teste la syntaxe de la configuration Apache
$ apache2ctl configtest
Si a2enconf phpmyadmin échoue parce que le fichier n’est pas présent dans
conf-available, on peut créer manuellement le lien symbolique vers
conf-available, puis activer la configuration :
# Crée le lien symbolique vers la configuration fournie par le paquet
$ ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
# Active la configuration
$ a2enconf phpmyadmin
# Recharge Apache
$ systemctl reload apache2
ln -s
Dans ln -s CIBLE LIEN, le premier chemin est la cible, c’est-à-dire le fichier
existant. Le second chemin est le nom du lien à créer.
Consulter les logs Apache
En cas d’erreur 404, 403 ou 500, les logs Apache sont indispensables :
# Affiche les dernières erreurs Apache
$ tail -n 50 /var/log/apache2/error.log
# Affiche les dernières accès Apache
$ tail -n 50 /var/log/apache2/access.log
# Alternative avec journalctl
$ journalctl -u apache2 --no-pager -n 50
Erreur 403 Forbidden
Une erreur 403 peut signifier qu’Apache autorise uniquement l’accès local. Sous Debian/Kali, la configuration de phpMyAdmin peut contenir une directive du type :
Require local
Dans ce cas, http://localhost/phpmyadmin fonctionne sur la VM Kali,
mais l’accès depuis une autre machine peut être refusé.
Solutions :
- Préférer un tunnel SSH, plus sécurisé.
- Modifier temporairement la configuration pour autoriser une IP précise, uniquement en TP.
Pour chercher une restriction d’accès :
$ grep -R "Require" /etc/phpmyadmin/apache.conf
$ grep -R "Require" /etc/apache2/conf-enabled/phpmyadmin.conf
Erreur 500 Internal Server Error
Une erreur 500 vient souvent de PHP, d’une extension manquante ou d’une mauvaise configuration.
# Vérifie que PHP est chargé par Apache
$ apache2ctl -M | grep php
# Vérifie les extensions PHP utiles
$ php -m | grep -E 'mysqli|pdo_mysql|mbstring|xml|zip'
# Consulte les logs Apache
$ tail -n 50 /var/log/apache2/error.log
Message : impossible de se connecter au serveur de base de données
Si phpMyAdmin affiche une erreur de connexion à MariaDB/MySQL, vérifier que le service tourne :
# Vérifie l'état de MariaDB
$ systemctl status mariadb --no-pager
# Démarre MariaDB si nécessaire
$ systemctl start mariadb
# Vérifie que le port 3306 est écouté
$ ss -ltnp | grep 3306
# Consulte les logs MariaDB
$ tail -n 50 /var/log/mysql/error.log
$ journalctl -u mariadb --no-pager -n 50
6Créer un utilisateur MySQL/MariaDB
Si la connexion à phpMyAdmin est refusée avec root, c’est normal sous Kali/Debian
à cause de l’authentification unix_socket.
On crée donc un utilisateur MariaDB/MySQL avec un mot de passe, dédié à l’administration du TP.
Dans les exemples suivants, remplacez :
etudiantpar votre nom d’utilisateur MariaDB/MySQL ;MotDePasseSolide1!par votre mot de passe.
Évitez les mots de passe trop simples comme password, 123456
ou admin, même en TP.
Méthode rapide depuis la console MariaDB
# Ouvre la console SQL en root MariaDB
$ mysql
Puis, dans la console MariaDB, exécuter une instruction par ligne, chacune terminée par
; :
CREATE USER IF NOT EXISTS 'etudiant'@'localhost' IDENTIFIED BY 'MotDePasseSolide1!';
ALTER USER 'etudiant'@'localhost' IDENTIFIED BY 'MotDePasseSolide1!';
GRANT ALL PRIVILEGES ON *.* TO 'etudiant'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
QUIT;
IF NOT EXISTS et ALTER USER ?
CREATE USER IF NOT EXISTS évite une erreur si l’utilisateur existe déjà.
ALTER USER permet de réinitialiser le mot de passe si l’utilisateur existait
déjà avec un autre mot de passe.
Tester la connexion
# Teste la connexion avec le nouvel utilisateur
$ mysql -u etudiant -p -e "SELECT CURRENT_USER();"
On doit saisir le mot de passe, puis obtenir une sortie du type :
+----------------+
| CURRENT_USER() |
+----------------+
| etudiant@localhost |
+----------------+
Retourner ensuite sur :
http://localhost/phpmyadmin
et se connecter avec etudiant et le mot de passe choisi.
GRANT ALL PRIVILEGES ON *.* ... WITH GRANT OPTION donne les droits d’un
administrateur complet.
C’est acceptable sur une VM de TP, mais pas sur un serveur réel. En production, on créerait un compte par application avec des droits limités à sa base, par exemple :
GRANT ALL PRIVILEGES ON ma_base.* TO 'app'@'localhost';
- Les apostrophes doivent être droites :
'. -
Les guillemets typographiques
‘ ’, souvent copiés depuis Word ou une page web, provoquent une erreurERROR 1064 (42000). - Ne pas oublier le
;à la fin de chaque instruction SQL. - Ne pas laisser
useroumotdepassetels quels sans personnalisation.
7Méthode sécurisée avec fichier SQL
Quand on tape directement une commande SQL contenant un mot de passe dans la console MariaDB, le client MySQL/MariaDB peut enregistrer la commande dans un fichier d’historique, souvent :
~/.mysql_history
Le mot de passe peut alors se retrouver en clair dans ce fichier. Pour un TP, il est préférable de préparer les commandes dans un fichier SQL temporaire, de protéger ce fichier, de l’exécuter, puis de le supprimer.
Créer un fichier SQL
# Ouvre un fichier de préparation dans nano
$ nano ~/creer_user.sql
Contenu à adapter, en remplaçant etudiant et le mot de passe :
CREATE USER IF NOT EXISTS 'etudiant'@'localhost' IDENTIFIED BY 'MotDePasseSolide1!';
ALTER USER 'etudiant'@'localhost' IDENTIFIED BY 'MotDePasseSolide1!';
GRANT ALL PRIVILEGES ON *.* TO 'etudiant'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Sous nano : Ctrl+O puis Entrée pour enregistrer,
Ctrl+X pour quitter.
Protéger, exécuter puis supprimer le fichier
# Protège le fichier contre la lecture par les autres utilisateurs
$ chmod 600 ~/creer_user.sql
# Exécute le fichier SQL sans ouvrir la console interactive
$ mysql < ~/creer_user.sql
# Supprime le fichier contenant le mot de passe en clair
$ rm ~/creer_user.sql
Vérifications
# Vérifie que l'utilisateur peut se connecter
$ mysql -u etudiant -p -e "SELECT CURRENT_USER();"
# Vérifie la présence de l'utilisateur dans la table mysql.user
$ mysql -e "SELECT User, Host FROM mysql.user WHERE User='etudiant';"
Après un TP, supprimer les fichiers temporaires contenant des mots de passe. Ne pas laisser de script SQL avec identifiants en clair dans le home.
8Récapitulatif et pièges classiques
| Symptôme | Cause probable | Solution |
|---|---|---|
Unable to locate package mysql.server |
Nom de paquet inexistant | apt install mariadb-server |
mysql-server introuvable |
Kali/Debian fournit MariaDB par défaut | Utiliser mariadb-server ou default-mysql-server |
ERROR 1698 ou Access denied for user 'root' |
Authentification unix_socket |
Se connecter avec mysql sans mot de passe, ou créer un utilisateur dédié |
404 Not Found sur /phpmyadmin |
Configuration Apache non activée | a2enconf phpmyadmin puis systemctl reload apache2 |
| Assistant phpMyAdmin non affiché | Le -y d’APT ne remplit pas Debconf |
dpkg-reconfigure phpmyadmin |
| 403 Forbidden depuis une autre machine | Accès restreint à localhost |
Utiliser un tunnel SSH ou autoriser temporairement une IP précise |
| Impossible de se connecter au serveur de base de données | MariaDB arrêté | systemctl start mariadb ou service mariadb start |
ERROR 1064 ... syntax |
Guillemets typographiques ou ; manquant |
Retaper les apostrophes droites ' et ajouter les points-virgules |
| Le navigateur propose de télécharger le fichier PHP | PHP non activé dans Apache | apt install libapache2-mod-php puis redémarrer Apache |
| Erreur 500 sur phpMyAdmin | Extension PHP manquante ou erreur Apache/PHP | Consulter /var/log/apache2/error.log, vérifier php -m |
| Mot de passe visible dans l’historique MySQL | Commande SQL tapée directement avec mot de passe | Utiliser un fichier SQL temporaire, chmod 600, puis le supprimer |
Commandes de service à retenir
# Apache
$ systemctl status apache2 --no-pager
$ systemctl start apache2
$ systemctl restart apache2
$ systemctl reload apache2
# MariaDB
$ systemctl status mariadb --no-pager
$ systemctl start mariadb
$ systemctl restart mariadb
$ systemctl enable --now mariadb
# phpMyAdmin / Apache
$ a2enconf phpmyadmin
$ apache2ctl configtest
$ apache2ctl -M | grep php
L’ancienne commande service fonctionne encore, mais systemctl est
la commande moderne sous les systèmes utilisant systemd.
# Ancienne méthode, encore fonctionnelle
$ service apache2 status
$ service mariadb status
Logs utiles
# Logs Apache
$ tail -n 50 /var/log/apache2/error.log
$ tail -n 50 /var/log/apache2/access.log
# Logs MariaDB
$ tail -n 50 /var/log/mysql/error.log
# Logs système via journalctl
$ journalctl -u apache2 --no-pager -n 50
$ journalctl -u mariadb --no-pager -n 50
Checklist de validation
Cocher chaque élément après vérification.
- ☐
apache2est actif. - ☐
http://localhostaffiche la page Apache. - ☐
mariadbest actif. - ☐ MariaDB écoute sur le port 3306 :
ss -ltnp | grep 3306. - ☐ La commande
mysqlpermet de se connecter en root viaunix_socket. - ☐
phpmyadminest installé. - ☐ L’assistant phpMyAdmin a été configuré, ou relancé avec
dpkg-reconfigure phpmyadmin. - ☐ La configuration phpMyAdmin est activée dans Apache :
a2enconf phpmyadmin. - ☐
http://localhost/phpmyadminaffiche l’écran de connexion. - ☐ Un utilisateur MariaDB/MySQL a été créé.
- ☐ Cet utilisateur peut se connecter à phpMyAdmin.
- ☐ Les fichiers temporaires contenant des mots de passe ont été supprimés.