Thomas Touhey
:
Des métadonnées au bout de vos doigts ! (finger)
Il y a plus d’un an, j’ai lu un article qui parlait de comment quelqu’un a pénétré des serveurs DNS parce qu’ils n’étaient plus maintenus depuis un moment (lien en anglais). Dans cet article, l’auteur évoque un protocole qui aujourd’hui a quasiment disparu, sauf sur les machines qu’il a pénétré (anciennes et peu maintenues). Du coup, ça m’a intrigué, et j’ai voulu en savoir plus.
Dans la première édition de UNIX, publiée en 1971, pour savoir qui était
actuellement connecté et actif, on utilisait who, qui utilisait le
fichier utmp
— j’en parle dans un article précédent.
Seulement, ce programme était assez peu pratique pour savoir lorsqu’un
interlocuteur en particulier est disponible, la dernière fois qu’il a été vu,
où il est, et caetera.
Suivant ce constat, Les Earnest inventa un programme nommé « finger » qui
permettait enfin de faire cela ; ce programme était accompagné d’un
protocole qui a été standardisé en 1977 dans la RFC 742 par
Ken Harrenstien et utilise le port tcp/79
.
Cette RFC évolua plusieurs fois jusqu’en 1991 dans la RFC 1288,
alors que le protocole fut progressivement abandonné.
De nos jours, sous Manjaro Linux, l’utilitaire finger
se trouve dans le
paquet netkit-bsd-finger
. Il existe aujourd’hui très peu de serveurs Finger
avec lesquels interagir, mais finger
permet également de faire des requêtes
locales pour obtenir des résultats tels que celui-ci (avec un fichier .plan
personnalisé) :
Login: cake Name: Thomas Touhey
Directory: /home/cake Shell: /bin/zsh
Office: 0621612972, 016-943-9574
On since Mon Jan 8 13:17 (CET) on tty7 from :0
52 minutes 26 seconds idle
No mail.
Plan:
__ _ _
/ _(_)_ __ __ _ ___ _ __ __| |
| |_| | '_ \ / _` |/ _ \ '__/ _` |
| _| | | | | (_| | __/ | | (_| |
|_| |_|_| |_|\__, |\___|_| \__,_|
yet another |___/ finger daemon
Find out more about the project on
https://forge.touhey.org/fingerd.git
Les utilisations de l’utilitaire sont assez simples :
finger
: on demande la liste des utilisateurs locaux connectés.finger user
: on demande des informations concernant les utilisateurs locaux ayantuser
dans leur nom.finger @host
: on demande la liste des utilisateurs connectés à l’hôtehost
(à remplacer avec un nom d’hôte,localhost
outouhey.fr
par exemple).finger user@host
: on demande les informations concernant les utilisateurs ayantuser
dans leur nom à l’hôtehost
.finger <…>@hehe@host
: on demande à l’hôtehost
de transmettre une requête à l’hôtehehe
(les serveurs Finger d’aujourd’hui vous refuseront certainement de le faire).
La sortie de ces commandes, comme pour whois
(voire pire), a un format
irrégulier puisqu’il a été pensé dès le départ comme étant lu par des
humains ; dans le cas d’une requête distante, l’utilitaire local vous transmet
directement la réponse du serveur.
Pour le défi, je me suis alors lancé dans le développement d’un serveur implémentant ce protocole. J’ai choisi Python, mon langage de scripting préféré, et ai ainsi lancé le projet fingerd l’année dernière, sur lequel je travaille de façon assez irrégulière.
cake@68 :: fingerd/public » python -m fingerd &
Starting fingerd on [127.0.0.1]:3999.
Starting fingerd on [::1]:3999.
cake@68 :: fingerd/public » finger @localhost
[localhost]
[127.0.0.1] list connected users.
Site: TOUHEY.FR
Command line:
Login Name TTY Idle Login Time Office
john Johnny Boy ttyS2 =TODO= =TODO= Rob's office
cake@68 :: fingerd/public » kill -INT %1
Stopping fingerd on [::1]:3999.
Stopping fingerd on [127.0.0.1]:3999.
Le projet est toujours en cours de développement, mais j’ai déjà implémenté
la gestion du protocole (avec le module socketserver
), décomposé le problème
en plusieurs objets, à savoir le serveur lui-même, l’interface avec le reste
du système pour avoir les utilisateurs, l’afficheur et le logger qui s’occupe
de consigner les requêtes.
Le fait d’avoir fait des interfaces m’a donné une idée qui est déjà plutôt développée : celle de faire une interface de fiction, en permettant de scripter les créations, éditions, suppressions, connexions, déconnexions, changements de dossier courant, shell, etc, d’utilisateurs pour raconter une histoire. Le protocole n’a jamais été pensé pour raconter une histoire en soi, mais pour organiser les rencontres ; c’est comme regarder une pièce de théâtre par un trou de serrure, mais après tout, pourquoi pas ?
En tous les cas, je continuerai ce projet avec le même rythme irrégulier
qu’actuellement, et qui sait, un jour, finger @touhey.fr
pourrait vous
raconter quelque chose d’intéressant !