PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

genma : Initier à Tor et GPG via un jeu v0.1

lundi 11 mai 2015 à 09:00

Ceci est une version 0.1 d'un jeu d'initiation à Tor et GPG. Le concept sera amélioré avec le temps, les parties. L'idée étant de faire une sorte de carte qui ait des règles simples, différentes variantes. Je ferai peut être un pad collaboratif si le concept plait. Le tout est sous licence Creative Commons CC BY-SA.

Prérequis aux jeux

- Une imprimante couleur
- Trois enveloppes de tailles différentes que l'on peut mettre les unes dans les autres
- Des enveloppes de tailles normales
- Des étiquettes (pour coller les illustrations sur les enveloppes et cartes)
- Des cartes vierges genre bristol

Les règles du jeu HTTP

Nombre de joueurs :
- 1 pour le serveur web
- 1 pour le navigateur Firefox
- X pour les routeurs

Le joueur jouant le navigateur Firefox fait circuler un papier entre les joueurs avec un texte dessus.

Le papier arrive au serveur web.

On demande à tous ce qu'ils ont lu comme information.

Les règles du jeu HTTPS

Nombre de joueurs :
- 1 pour le serveur web
- 1 pour le navigateur Firefox
- X pour les routeurs

Après avoir expliqué le principe d'HTTPS, on passe à la pratique.

Le joueur jouant le navigateur Firefox met un papier avec un texte écrit dans une enveloppe avec le cadenas de couleur (blanche par exemple).

Le serveur web reçoit la carte clef de la couleur blanche.

On fait circuler l'enveloppe entre les joueurs qui n'ont pas le droit de l'ouvrir.

L'enveloppe arrive au serveur web, qui lit pour lui le texte du papier.

On demande à tous ce qu'ils ont lu comme information.

Les règles du jeu sur Tor

Nombre de joueurs :
- 3 pour les relais Tor
- 1 pour le serveur web
- 1 pour le navigateur Tor

Après avoir expliqué le principe du routage en oinion en théorie, on passe à la pratique.

On prend trois enveloppes de tailles différentes que l'on peut mettre les unes dans les autres. Sur chacune on colle un cadenas de couleur (rose, bleu, jaune). Chaque enveloppe représente un serveur du réseau Tor.

On explique que le navigateur détermine une route, choisit un relais parmi les différents noeuds du réseau (symbolisé par les clefs de couleurs : bleu, rose, jaune, noire, verte). On explique que les 3 noeuds choisit sont :
- rose : noeud d'entrée dans le réseau
- bleu : noeud intermédiaire
- jaune : noeud de sortie

La personne ayant la carte Navigateur Tor met une carte avec dessus une adresse de site web par exemple. Dans l'enveloppe la plus petite (ayant un cadenas jaune). Cette enveloppe est mise dans une enveloppe de taille moyenne (enveloppe ayant un cadenas bleu dessus), elle-même mise dans une enveloppe plus grande, ayant également un cadenas rose.

On explique que seule la clef de la bonne couleur peut ouvrir l'enveloppe.
On distribue les clefs aux différentes personnes.

La personne ayant la carte navigateur donne les enveloppes (empilées les unes dans les autres) à la personne ayant la clef de couleur rose (noeud d'entrée dans le réseau Tor). Elle ouvre l'enveloppe et passe l'enveloppe intérieure à la personne ayant la clef de couleur bleu (celle qui est maintenant visible sur l'enveloppe).

