XDGベースディレクトリ仕様 は、ユーザーディレクトリにとって非常に興味深い仕様です。また、XDG_RUNTIME_DIR
を除いて、適切なデフォルト値が提供されます。
現在、名前付きパイプを作成する必要があるソフトウェアを書いています。これは、ユーザーごとのクライアントサーバーフレームワークです(サーバーにはFIFOおよびクライアントごとにFIFO)があります)。
XDG_RUNTIME_DIR
が定義されていない場合、私は現在/tmp
でユーザーごとのサブディレクトリを使用していますが、指定されたすべての条件を保証していません(つまり、で始まる段落)ディレクトリの有効期間は、ログインしているユーザーにバインドする必要があります… ")
/tmp/myserver-$USER
で十分ですか?
編集
他の場所でいくつかの提案を見ました:
.
は非常に不十分です(少なくとも、絶対パスではないため)。/var/run/user/$USER
も確認しました—悪くはありませんが、そのディレクトリは存在しません(少なくともDebianを実行している私のボックスにはtesting)/tmp
は、すでに多くのプログラムで同様の方法で使用されています。私のシステムでは/tmp/orbit-$USER
(GnomeのORBit2で使用)および/tmp/.X11-unix/
(XorgおよびX11)ディレクトリには、パイプ、ehm、ソケットがたくさんあります。他にも確かにあると思いますので、あなたのやっていることには何の問題もありません。それは世界の書き込み可能な場所なので、悪意のあるプロセスがその場所を乗っ取ることができることに注意してください(書き込む前に権限を確認してください)。
私もお勧めできます$TMPDIR
pam_mktemp を使用するユーザー向け。このディレクトリにはユーザーのみがアクセスできます。
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)を参照)。
一意のIDを持つディレクトリ/tmp/service-$USER.idを作成します。たとえば、シェルで:
mktemp -d /tmp/service-"$USER".XXX