Déployer un bureau Kali Linux XFCE dans Docker avec accès VNC/noVNC
Grâce à ce cours ou tutoriel, apprenez à déployer un environnement de bureau Kali Linux avec Docker, accessible facilement via VNC ou noVNC. 🐳
Kali Linux est une distribution Linux conçue pour les experts en cybersécurité, utilisée pour tester la sécurité des systèmes informatiques.
Lancer un environnement de bureau rapidement et simplement
Vous allez apprendre à construire une image Docker Kali Linux qui embarque l’environnement de bureau XFCE.
Vous pourrez également exposer ce bureau à distance via VNC (port 5900) et noVNC (port 8080) pour un accès entièrement web. Cette fonctionnalité est cruciale pour interagir avec le bureau.
Docker, le fichier compose.yml
et le fichier Dockerfile
permettront de mettre tout cela en place.
Pour continuer ce cours, il faut comprendre le fonctionnement de Docker !
Arborescence du projet Kali Linux
Je vous invite à créer les dossiers et fichiers suivants :
kalidesktop/
|-- compose.yml
|-- kali/
|-- Dockerfile
|-- entrypoint.sh
Les informations du compose.yml
Le fichier compose.yml
Ouvrez le fichier compose.yml
et tapez les commandes suivantes :
services:
kali:
build:
context: ./kali
container_name: kali-linux
ports:
- "8080:8080"
- "5900:5900"
restart: unless-stopped
Explication du compose.yml
Le nom kali
est le nom du service que l'on peut choisir librement.
La directive build
permet de construire une image à partir du Dockerfile
qui se trouve dans ./kali/Dockerfile
.
La clé container_name
donne un nom à notre conteneur.
Les ports
permettent de mapper (rediriger) un port du conteneur vers un port de la machine hôte. Cela permet à la machine locale d’accéder aux services exposés par le conteneur.
La directive restart: unless-stopped
redémarre automatiquement le conteneur s’il s’arrête involontairement.
Le fichier Dockerfile
Remplir notre Dockerfile
FROM kalilinux/kali-rolling
# 1. Installer environnement graphique, VNC, Firefox, Ping, etc.
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
xfce4 xfce4-goodies \
x11vnc \
novnc \
python3-websockify \
xvfb \
xauth \
dbus-x11 \
firefox-esr \
iputils-ping \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 2. Créer utilisateur non-root (user:user)
RUN useradd -m user && echo "user:user" | chpasswd && \
mkdir -p /home/user/.vnc && chown -R user:user /home/user
# 3. Copier le script d'entrée
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 4. Exposer ports VNC et noVNC
EXPOSE 5900 8080
# 5. Commande de démarrage
CMD ["/entrypoint.sh"]
Comprendre les informations du Dockerfile
La directive FROM kalilinux/kali-rolling
correspond à l’image officielle Kali Linux Rolling. Notre image personnalisée sera basée sur l’image kalilinux/kali-rolling
.
RUN apt-get update && ...
installe l'environnement graphique et d'autres programmes (firefox, ping, ...).
La directive RUN useradd -m user && ...
crée un nouveau utilisateur.
Ensuite, la directive COPY entrypoint.sh /entrypoint.sh
copie le script de démarrage dans l’image Docker. Ce script sera ensuite utilisé comme point d’entrée principal lors de l’exécution du conteneur.
La commande RUN chmod +x /entrypoint.sh
rend le script entrypoint.sh
exécutable.
EXPOSE 5900 8080
indique les ports utilisés.
Et enfin, la directive CMD ["/entrypoint.sh"]
définit la commande exécutée automatiquement lorsque le conteneur démarre. Ici, c’est le script /entrypoint.sh
(copié précédemment dans l’image) qui est exécuté automatiquement.
Le script entrypoint.sh
Contenu de entrypoint.sh
#!/bin/bash
set -e
# Afficher les logs sur stdout/stderr
exec > >(tee /var/log/entrypoint.log) 2>&1
# 1) Démarrer Xvfb sur DISPLAY :0
export DISPLAY=:0
Xvfb :0 -screen 0 1280x800x16 &
# 2) Démarrer le bureau XFCE sous cet affichage
startxfce4 &
# 3) Lancer x11vnc pour partager :0 sur le port 5900
x11vnc -display :0 -nopw -forever -shared -rfbport 5900 &
# 4) Lancer noVNC (websockify) en avant-plan sur 8080
websockify --web=/usr/share/novnc/ 8080 localhost:5900
Explication
Le script entrypoint.sh
est le point de départ de l’environnement graphique dans le conteneur Kali Linux. Il commence par activer les logs, puis lance un serveur X virtuel (Xvfb) qui permet de faire tourner des applications graphiques sans écran physique. Ensuite, il démarre le bureau XFCE en arrière-plan sous l’utilisateur non-root user. Pour rendre ce bureau accessible à distance, le script lance le serveur VNC (x11vnc) qui partage l’affichage, puis démarre websockify, un pont WebSocket qui permet d’accéder au bureau via un navigateur web grâce à noVNC. Ce script assure donc que le bureau Kali est prêt à être utilisé, à la fois en local (via VNC) et à distance (via navigateur), de façon automatique et sans intervention manuelle.
Lancer le l'environnement de bureau grâce à Docker !
Tous les fichiers sont prêts ! Maintenant, à la racine de votre projet, lancez la commande Docker Compose :
docker compose up
Patientez quelques minutes ! 😌
Interagir avec l'environnement de bureau
Vous avez deux solutions pour interagir avec Kali Linux :
- Navigateur : port → 8080
- VNCViewer : port → 5900
Interagir avec un navigateur
Ouvrez Google Chrome (ou un autre navigateur) et tapez dans la barre d'adresse : localhost:8080/vnc_lite.html.
L'environnement de bureau devrait apparaître.
Interagir avec un VNCViewer
Télécharger un VNCViewer (par exemple VNC Viewer) et tapez l'adresse localhost:5900
.