XDG_RUNTIME_DIR的默认值好吗?


10

XDG基本目录规范是用户目录一个非常有趣的规格。除了以外,它还提供了良好的默认值XDG_RUNTIME_DIR

现在,我正在编写一个需要创建命名管道的软件。它是一个按用户的客户端-服务器框架(服务器有一个FIFO,每个客户端有一个FIFO)。

如果XDG_RUNTIME_DIR未定义,则我目前在/tmp—中使用每个用户的子目录,但是它不能确保所有指定的条件(即,以“目录的生存期必须绑定到正在登录的用户……”开头的段落)

是否/tmp/myserver-$USER足够好?

编辑

我在其他地方看到了一些建议:

  • . 是非常不能令人满意的(至少因为它不是绝对路径)。
  • 我还看到了/var/run/user/$USER-不错,但是该目录不存在(至少在运行Debian 测试的盒子上)

Answers:


4

/tmp已经被许多程序以类似的方式使用。在我的系统上,我可以看到/tmp/orbit-$USER(由Gnome的ORBit2使用)和/tmp/.X11-unix/(Xorg和X11)目录,其中包含大量管道,hmh,套接字。我敢肯定还有其他人,所以我认为您的所作所为没有错。请做好准备,因为它是世界可写的位置,所以恶意进程可能会劫持该位置(在写入该位置之前验证权限)。

我也建议$TMPDIR使用pam_mktemp的用户,因为该目录只能由用户访问。


PAM是正确的解决方案,谢谢!在Debian上,它称为libpam-tmpdir
cadrian 2012年

5

SystemD /run/user/$USER强制要求。

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

非特权写访问

非特权进程通常缺乏对大多数层次结构的写访问权限。

对于普通用户来说唯一的例外是/tmp/var/tmp/dev/shm,以及主目录$HOME(通常低于发现/home)和运行时目录$XDG_RUNTIME_DIR(下面找到/run/user的用户,这是所有可写的。

仅适用于非特权系统进程/tmp/var/tmp并且/dev/shm是可写的。如果无特权的系统进程需要在/var或中有一个可写的私有目录,/run建议您在删除守护程序代码中的特权之前创建该目录,或者在引导期间通过tmpfiles.d(5)片段或通过RuntimeDirectory= 服务单元的指令来创建该目录。(有关详细信息,请参见systemd.unit(5))。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.