Hostinger

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.