web-dev-qa-db-ja.com

XDG_RUNTIME_DIRのデフォルトは適切ですか?

XDGベースディレクトリ仕様 は、ユーザーディレクトリにとって非常に興味深い仕様です。また、XDG_RUNTIME_DIRを除いて、適切なデフォルト値が提供されます。

現在、名前付きパイプを作成する必要があるソフトウェアを書いています。これは、ユーザーごとのクライアントサーバーフレームワークです(サーバーにはFIFOおよびクライアントごとにFIFO)があります)。

XDG_RUNTIME_DIRが定義されていない場合、私は現在/tmpでユーザーごとのサブディレクトリを使用していますが、指定されたすべての条件を保証していません(つまり、で始まる段落)ディレクトリの有効期間は、ログインしているユーザーにバインドする必要があります… "

/tmp/myserver-$USERで十分ですか?

編集

他の場所でいくつかの提案を見ました:

  • .は非常に不十分です(少なくとも、絶対パスではないため)。
  • 私は/var/run/user/$USERも確認しました—悪くはありませんが、そのディレクトリは存在しません(少なくともDebianを実行している私のボックスにはtesting
10
cadrian

/tmpは、すでに多くのプログラムで同様の方法で使用されています。私のシステムでは/tmp/orbit-$USER(GnomeのORBit2で使用)および/tmp/.X11-unix/(XorgおよびX11)ディレクトリには、パイプ、ehm、ソケットがたくさんあります。他にも確かにあると思いますので、あなたのやっていることには何の問題もありません。それは世界の書き込み可能な場所なので、悪意のあるプロセスがその場所を乗っ取ることができることに注意してください(書き込む前に権限を確認してください)。

私もお勧めできます$TMPDIRpam_mktemp を使用するユーザー向け。このディレクトリにはユーザーのみがアクセスできます。

4
chutz

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)を参照)。

5
go2null

一意のIDを持つディレクトリ/tmp/service-$USER.idを作成します。たとえば、シェルで:

mktemp -d /tmp/service-"$USER".XXX
2
Selivanov Pavel