¿Buen valor predeterminado para XDG_RUNTIME_DIR?

10

La especificación de directorio base de XDG es una especificación muy interesante para directorios de usuarios. También proporciona buenos valores predeterminados, excepto para XDG_RUNTIME_DIR.

Ahora estoy escribiendo un software que necesita crear canalizaciones con nombre. Es un marco cliente-servidor por usuario (hay un FIFO para el servidor y un FIFO por cliente).

Si XDG_RUNTIME_DIRno está definido, actualmente estoy usando un subdirectorio por usuario en /tmp, pero no garantiza todas las condiciones especificadas (por ejemplo, el párrafo que comienza con "La vida útil del directorio DEBE estar vinculada al usuario que está conectado ..." )

Es /tmp/myserver-$USERlo suficientemente bueno?

Editar

Vi en otras partes algunas sugerencias:

  • . es bastante insatisfactorio (al menos porque no es un camino absoluto).
  • También vi /var/run/user/$USER: no está mal, pero ese directorio no existe (al menos en mi caja que ejecuta una prueba de Debian )
cadrian
fuente

Respuestas:

4

/tmpmuchos programas ya lo utilizan de manera similar. En mi sistema puedo ver los directorios /tmp/orbit-$USER(utilizados por ORBit2 de Gnome) y /tmp/.X11-unix/(Xorg y X11) con muchas tuberías, ehm, enchufes, en ellos. Estoy seguro de que también hay otros, así que no veo nada de malo en lo que estás haciendo. Solo prepárese para que, dado que es una ubicación mundial de escritura, un proceso malicioso puede secuestrar la ubicación (verifique los permisos antes de escribirle).

También puedo recomendar $TMPDIRa aquellos que usan pam_mktemp , ya que este directorio solo es accesible para el usuario.

chutz
fuente
PAM es la solución correcta, ¡gracias! En Debian se llama libpam-tmpdir
cadrian
5

SystemD hace /run/user/$USERalgo obligatorio.

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

Acceso de escritura sin privilegios

Los procesos no privilegiados generalmente carecen de acceso de escritura a la mayoría de la jerarquía.

Las excepciones para los usuarios normales son /tmp, /var/tmp, /dev/shm, así como el directorio principal $HOME(normalmente se encuentra a continuación /home) y el directorio de ejecución $XDG_RUNTIME_DIR(que se encuentra a continuación /run/user) del usuario, que son todos de escritura.

Para el sistema sin privilegios procesa solamente /tmp, /var/tmpy /dev/shmse puede escribir. Si un proceso del sistema sin privilegios necesita un directorio privado /varo /runque se pueda escribir en o , se recomienda crearlo antes de soltar los privilegios en el código del demonio, crearlo a través de fragmentos tmpfiles.d (5) durante el arranque, o mediante la RuntimeDirectory= directiva de unidades de servicio (Ver systemd.unit (5) para más detalles).

go2null
fuente
2

Cree el directorio /tmp/service-$USER.id con una identificación única. Por ejemplo, en shell:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
fuente
1
¿Cómo se asegura el requisito de que se use el mismo directorio desde el primer inicio de sesión hasta el último cierre de sesión del usuario?
cadrian
Hmmm ... crea un enlace simbólico ~ user / .service / tmp_dir. Si el directorio vinculado no existe, cree uno nuevo
Selivanov Pavel