Mettre en place des multi-sessions graphiques VNC avec MATE avec tunnel SSH sur OpenIndiana
Vous trouverez ici un guide technique pas à pas pour transformer une installation fraîche d'OpenIndiana (minimal) en un environnement de bureau distant prêt à l'emploi.
Il s'agît d'une méthode ancienne, mais toujours très robuste.
On utilisera de nos jours un serveur VNC plus moderne comme TigerVNC sur OpenIndiana, qui sera plus performant dans ce cas de figure.
Néanmoins la méthode que je montre reste valide et est utile pour la transparence et la compatibilité.
Il couvre les étapes essentielles : sécurisation initiale (mots de passe, firewall IPFilter), configuration réseau et système (DNS, hostname, timezone, boot), installation de l'environnement graphique MATE, mise en place d'un serveur VNC headless via Xorg et le driver dummy, automatisation avec tmux, et intégration de VirtualBox pour la virtualisation.
Enfin, je montrer comment créer et gérer plusieurs sessions utilisateurs indépendantes, chacune avec son propre affichage et accès VNC sécurisé.
Ce tutoriel peut-être particulièrement utile pour :
- Les administrateurs système qui veulent déployer un bureau distant OpenIndiana en mode serveur sans aucune carte graphique attachée au serveur.
- Les formateurs ou stagiaires ayant besoin d'environnements graphiques isolés.
- Toute personne souhaitant combiner sécurité (IPFilter, tunnels SSH) et confort d'usage (MATE + VNC).
S'identifier en root pour commencer.
Configurer IPF (ne laisser entrer que le SSH... laisser les flux sortants revenir)
Créer un fichier de règles pour IPFilter : /etc/ipf/ipf.conf :
block in log all
block out log all
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass in quick on lo0 all
pass out quick on lo0 all
pass out quick on ixgbe0 all keep state
## CETTE REGLE DOIT RESTER COMMENTEE CAR ELLE OUVRE LE PARE-FEU !! pass in quick on igb0 all keep state
pass in log quick proto tcp from any to any port = 22 keep state
Démarrer IPFilter avec notre fichier de configuration :
svcadm enable ipfilter ; ipf -Fa -f /etc/ipf/ipf.conf
Se connecter via SSH à adminweb puis passer en root
1) Installer mate :
pkg install mate_install ; sleep 2 ; svcadm enable lightdm
2) Mettre mate en français pour l'utilisateur adminweb :
echo "[Desktop]\nSession=mate\nLanguage=fr_FR.UTF-8" > /export/home/adminweb/.dmrc
3) Configurer lightdm avec le clavier AZERTY
printf "Section \"InputClass\"\n Identifier \"KeyboardDefaults\"\n MatchIsKeyboard \"on\"\n Option \"XkbLayout\" \"fr\"\nEndSection" > /etc/X11/xorg.conf.d/keyboard-fr.conf
4) Redémarrer.
reboot
Se reconnecter en SSH à adminweb puis passer en root
5) Installer le driver dummy :
pkg install xorg-video-dummy
6) Installer le serveur x11vnc et tmux
pkg install x11vnc tmux
7) Créer un fichier de configuration (/etc/X11/xorg.conf.d/20-dummy.conf) pour le driver dummy
Section "Device"
Identifier "DummyDevice"
Driver "dummy"
VideoRam 256000
EndSection
Section "Monitor"
Identifier "DummyMonitor"
HorizSync 1.0 - 200.0
VertRefresh 1.0 - 200.0
EndSection
Section "Screen"
Identifier "DummyScreen"
Device "DummyDevice"
Monitor "DummyMonitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "2560x1600" "1920x1080" "1280x720"
Virtual 2560 1600
EndSubSection
EndSection
Section "ServerLayout"
Identifier "DummyLayout"
Screen "DummyScreen"
EndSection
8) Puis, continuer en tant qu'adminweb tout du long ! (quitter root !)
- La procédure suivante doit être reproduite en changeant le port (5901) et le DISPLAY=:1 (1 -> 5901) pour un nouvel utilisateur.
- Voir exemple tout en bas.
9) Créer un mot de passe VNC pour adminweb :
x11vnc -storepasswd # se rappeler que le mot de passe doit faire 8 caractères max.
umask 077
touch ~/.Xauthority
chmod 600 ~/.Xauthority
COOKIE=$(openssl rand -hex 16)
xauth -f ~/.Xauthority add :1 . "$COOKIE"
10) Lancer Xorg (ne pas tenir compte des nombreuses erreurs et warning)
nohup /usr/bin/Xorg :1 -noreset -nolisten tcp -auth /export/home/adminweb/.Xauthority > ~/.x11.log 2>&1 &
(taper ENTRER après le lancement pour revenir au prompt)
11) Vérifier que X répond :
DISPLAY=:1 xdpyinfo >/dev/null && echo "Xorg ok" || echo "Xorg pas ok"
12) Pointer le shell vers l'affichage headless
export DISPLAY=:1
export XAUTHORITY=/export/home/adminweb/.Xauthority
13) Vérifier que X répond toujours :
xdpyinfo >/dev/null && echo "Xorg ok" || echo "Xorg pas ok"
14) Lancer MATE dans le même shell :
nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &
(taper ENTRER après le lancement pour revenir au prompt)
15) Désactiver l'écran noir/veille
xset s off -dpms
xset s noblank
16) Démarrer VNC :
nohup x11vnc -display :1 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &
Se connecter via VNC avec UltraVNC viewer. Affichage à 125%
17) Ne pas oublier d'installer Virtualbox si vous le souhaitez
pkg install virtualbox virtualbox-additions
Pour l'usage de Virtualbox (à l'intérieur des VM, mettre l'hôte (le PC duquel on travaille avec une console VNC ouverte, pas OpenIndiana, en QWERTY)
Créer une première VM et ajoutez-lui une carte réseau réseau privé hôte. Voir la carte vboxnet0 s'ajouter avec "ipadm" puis modifier la configuration du pare-feu pour l'ajouter aux autorisations :
/etc/ipf/ipf.conf
block in log all
block out log all
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass in quick on lo0 all
pass out quick on lo0 all
pass out quick on ixgbe0 all keep state
pass out quick on vboxnet0 all keep state
## CETTE REGLE DOIT RESTER COMMENTEE CAR ELLE OUVRE LE PARE-FEU !! pass in quick on igb0 all keep state
pass in log quick proto tcp from any to any port = 22 keep state
svcadm enable ipfilter ; ipf -Fa -f /etc/ipf/ipf.conf
Pas besoin de créer un NAT pour Virtualbox, on peut rajouter plusieurs cartes (NAT pour internet, réseau privé hôte pour l'hôte etc.)
18) Arrêter Xorg et MATE à la fin :
pkill Xorg
19) Configurer un tunnel SSH pour la connexion VNC avec KiTTY/PuTTY.
-L5901 127.0.0.1:5901
20) Configurer un NAT utilisable pour VirtualBox si nécessaire
CONDENSE pour démarrer tout ça rapidement après connexion SSH (sauf si vous avez configuré l'exécution de la commande dans le profile KiTTY/PuTTY)
tmux new-session -d -s adminweb
tmux send-keys -t adminweb 'nohup /usr/bin/Xorg :1 -noreset -nolisten tcp -auth /export/home/adminweb/.Xauthority > ~/.x11.log 2>&1 &' C-m
tmux send-keys -t adminweb 'export DISPLAY=:1 ; export XAUTHORITY=/export/home/adminweb/.Xauthority' C-m
tmux send-keys -t adminweb 'nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &' C-m
tmux send-keys -t adminweb 'nohup x11vnc -display :1 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &' C-m
L'avantage de tout envoyer dans tmux : si la session SSH coupe, le bureau ne coupe pas !
Pas besoin de relancer le tmux en se reconnecter, il suffit juste de rouvrir le client VNC
Créer une nouvelle session utilisateur VNC avec son propre display :
Remplacer (pour aller plus vite)
- prénom : marcel
- rfb : 5902
- display : :2
useradd -m -s /bin/bash "marcel"
passwd marcel
- se loguer en tant que marcel, puis :
x11vnc -storepasswd
umask 077
touch ~/.Xauthority
chmod 600 ~/.Xauthority
COOKIE=$(openssl rand -hex 16)
xauth -f ~/.Xauthority add :2 . "$COOKIE"
nohup /usr/bin/Xorg :2 -noreset -nolisten tcp -auth /export/home/marcel/.Xauthority > ~/.x11.log 2>&1 &
export DISPLAY=:2 ; export XAUTHORITY=/export/home/marcel/.Xauthority
nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &
xset s off -dpms ; xset s noblank
nohup x11vnc -display :2 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5902 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &
Configurer un tunnel SSH pour la connexion VNC avec KiTTY/PuTTY.
-L5902 127.0.0.1:5902
CONDENSE pour démarrer tout ça rapidement après connexion SSH :
tmux new-session -d -s marcel
tmux send-keys -t marcel 'nohup /usr/bin/Xorg :2 -noreset -nolisten tcp -auth /export/home/marcel/.Xauthority > ~/.x11.log 2>&1 &' C-m
tmux send-keys -t marcel 'export DISPLAY=:2 ; export XAUTHORITY=/export/home/marcel/.Xauthority' C-m
tmux send-keys -t marcel 'nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &' C-m
tmux send-keys -t marcel 'nohup x11vnc -display :2 -auth "$XAUTHORITY" -rfbauth /export/home/marcel/.vnc/passwd -rfbport 5902 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &' C-m
↑ Haut de page