La personne ayant la carte clef bleu ouvre l'enveloppe. Et passe l'enveloppe intérieure à la personne ayant la clef de couleur jaune (celle qui est maintenant visible sur l'enveloppe).

La personne ayant la carte clef jaune ouvre l'enveloppe. Et passe la carte site web au site Internet.

On peut alors demander à chacun ce qu'il a pu voir comme information.

On peut mettre une enveloppe encore plus petite avec un cadenas noir ou blanc, pour illustrer l'envoi de message par HTTPS via TOR.

On combine alors les règles des jeux HTTPS et Tor.

Les règles du jeu sur GPG

Deux joueurs minimum. Chacun reçoit une carte clef et plusieurs cartes cadenas de la même couleur, ainsi que des enveloppes.

Le joueur 1 donne une carte cadenas et autres joueurs. Le jouer 2 fait de même inversement.

Envoi d'un premier message par le jouer un. Il met un texte dans une enveloppe et met le cadenas de la couleur du joueur 2, qui joue le rôle du destinataire, sur l'enveloppe.

L'enveloppe circule et une fois qu'elle arrive dans les mains de la personne qui la clef de la bonne couleur, la personne peut lire le texte.

On peut alors demander à chacun ce qu'il a pu voir comme information.

R.A.F.

Compléter les règles existantes.

Ajouter de nouvelles règles.

Le texte explicatif de la notion de signature (avec une carte sceau).

Evolutions, extensions du jeu, idées en vrac

- Ajouter des explications sur GPG avec la gestion des clefs, vérifications et signatures des clefs etc.
- Ajouter le concept d'attaque par l'Homme du milieu / Man In the middle
- Ajouter le concept de boîte noir avec une image de photocopieuse (qui va tracer ce qu'elle voit passer)
- Ajouter des cartes Serveurs DNS, adresse IP, Box du FAI etc. pour ajouter les notions correspondantes. Ce sera peut être un autre jeu ;-)

Travail collaboratif

J'ai mis en place un PAD pour https://mensuel.framapad.org/p/Tor_le_jeu pour que nous reprenions le concept, améliorons tout ça ensemble. Merci à vous.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Tuxicoman : Le driver AMD Catalyst incompatible avec Gnome sur Debian 8

lundi 11 mai 2015 à 07:05

Dans les notes de la nouvelle version il est indiqué que le driver propriétaire d’AMD Catalyst (le paquet fglrx en version 14.9 est disponible) n’est pas compatible avec Gnome. Si vous l’installez, vous vous retrouvez avec un écran noir à la place du traditionnel écran de login (gdm3). C’est bête.

Vous avez essayé avec l’installeur Catalyst d’AMD (fglrx 14.12 en ce moment). Même soucis sur Ubuntu 15.04?

J'aime(1)Ferme-la !(1)

Related Posts:

Gravatar de Tuxicoman
Original post of Tuxicoman.Votez pour ce billet sur Planet Libre.

Planet Libre : Brèves du Planet Libre - lundi 11, mai 2015

lundi 11 mai 2015 à 00:00

[EN] Sony makes it easier to install a custom OS on its handsets - ANDROID AUTHORITY

smartphone sony Android FirefoxOS bidouillabilité


antistress : Sony rend ses smartphones bidouillables en permettant l'installation d'autres systèmes d'exploitation, qu'il s'agisse d'une ROM alternative d'Android ou de Firefox OS (qui sait utiliser les mêmes pilotes binaires) par exemple : bravo ! Cet employé de Mozilla fait d'ailleurs tourner Firefox OS sur un Sony Z3 Compact (https://hacks.mozilla.org/2015/04/firefox-os-animations-the-dark-cubic-bezier-of-the-soul). Page dédiée de Sony : http://developer.sonymobile.com/unlockbootloader/unlock-yourboot-loader/


Secure Mobile Apps | The Guardian Project - Liens en vrac de sebsauvage

pistage logiciel android tips


antistress : "Une liste d'applications Android pour protéger votre vie privée. Téléchargement direct des APK proposé."


Loi Renseignement : des élus interpellent la Commission européenne - Next INpact

pistage institution Europe droit


antistress : "À quelques heures du vote du projet de loi Renseignement, deux élus de l’UMP ont annoncé qu’ils venaient d’interpeller le président de la Commission européenne, Jean-Claude Juncker. Ces parlementaires de l’opposition estiment que le texte porte « gravement » atteinte à la Charte des droits fondamentaux de l’UE."


Pourquoi obliger le SSL par défaut est une grosse connerie - Sam & Max

chiffrement Web HTTP HTTP/2 Mozilla


antistress : "Le Web deviendra un app store." Ah oui, en effet !


Un livre électronique verrouillé par un DRM ne peut être comparé à un livre imprimé (vidéo) - L'April

ebook DRM vidéo pistage


antistress : Excellente courte vidéo.


Loi Renseignement : un "mensonge d'État" pour le bâtonnier de Paris - Numerama

droit pistage institution


antistress : "Dans Le Figaro, le bâtonnier des avocats de Paris, Me Pierre-Olivier Sur, dénonce le projet de loi Renseignement qu'il voit comme un "mensonge d'État". Il estime que le Conseil constitutionnel devrait la censurer."


Loi renseignement : «La vie privée, et donc les libertés, sont atteintes» - Libération

droit pistage institution


antistress: "INTERVIEW Le député socialiste frondeur Pouria Amirshahi votera contre le projet de loi, mardi à l'Assemblée."


Gravatar de Planet Libre
Original post of Planet Libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Artisan Numérique : Lancer des applications graphiques à distance

dimanche 10 mai 2015 à 23:20

A l'heure où l'on nous bassine avec l'avancée extraordinaire que représente WayLand, il n'est sans doute pas inutile de rappeler que si X11 ne brille sans doute pas par ses performances, sa couche réseau lui permet de résoudre une vaste palette de problématique comme ici accéder à distance à un environnement graphique.

Comme vous ne l'ignorez peut-être pas, X11 est une technologie client/serveur. C'est à dire que lorsqu'une application est lancée, elle n'écrit jamais directement sur le périphérique graphique mais se connecte, par l'intermédiaire d'un kit graphique (Qt, GTK, etc) à un serveur d'affichage, le fameux Xorg exploitant le protocole X11.

Ainsi, à chaque fois qu'une application X11 veut afficher un rectangle, ou une image, c'est à ce serveur que cette demande est transmise et c'est lui qui effectue le rendu visuel. Dans l'autre sens, le serveur recueille les entrées telles la souris ou le clavier pour retransmettre cela à l'application.

Alors évidemment lorsque le client et le serveur sont sur une même machine, tout ceci ne va pas sans une certaine perte de performance. Cependant les impacts sur la vitesse sont limités à plusieurs étages comme par l'utilisation de sockets rapides (sockets UNIX) au lieu des classiques sockets sur IP, ou encore par un accès direct au GPU dans des cas critiques comme la 3D ou la vidéo.

Maintenant cette toute relative perte de performance ne doit pas faire oublier les immenses avantages de cette solution : la transparence réseau. En effet déporter l'affichage d'une application sur une machine distante, exécuter sur son écran local une application qui se trouve sur un serveur distant, tout cela et bien d'autres choses encore sont rendues possibles grâce au X11.

Pour la petite histoire il faut bien comprendre que cette transparence réseau n'est pas un coquetterie d'Unixien. En effet, à son origine, une architecture UNIX classique se composait d'un ou plusieurs serveur "puissant" et d'une myriade de petits terminaux graphiques causant couramment le X11 "en dur", le tout sur un LAN 1Mb/s.

Aujourd'hui la transparence réseau offerte par X11 n'est même pas soupçonnée la majorité des utilisateurs de Linux qui ne travaillent que sur une et une seule machine. Mais X11 permet de couvrir un vaste ensemble de cas d'usage allant du pratique à l'indispensable.

  • ouvrir une session graphique complète sur une machine distante. Tout ce qui sera exécuté tournera sur la machine distante et s'affichera via le serveur X11 de la machine locale.
  • ouvrir juste une application graphique, généralement via SSH, sur la machine distante.

Dans tous les cas le principe sera le même, une application est lancée à distance et se connecte à votre serveur X11 local. Voyons cela de plus près.

L'option "native"

Comme nous l'avons vu, un serveur X11 utilise les sockets pour communiquer avec le client. Et pour que cette communication soit la plus rapide possible, il en utilise deux types : des sockets "lents" TCP/IP, et des sockets "rapides" UNIX. Dans le cas d'un serveur local parlant à une application locale, le socket utilisé est systématiquement de type UNIX.

Pour des raisons de sécurité, il y a de forte chance que votre serveur X soit paramétré de sorte à ne pas utiliser les sockets TCP/IP, et donc de ne pas permettre son utilisation par une machine distante. Nous allons donc changer cela en ayant conscience que cette manipulation n'est sure que sur un réseau local de confiance et protégé du réseau public.

Le lancement de votre serveur X11 est effectué par l'intermédiaire d'un gestionnaire de session, par exemple GDM pour Gnome. Pour autoriser les clients distant à utiliser ce serveur X11 via TCP, il faut donc lancer en tant que root l'outil gdmsetup, aller dans l'onglet sécurité, et décocher la ligne Refuser les connexions TCP au serveur X. Ceci fait vous pouvez fermer gdmsetup et relancer votre serveur X. Au retour, le port 6000 correspondant à l'écran X11 :0.0 (si c'est :1.0 le port sera 6001, et ainsi de suite) devrait être écouté par le serveur :

rootnetstat -anlp | grep X | grep -v STREAM
tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      5667/X
vérification du serveur X11 en écoute

Ceci fait, nous allons pouvoir nous connecter sur la machine distante, par exemple avec SSH, et y lancer une commande graphique, par exemple evolution :

gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution
Utilisation de la transparence native de X11

C'est aussi simple que cela. Tout passe par l'utilisation de la variable DISPLAY qui indique à l'application où se trouve le serveur X11 à utiliser. En local, votre variable DISPLAY est sûrement :0.0. Le fait qu'il n'y ait rien devant le : indique au client que le serveur est local. Dans notre exemple il va donc aller sur la machine mon_desktop. 0.0 indique d'utiliser l'écran .0 de la carte 0.

Si tout a fonctionné, c'est nickel. Il est possible que votre serveur soit configuré pour refuser les connexions externes et vous aurez alors obtenez l'erreur suivante :

gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution
No protocol specified
Impossible d'ouvrir l'affichage :
Exécuter « evolution --help » pour obtenir la liste complète des options en ligne de commande.
Erreur d'autorisation

Ce qui compte ici c'est le No protocol specified qui dit, à qui sait le comprendre, que vous devez d'abord autoriser les connexions et lançant sur la machine secondaire la commande suivante :

gastonxhost +
access control disabled, clients can connect from any host
gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution&
Autorisation de tous les accès à la machine secondaire

Et là, ça marche... Ceci étant, dans la mesure où nous passons par SSH pour aller sur la machine distante, il existe une méthode plus simple consistant fournie par SSH lui-même.

L'option SSH

SSH permet la redirection de ports), et plus particulièrement est capable de rediriger le socket UNIX d'un serveur distant sur un socket TCP/IP local. Cette caractéristique nous permet en toute simplicité de faire la même chose que précédemment, mais à travers une connexion chiffrée convenant mieux à un réseau LAN moins sécurisé et ce, sans aucun changement des paramétrage de sécurité.

