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


10

XDGベースディレクトリ仕様は、ユーザディレクトリのための非常に興味深いスペックです。また、以外の適切なデフォルト値も提供しますXDG_RUNTIME_DIR

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

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

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

編集する

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

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

回答:


4

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

このディレクトリにはユーザーしかアクセスできない$TMPDIRため、pam_mktempを使用するユーザーにもお勧めします。


PAMは正しいソリューションです、ありがとう!Debianではlibpam-tmpdirと呼ばれます
cadrian

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)を参照してください)。


2

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

mktemp -d /tmp/service-"$USER".XXX

1
ユーザーの最初のログインから最後のログアウトまで同じディレクトリが使用されるという要件をどのようにして確実にしますか?
カドリアン

うーん... symlink〜user / .service / tmp_dirを作成します。リンクされたディレクトリが存在しない場合は、新規作成
Selivanov Pavel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.