J'essaie d'écrire une application qui s'exécute en tant que démon et qui surveille les sessions X exécutées . En ce moment j'ai du mal à trouver la documentation concernant le modèle de sécurité X. Plus précisément, je tente de se connecter aux écrans X en cours d'exécution à partir de mon processus démon. Appeler XOpenDisplay(dispName)
ne fonctionne pas, je suppose que mon processus n'a pas la permission de se connecter à cet affichage. Après un peu de recherche, il semble que je doive faire quelque chose avec xauth.Contournement d'autorité X
Dans mon environnement de test, le serveur X est démarré comme ceci:
/usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-QBEVDj
Ce fichier contient une seule entrée, qui ressemble à ceci:
#ffff##: MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
en ajoutant une entrée à ~/.Xauthority
avec la même clé hexadécimale, je peux se connecter au serveur X. Cependant, ceci est difficile parce que j'ai besoin de trouver par programme le fichier auth utilisé par le serveur X (l'emplacement deviendra probablement de distro à distro, et probablement d'un démarrage à l'autre), puis l'interroger, puis écrivez un nouveau fichier auth . Si le processus s'exécute en tant que démon, il peut ne pas avoir de répertoire personnel , alors comment savoir où écrire les nouvelles entrées?
Idéalement, ce que je suis à la recherche est un moyen de contourner la nécessité d'avoir le cookie xauth dans ~/.Xauthority
, ou même de savoir ce que le cookie est à tous. Je me rends compte que cela est peu probable - à quoi bon un modèle de sécurité s'il est facilement contourné? mais j'espère que quelqu'un sur cette liste aura quelques bonnes idées. Existe-t-il un moyen de spécifier que mon processus est privilégié et devrait donc automatiquement avoir accès à n'importe quel affichage sur la machine locale?
J'ai découvert ce Q dans le processus de résoudre un problème similaire moi-même, et découvert dans un code système un qui fournit un moyen de trouver le fichier .xauthority avec lequel l'affichage X a été initialisé, et fait un code utile: http : //blog.fox.geek.nz/2012/10/granting-root-access-to-all-xorg-x11.html –
Sur un plan plus fondamental, vous semblez chercher des moyens de contourner les barrières de sécurité qui étaient mettre là pour de bonnes raisons. Une approche moins intrusive consiste à faire en sorte que vos utilisateurs exécutent un client qui se connecte à votre démon via un mécanisme RPC. Vous pouvez le faire fonctionner par défaut pour tous les utilisateurs à partir des hooks de session X à l'échelle du système, ce qui permet également, mais fastidieux, à certains utilisateurs de se désengager. – tripleee