Ainsi, utilisé avec l'option -X (certaines configuration font cela par défaut), ssh va ainsi automatiquement changer la variable DISPLAY pour pointer sur son "faux" serveur X11 local :

gastonssh -X machine_distante
gaston@machine_distante>echo $DISPLAY
localhost:11.0
gaston@machine_distante>evolution&
lancement d'évolution à travers SSH

Là, plus besoin d'autorisation via xhost ni d'écoutes de port TCP/IP, tout se fait automatiquement par la grâce de SSH. Maintenant cette méthode n'est pas sans défaut. En effet, si la machine distante est un peu légère, le chiffrement temps réel de toutes les données circulant dans le tuyau SSH vont un peu pénaliser les performances. Mais sur un LAN moderne cela reste acceptable.

Concernant un réseau distant, par exemple à travers internet, c'est le volume de données échangé qui va pénaliser les performances. Il est donc plus sage dans ce cas d'opter sur une version compressée du protocole X11, comme nomachine/freeNX.

Un bureau distant complet

Pour vous donner un cas d'usage, mon bureau est relié à mon logement par une série de 3 switch Gigabit. Chez moi j'ai un petit portable très léger. Au bureau se trouve la grosse machine de développement. Pour travailler soir et week-end (oui, je sais ;-), je me connecte en mode session sur ma machine de bureau et tout ce que je lance est ainsi routé vers mon portable. A savoir en général firefox, chrome, une dizaine de GVIM, thunderbird, pidgin, skype, etc... Tout ce joli monde tourne donc dans mon bureau et communique avec le serveur X11 de mon portable en mode bi-écran... Et bien croyez moi, je ne vois strictement aucune différence entre cet usage, et le fait de bosser directement dans mon bureau. J'arrive même à lancer une vidéo sans soucis... Voyons donc comme faire pour lancer ainsi une session entière à distance.

