cad*_*ian 12 desktop directory defaults
该XDG基本目录规范是用户目录一个非常有趣的规格。它还提供了良好的默认值,除了XDG_RUNTIME_DIR.
现在我正在编写一个需要创建命名管道的软件。它是一个基于用户的客户端-服务器框架(服务器有一个 FIFO,每个客户端有一个 FIFO)。
如果XDG_RUNTIME_DIR未定义,我目前正在使用每个用户的子目录/tmp- 但它不能确保所有指定的条件(即以“目录的生命周期必须绑定到正在登录的用户...”开头的段落)
是否/tmp/myserver-$USER足够好?
编辑
我在别处看到了一些建议:
. 很不满意(至少因为它不是绝对路径)。/var/run/user/$USER- 不错,但该目录不存在(至少在我运行 Debian测试的机器上)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) )。
/tmp已经被许多程序以类似的方式使用。在我的系统上,我可以看到/tmp/orbit-$USER(由 Gnome 的 ORBit2 使用)和/tmp/.X11-unix/(Xorg 和 X11)目录,其中包含大量管道、ehm、套接字。我相信还有其他人,所以我认为你所做的没有任何问题。请准备好,因为它是一个世界可写位置,恶意进程可以劫持该位置(在写入之前验证权限)。
我也可以向$TMPDIR那些使用pam_mktemp 的人推荐,因为这个目录只能由用户访问。