Bon défaut pour XDG_RUNTIME_DIR?

10

La spécification de répertoire de base XDG est une spécification très intéressante pour les répertoires utilisateur. Il fournit également de bonnes valeurs par défaut, à l'exception de XDG_RUNTIME_DIR.

Maintenant, j'écris un logiciel qui doit créer des canaux nommés. Il s'agit d'une infrastructure client-serveur par utilisateur (il existe une FIFO pour le serveur et une FIFO par client).

Si XDG_RUNTIME_DIRn'est pas défini, j'utilise actuellement un sous-répertoire par utilisateur dans /tmp- mais il ne garantit pas toutes les conditions spécifiées (à savoir le paragraphe commençant par "La durée de vie du répertoire DOIT être lié à l'utilisateur connecté…" )

Est-ce /tmp/myserver-$USERassez bon?

Éditer

J'ai vu ailleurs quelques suggestions:

  • . est tout à fait insatisfaisant (du moins parce que ce n'est pas un chemin absolu).
  • J'ai également vu /var/run/user/$USER- pas mal, mais ce répertoire n'existe pas (au moins sur ma boîte exécutant un test Debian )
cadrian
la source

Réponses:

4

/tmpest déjà utilisé par de nombreux programmes de la même manière. Sur mon système, je peux voir les /tmp/orbit-$USERrépertoires (utilisés par ORBit2 de Gnome) et /tmp/.X11-unix/(Xorg et X11) avec beaucoup de tuyaux, ehm, sockets, en eux. Je suis sûr qu'il y en a aussi d'autres, donc je ne vois rien de mal à ce que vous faites. Soyez juste préparé car comme il s'agit d'un emplacement accessible en écriture dans le monde entier, un processus malveillant peut détourner l'emplacement (vérifiez les autorisations avant d'y écrire).

Je peux également recommander $TMPDIRpour ceux qui utilisent pam_mktemp , car ce répertoire est uniquement accessible par l'utilisateur.

chutz
la source
PAM est la bonne solution, merci! Sur Debian, cela s'appelle libpam-tmpdir
cadrian
5

SystemD rend /run/user/$USERun peu obligatoire.

http://www.freedesktop.org/software/systemd/man/file-hierarchy.html

Accès en écriture non privilégié

Les processus non privilégiés n'ont généralement pas accès en écriture à la plupart de la hiérarchie.

Les exceptions pour les utilisateurs normaux sont /tmp, /var/tmp, /dev/shmainsi que le répertoire $HOME(généralement trouvé ci - dessous /home) et le répertoire d'exécution $XDG_RUNTIME_DIR( qui se trouve ci - dessous /run/user) de l'utilisateur, qui sont tous inscriptible.

Pour le système ne traite que sans droits /tmp, /var/tmpet /dev/shmsont inscriptibles. Si un processus système non privilégié a besoin d'un répertoire privé accessible en écriture dans /varou /run, il est recommandé de le créer avant de supprimer des privilèges dans le code démon, de le créer via des fragments tmpfiles.d (5) lors du démarrage, ou via la RuntimeDirectory= directive d'unités de service (voir systemd.unit (5) pour plus de détails).

go2null
la source
2

Créez le répertoire /tmp/service-$USER.id avec un identifiant unique. Par exemple, en coquille:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
la source
1
Comment assurez-vous que le même répertoire est utilisé de la première connexion à la dernière déconnexion de l'utilisateur?
cadrian
Hmmm ... créer un lien symbolique ~ user / .service / tmp_dir. Si le répertoire lié n'existe pas, créez-en un nouveau
Selivanov Pavel