Pour d'évidentes raisons de performances, ajouté du fait que je travaille sur un LAN sécurisé, l'approche SSH n'apporte ici que peu d'avantage. Autant donc attaquer nativement le serveur X11 de sorte à bénéficier des meilleurs performances.

Dans mon cas le gestionaire de fenêtre est l'excellent awesome. Le principe va donc être de créer un fichier xinitrc-distant qui va lancer à distance le gestionnaire de fenêtre.

xhost +
ssh ma-machine "DISPLAY=mon-portable:0.0 awesome"

Pour ceux qui ne sont pas à l'aise avec xinitrc, allez jeter oeil à cet article là. Pour les autres, il ne reste plus qu'à lancer la session dans la console linux :

xinit xinitrc-distant

Et hop, je suis sur ma machine distante, dans mon gestionnaire de fenêtres préféré et je peux dés lors lancer les applications que je veux. Voyons maintenant un peu ce que nous avons fait.

Le contenu de xinitrc-distant ne devrais plus vous surprendre outre mesure. On y retrouve déjà le xhost + pour autoriser les accès distants au serveur X11 local. Attention, comme indiqué au premier chapitre, il est nécessaire pour que tout ceci fonctionne que fous ayez activé le mode TCP/IP sur votre serveur X11 !!

Ensuite il s'agit de se connecter via SSH sur la machine distante pour lancer awesome. Le DISPLAY injecté en variable va quant à lui indiquer à awesome d'aller parler au serveur X11 de mon portable, et le tour est joué.

