Guter Standard für XDG_RUNTIME_DIR?

10

Die XDG-Basisverzeichnisspezifikation ist eine sehr interessante Spezifikation für Benutzerverzeichnisse. Es bietet auch gute Standardwerte, außer für XDG_RUNTIME_DIR.

Jetzt schreibe ich eine Software, die Named Pipes erstellen muss. Es handelt sich um ein Client-Server-Framework pro Benutzer (es gibt ein FIFO für den Server und ein FIFO pro Client).

Wenn XDG_RUNTIME_DIRnicht definiert, verwende ich derzeit ein Unterverzeichnis pro Benutzer in /tmp- aber es stellt nicht alle angegebenen Bedingungen sicher (dh der Absatz, der mit "Die Lebensdauer des Verzeichnisses MUSS an den angemeldeten Benutzer gebunden sein ..." beginnt ).

Ist /tmp/myserver-$USERgut genug

Bearbeiten

Ich habe an anderer Stelle einige Vorschläge gesehen:

  • . ist ziemlich unbefriedigend (zumindest weil es kein absoluter Weg ist).
  • Ich habe auch gesehen /var/run/user/$USER- nicht schlecht, aber dieses Verzeichnis existiert nicht (zumindest auf meiner Box, auf der ein Debian- Test ausgeführt wird )
Cadrian
quelle

Antworten:

4

/tmpwird bereits von vielen Programmen in ähnlicher Weise verwendet. Auf meinem System kann ich die /tmp/orbit-$USERVerzeichnisse (von Gnomes ORBit2 verwendet) und /tmp/.X11-unix/(Xorg und X11) mit vielen Pipes, ehm, Sockets, sehen. Ich bin mir sicher, dass es auch andere gibt, also sehe ich nichts Falsches an dem, was Sie tun. Seien Sie nur darauf vorbereitet, dass ein böswilliger Prozess den Speicherort entführen kann, da es sich um einen weltweit beschreibbaren Speicherort handelt (überprüfen Sie die Berechtigungen, bevor Sie darauf schreiben).

Ich kann auch $TMPDIRfür diejenigen empfehlen , die pam_mktemp verwenden , da dieses Verzeichnis nur für den Benutzer zugänglich ist.

Chutz
quelle
PAM ist die richtige Lösung, danke! Auf Debian heißt es libpam-tmpdir
cadrian
5

SystemD macht das /run/user/$USERirgendwie obligatorisch.

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

Unprivilegierter Schreibzugriff

Nicht privilegierte Prozesse haben im Allgemeinen keinen Schreibzugriff auf den größten Teil der Hierarchie.

Die Ausnahmen für normale Benutzer sind /tmp, /var/tmp, /dev/shmsowie das Home - Verzeichnis $HOME( in der Regel wie folgt zu finden /homeund) dem Runtime - Verzeichnis $XDG_RUNTIME_DIR(gefunden unten /run/user) des Benutzers, die alle beschreibbar sind.

Für unprivileged System verarbeitet nur /tmp, /var/tmpund /dev/shmbeschreibbar sind. Wenn ein nicht privilegierter Systemprozess ein privates, beschreibbares Verzeichnis in /varoder benötigt /run, wird empfohlen, es entweder vor dem Löschen von Berechtigungen im Daemon-Code zu erstellen, es während des Startvorgangs über tmpfiles.d (5) -Fragmente oder über die RuntimeDirectory= Anweisung von Serviceeinheiten zu erstellen (Einzelheiten siehe systemd.unit (5)).

go2null
quelle
2

Erstellen Sie das Verzeichnis /tmp/service-$USER.id mit einer eindeutigen ID. Zum Beispiel in der Schale:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
quelle
1
Wie stellen Sie sicher, dass vom ersten bis zum letzten Abmelden des Benutzers dasselbe Verzeichnis verwendet wird?
Cadrian
Hmmm ... erstelle symlink ~ user / .service / tmp_dir. Wenn kein verknüpftes Verzeichnis vorhanden ist, erstellen Sie ein neues
Selivanov Pavel