サービスでPrivateTmp = trueを使用すると、サービスIDはどこから来ますか?

サービスでPrivateTmp = trueを使用すると、サービスIDはどこから来ますか?

systemdサービスを構成すると、PrivateTmp=trueサービスは個人用tmpディレクトリを使用します。代わりに、/tmpこれらのサービスは次のディレクトリを使用します。

/tmp/systemd-private-94ebb0a353a34259b6c794fe503c35f8-colord.service-Rb11Zg/tmp

94ebb0a353a34259b6c794fe503c35f8開始ID(/proc/sys/kernel/random/boot_id)で、次の6桁のIDは何ですかservice-?どのファイルに保存されていますか?

答え1

systemd-privateディレクトリ名の末尾にある6つのランダム文字は、ディレクトリ名が一意であり、作成時に既存のディレクトリと競合しないようにするためです。 systemd v245以降、これは一意の一時ディレクトリを作成し、一意性を確保するために任意のサフィックスを生成するsetup_one_tmp_dir()関数src/core/namespace.c呼び出しです。mkdtemp()mkdtemp()

特定のデバイスの現在の一時ディレクトリパスをsystemdから直接抽出する方法が見つかりませんでしたが、本当に必要な場合は、次の2つの手順でその情報を取得できます。

  • PIDを実行しsystemctl show some.service -p MainPIDて抽出します(またはセル内の1つのプロセスのPIDを取得します)。
  • 興味/proc/ThePID/mountinfoのあるインストールを検索し、そこからパスを抽出します。/tmp/var/tmp

機械装置の組み合わせに複数のsystemd-privateディレクトリーがある場合にのみ、これを実行する必要があります。 systemdは何らかの理由で実行が停止したデバイスのディレクトリを削除するため、それ自体はまれです。もちろん、誰かがシステム化された個人ディレクトリを作成して混乱を招く可能性があるため、セキュリティがsystemd-private-$bootID-some.service-*懸念される場合にのみこれを実行しないでください。

関連情報