La syntaxe de lancement de X11 est en revanche un peu nouvelle, mais pas tant que cela en réalité. En effet, lorsque vous tapez startx dans la console Linux, c'est comme si vous aviez tapé xinit ~/.xinitrc. C'est commande xinit qui va concrètement lancer le serveur X11 et qui va ensuite exécuter le script xinitrc. Ici nous indiquons donc juste un script alternatif à xinit.

Et le son alors ??

Tout ceci est en effet bien sympa. Nous avons pour nos applications un affichage local, un clavier local, une souris locale, mais quid du son ? Et c'est là que PulseAudio va enfin servir à quelque chose. En effet, comme X11, PulseAudio bénéficie d'une transparence réseau qui par défaut est limité à un socket UNIX. Comme pour X11 nous allons donc commencer par activer le mode TCP/IP allant modifier le fichier /etc/pulse/default.pa. En cherchant dedans vous devez trouvez une ligne normalement commentée load-module module-native-protocol-tcp. Décommentez la ligne, sauvez le fichier et redémarrez la machine. Ceci fait, PulseAudio devrait être en écoute du port 4713 de la machin locale.

Nous devons maintenant modifier notre fichier xinitrc-distant pour injecter dans l'environnement d'awesome la référence au serveur PulseAudio :

xhost +
ssh ma-machine "DISPLAY=mon-portable:0.0 PULSE_SERVER=mon-portable:4713 awesome"

Ceci fait, il ne reste plus qu'à relancer xinit ~/xinit-distant pour avoir maintenant accès à l'audio tant pour les entrées que les sorties. Cela fonctionne tellement bien que j'utilise régulièrement skype de cette manière.

