Présentation du problème
Lorsque vous exécutez une application X11 à partir d'un conteneur, d'un chroot ou via ssh avec un fichier .Xauthority monté, vous pouvez rencontrer l'erreur « Authorization required, but no authorization protocol specified ». Le fichier .Xauthority est une liste de cookies, et chaque entrée est associée à une famille et un nom d'hôte. Le client recherche l'entrée dont le nom d'hôte correspond à la machine sur laquelle il s'exécute.
La solution avec FamilyWild
X a une famille wildcard, FamilyWild, dont la valeur numérique est 0xffff. Un cookie dans cette famille correspond à n'importe quel nom d'hôte. Pour résoudre le problème, nous pouvons réécrire le cookie pour qu'il corresponde à tous les hôtes. Nous utilisons la commande
xauth nlist pour afficher les entrées du fichier .Xauthority, puis nous utilisons sed pour remplacer le champ de famille par ffff.
Fonctionnement de la solution
Le changement est minime, il suffit de modifier les deux premiers octets du fichier .Xauthority pour passer de FamilyLocal (0100) à FamilyWild (ffff). Cela permet au client de présenter le cookie sans tenir compte du nom d'hôte. Nous pouvons ensuite bind-monter le fichier .Xauthority modifié sur le client et définir la variable XAUTHORITY pour qu'il pointe vers ce fichier.
Implications de la solution
Il est important de noter que la solution FamilyWild est plus sûre que l'utilisation de xhost +, qui désactive complètement le contrôle d'accès basé sur les hôtes. Avec FamilyWild, le client doit toujours présenter le cookie secret pour accéder au serveur X. Cependant, il est important de gérer correctement les permissions du fichier .Xauthority modifié pour éviter les problèmes de sécurité.