L’objectif de ce groupe de travail était la compréhension des mécanismes d’authentifications mis en œuvre par une mire de connexion. Le but était de proposer une mire accessible et adaptée à un public qui ne sait ni lire ni écrire.

La procédure d’ouverture de session classique d’un client GNU/Linux repose généralement sur la sélection d’un utilisateur et la saisie du mot de passe correspondant. Si les modes de sélection de l’utilisateur sont variés (saisie, choix dans une liste, choix d’une icône, etc.), le mode de saisie du mot de passe lui est assez classique.

Pour certains publics, l’utilisation d’une phrase de passe ou d’un mot de passe valide est gênée par la difficulté à le retenir ou à le saisir. D’autres moyens d’authentification que le mot de passe sont proposés sur diverses plateformes (dispositifs reposant sur la biométrie, périphériques authentifiants comme des cartes à puce, déverrouillage par schéma, etc.). Nous avons, quant à nous, exploré la possibilité de mettre en place une mire spécifique qui attend une suite unique de pictogrammes faisant le lien avec le mot de passe attendu par le système.

Constitution du groupe de travail

Notre groupe était composé de trois personnes dont l’une participait parallèlement à un autre atelier du hackathon. Les compétences étaient plutôt homogènes avec une prédominance de l’intégration et du développement.

Organisation du groupe de travail

Les contraintes matérielles et la répartition des participants nous a conduit à travailler chacun de notre côté durant une bonne partie du hackathon. Cela n’a pas eu d’impact notable pour la phase de documentation, par contre la réalisation a été moins efficace qu’elle n’aurait pu l’être.

Création d’une mire de connexion avec LightDM

Choix technologiques

Connaissant déjà la versatilité du démon de connexion LightDM, nous avons opté pour construire une mire s’appuyant dessus. LightDM offre la possibilité d’utiliser plusieurs langages de programmation. Disposant de compétences en JavaScript et en Python au sein de l’équipe, nous avons rapidement évalué la possibilité de créer une mire avec l’un de ces deux langages de programmation. La découverte d’un tutoriel mettant en avant le duo Python, GTK nous a définitivement orienté vers le langage Python.

Tutoriel LightDM Greeter par Matt Fischer : http://www.mattfischer.com/blog/archives/5

Pour les tests, nous avons utilisé une Debian 9 et une Ubuntu 18.04 Bionic.

Principe de fonctionnement

Le principe d’une ouverture de session avec LightDM repose sur l’échange de données entre la mire et le démon, ce dernier vérifie que les informations envoyées authentifient bien un utilisateur du système.

  • La mire envoie le nom d’utilisateur (LightDM.Greeter.authenticate()) ;
  • La backend demande le mot de passe si l’utilisateur existe (message « show-prompt ») ;
  • La mire envoie le mot de passe (LightDM.Greeter.respond()) ;
  • Le backend valide le mot de passe (message « authentication-complete »).

Le premier échange est la transmission d’un nom de connexion au démon LightDM. Après avoir reçu cet élément, la démon envoie un message signifiant qu’il attend le mot de passe du compte. L’échange suivant est la transmission, du mot de passe au démon. Selon la validité des informations de connexions le démon peut émettre le message final et ouvrir la session.

Les fichiers installés

Exécutable

Le choix s’étant porté sur le duo Python, GTK, l’exécutable servant à afficher la mire est une application Python mettant en œuvre différents éléments graphiques et la boucle d’événements de la bibliothèque GTK.

Dans un premier temps, la construction de l’interface a été effectuée avec le programme Glade (interface graphique de composition d’interfaces graphiques). La difficulté à ajouter des éléments graphiques dynamiquement nous a ensuite poussé à composer l’interface directement dans le code Python.

Au final, l’exécutable est réduit à un programme Python important les modules LightDM et GTK via le module gi.repository.

from gi.repository import Gtk
from gi.repository import LightDM

Nous nous sommes passés du fichier de description d’interface au format XML habituellement construit avec Glade.

Le programme en Python a été copié dans un répertoire connu du système par la variable PATH et rendu exécutable.

.desktop

Le fichier .desktop se place dans le répertoire /usr/share/xgreeters/ et permet d’indiquer à LightDM l’emplacement du programme Python à lancer. Ce fichier est a déclarer dans le fichier de configuration de LightDM.

[Desktop Entry]
Name=EOLE Greeter
Comment=Mire de connexion EOLE
Exec=eole_greeter.py
Type=Application

Configuration de LightDM

Pour utiliser notre nouvelle mire de connexion, il ne reste plus qu’à indiquer à LightDM le nom du fichier .desktop dans la rubrique Seat de la configuration. La variable à renseigner s’appelle greeter-session. La valeur est le nom du fichier .desktop sans l’extension.

[Seat:*]
greeter-session=<nom du fichier desktop sans l’extension>

Fonctionnement de la mire

Pour cette expérimentation, nous nous sommes contentés de valider notre compréhension du mécanisme d’ouverture de session et la possibilité de mettre en place une méthode de saisie basée sur la sélection successive de boutons.

Au final la mire propose une grille d’images permettant la saisie d’un mot de passe complexe avec l’appui sur un nombre limité de boutons.

Code source

L’ensemble du code et la procédure d’installation sont publiés dans un dépôt Git de la forge EOLE : https://dev-eole.ac-dijon.fr/projects/eole-greeter/repository

Perspectives

La finalité d’un tel travail serait de rendre accessible la saisie d’un mot de passe fort. Le mécanisme pour passer d’une succession de boutons à quelque chose de non trivial reste à faire.

L’un des éléments déterminants pour mettre en place ce mécanisme est le nombre de boutons qui permettent de construire le mot de passe.