Conclusion

Comme à l'accoutumée, les outils SSH et X11 démontre leur plasticité et leur capacité à s'adapter à toutes les situations tordues auxquelles vous voudrez les plier. Happy Networking :)

Tweet

Gravatar de Artisan Numérique
Original post of Artisan Numérique.Votez pour ce billet sur Planet Libre.

Artisan Numérique : Lancer des applications graphiques à distance

dimanche 10 mai 2015 à 23:20

A l'heure où l'on nous bassine avec l'avancée extraordinaire que représente WayLand, il n'est sans doute pas inutile de rappeler que si X11 ne brille sans doute pas par ses performances, sa couche réseau lui permet de résoudre une vaste palette de problématique comme ici accéder à distance à un environnement graphique.

Comme vous ne l'ignorez peut-être pas, X11 est une technologie client/serveur. C'est à dire que lorsqu'une application est lancée, elle n'écrit jamais directement sur le périphérique graphique mais se connecte, par l'intermédiaire d'un kit graphique (Qt, GTK, etc) à un serveur d'affichage, le fameux Xorg exploitant le protocole X11.

Ainsi, à chaque fois qu'une application X11 veut afficher un rectangle, ou une image, c'est à ce serveur que cette demande est transmise et c'est lui qui effectue le rendu visuel. Dans l'autre sens, le serveur recueille les entrées telles la souris ou le clavier pour retransmettre cela à l'application.

Alors évidemment lorsque le client et le serveur sont sur une même machine, tout ceci ne va pas sans une certaine perte de performance. Cependant les impacts sur la vitesse sont limités à plusieurs étages comme par l'utilisation de sockets rapides (sockets UNIX) au lieu des classiques sockets sur IP, ou encore par un accès direct au GPU dans des cas critiques comme la 3D ou la vidéo.

Maintenant cette toute relative perte de performance ne doit pas faire oublier les immenses avantages de cette solution : la transparence réseau. En effet déporter l'affichage d'une application sur une machine distante, exécuter sur son écran local une application qui se trouve sur un serveur distant, tout cela et bien d'autres choses encore sont rendues possibles grâce au X11.

Pour la petite histoire il faut bien comprendre que cette transparence réseau n'est pas un coquetterie d'Unixien. En effet, à son origine, une architecture UNIX classique se composait d'un ou plusieurs serveur "puissant" et d'une myriade de petits terminaux graphiques causant couramment le X11 "en dur", le tout sur un LAN 1Mb/s.

Aujourd'hui la transparence réseau offerte par X11 n'est même pas soupçonnée la majorité des utilisateurs de Linux qui ne travaillent que sur une et une seule machine. Mais X11 permet de couvrir un vaste ensemble de cas d'usage allant du pratique à l'indispensable.

  • ouvrir une session graphique complète sur une machine distante. Tout ce qui sera exécuté tournera sur la machine distante et s'affichera via le serveur X11 de la machine locale.
  • ouvrir juste une application graphique, généralement via SSH, sur la machine distante.

Dans tous les cas le principe sera le même, une application est lancée à distance et se connecte à votre serveur X11 local. Voyons cela de plus près.

L'option "native"

Comme nous l'avons vu, un serveur X11 utilise les sockets pour communiquer avec le client. Et pour que cette communication soit la plus rapide possible, il en utilise deux types : des sockets "lents" TCP/IP, et des sockets "rapides" UNIX. Dans le cas d'un serveur local parlant à une application locale, le socket utilisé est systématiquement de type UNIX.

Pour des raisons de sécurité, il y a de forte chance que votre serveur X soit paramétré de sorte à ne pas utiliser les sockets TCP/IP, et donc de ne pas permettre son utilisation par une machine distante. Nous allons donc changer cela en ayant conscience que cette manipulation n'est sure que sur un réseau local de confiance et protégé du réseau public.

Le lancement de votre serveur X11 est effectué par l'intermédiaire d'un gestionnaire de session, par exemple GDM pour Gnome. Pour autoriser les clients distant à utiliser ce serveur X11 via TCP, il faut donc lancer en tant que root l'outil gdmsetup, aller dans l'onglet sécurité, et décocher la ligne Refuser les connexions TCP au serveur X. Ceci fait vous pouvez fermer gdmsetup et relancer votre serveur X. Au retour, le port 6000 correspondant à l'écran X11 :0.0 (si c'est :1.0 le port sera 6001, et ainsi de suite) devrait être écouté par le serveur :

rootnetstat -anlp | grep X | grep -v STREAM
tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      5667/X
vérification du serveur X11 en écoute

Ceci fait, nous allons pouvoir nous connecter sur la machine distante, par exemple avec SSH, et y lancer une commande graphique, par exemple evolution :

gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution
Utilisation de la transparence native de X11

C'est aussi simple que cela. Tout passe par l'utilisation de la variable DISPLAY qui indique à l'application où se trouve le serveur X11 à utiliser. En local, votre variable DISPLAY est sûrement :0.0. Le fait qu'il n'y ait rien devant le : indique au client que le serveur est local. Dans notre exemple il va donc aller sur la machine mon_desktop. 0.0 indique d'utiliser l'écran .0 de la carte 0.

Si tout a fonctionné, c'est nickel. Il est possible que votre serveur soit configuré pour refuser les connexions externes et vous aurez alors obtenez l'erreur suivante :

gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution
No protocol specified
Impossible d'ouvrir l'affichage :
Exécuter « evolution --help » pour obtenir la liste complète des options en ligne de commande.
Erreur d'autorisation

Ce qui compte ici c'est le No protocol specified qui dit, à qui sait le comprendre, que vous devez d'abord autoriser les connexions et lançant sur la machine secondaire la commande suivante :

gastonxhost +
access control disabled, clients can connect from any host
gastonssh machine_distante
gaston@machine_distante>DISPLAY=mon_desktop:0.0 evolution&
Autorisation de tous les accès à la machine secondaire

Et là, ça marche... Ceci étant, dans la mesure où nous passons par SSH pour aller sur la machine distante, il existe une méthode plus simple consistant fournie par SSH lui-même.

L'option SSH

SSH permet la redirection de ports), et plus particulièrement est capable de rediriger le socket UNIX d'un serveur distant sur un socket TCP/IP local. Cette caractéristique nous permet en toute simplicité de faire la même chose que précédemment, mais à travers une connexion chiffrée convenant mieux à un réseau LAN moins sécurisé et ce, sans aucun changement des paramétrage de sécurité.

Ainsi, utilisé avec l'option -X (certaines configuration font cela par défaut), ssh va ainsi automatiquement changer la variable DISPLAY pour pointer sur son "faux" serveur X11 local :

gastonssh -X machine_distante
gaston@machine_distante>echo $DISPLAY
localhost:11.0
gaston@machine_distante>evolution&
lancement d'évolution à travers SSH

Là, plus besoin d'autorisation via xhost ni d'écoutes de port TCP/IP, tout se fait automatiquement par la grâce de SSH. Maintenant cette méthode n'est pas sans défaut. En effet, si la machine distante est un peu légère, le chiffrement temps réel de toutes les données circulant dans le tuyau SSH vont un peu pénaliser les performances. Mais sur un LAN moderne cela reste acceptable.

Concernant un réseau distant, par exemple à travers internet, c'est le volume de données échangé qui va pénaliser les performances. Il est donc plus sage dans ce cas d'opter sur une version compressée du protocole X11, comme nomachine/freeNX.

Un bureau distant complet

Pour vous donner un cas d'usage, mon bureau est relié à mon logement par une série de 3 switch Gigabit. Chez moi j'ai un petit portable très léger. Au bureau se trouve la grosse machine de développement. Pour travailler soir et week-end (oui, je sais ;-), je me connecte en mode session sur ma machine de bureau et tout ce que je lance est ainsi routé vers mon portable. A savoir en général firefox, chrome, une dizaine de GVIM, thunderbird, pidgin, skype, etc... Tout ce joli monde tourne donc dans mon bureau et communique avec le serveur X11 de mon portable en mode bi-écran... Et bien croyez moi, je ne vois strictement aucune différence entre cet usage, et le fait de bosser directement dans mon bureau. J'arrive même à lancer une vidéo sans soucis... Voyons donc comme faire pour lancer ainsi une session entière à distance.

Pour d'évidentes raisons de performances, ajouté du fait que je travaille sur un LAN sécurisé, l'approche SSH n'apporte ici que peu d'avantage. Autant donc attaquer nativement le serveur X11 de sorte à bénéficier des meilleurs performances.

Dans mon cas le gestionaire de fenêtre est l'excellent awesome. Le principe va donc être de créer un fichier xinitrc-distant qui va lancer à distance le gestionnaire de fenêtre.

xhost +
ssh ma-machine "DISPLAY=mon-portable:0.0 awesome"

Pour ceux qui ne sont pas à l'aise avec xinitrc, allez jeter oeil à cet article là. Pour les autres, il ne reste plus qu'à lancer la session dans la console linux :

xinit xinitrc-distant

Et hop, je suis sur ma machine distante, dans mon gestionnaire de fenêtres préféré et je peux dés lors lancer les applications que je veux. Voyons maintenant un peu ce que nous avons fait.

Le contenu de xinitrc-distant ne devrais plus vous surprendre outre mesure. On y retrouve déjà le xhost + pour autoriser les accès distants au serveur X11 local. Attention, comme indiqué au premier chapitre, il est nécessaire pour que tout ceci fonctionne que fous ayez activé le mode TCP/IP sur votre serveur X11 !!

Ensuite il s'agit de se connecter via SSH sur la machine distante pour lancer awesome. Le DISPLAY injecté en variable va quant à lui indiquer à awesome d'aller parler au serveur X11 de mon portable, et le tour est joué.

La syntaxe de lancement de X11 est en revanche un peu nouvelle, mais pas tant que cela en réalité. En effet, lorsque vous tapez startx dans la console Linux, c'est comme si vous aviez tapé xinit ~/.xinitrc. C'est commande xinit qui va concrètement lancer le serveur X11 et qui va ensuite exécuter le script xinitrc. Ici nous indiquons donc juste un script alternatif à xinit.

Et le son alors ??

Tout ceci est en effet bien sympa. Nous avons pour nos applications un affichage local, un clavier local, une souris locale, mais quid du son ? Et c'est là que PulseAudio va enfin servir à quelque chose. En effet, comme X11, PulseAudio bénéficie d'une transparence réseau qui par défaut est limité à un socket UNIX. Comme pour X11 nous allons donc commencer par activer le mode TCP/IP allant modifier le fichier /etc/pulse/default.pa. En cherchant dedans vous devez trouvez une ligne normalement commentée load-module module-native-protocol-tcp. Décommentez la ligne, sauvez le fichier et redémarrez la machine. Ceci fait, PulseAudio devrait être en écoute du port 4713 de la machin locale.

Nous devons maintenant modifier notre fichier xinitrc-distant pour injecter dans l'environnement d'awesome la référence au serveur PulseAudio :

xhost +
ssh ma-machine "DISPLAY=mon-portable:0.0 PULSE_SERVER=mon-portable:4713 awesome"

Ceci fait, il ne reste plus qu'à relancer xinit ~/xinit-distant pour avoir maintenant accès à l'audio tant pour les entrées que les sorties. Cela fonctionne tellement bien que j'utilise régulièrement skype de cette manière.

Conclusion

Comme à l'accoutumée, les outils SSH et X11 démontre leur plasticité et leur capacité à s'adapter à toutes les situations tordues auxquelles vous voudrez les plier. Happy Networking :)

Tweet

Gravatar de Artisan Numérique
Original post of Artisan Numérique.Votez pour ce billet sur Planet Libre.