在服务中使用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),后面的六个字符长的 ID 是什么service-?它存储在哪个文件中?

答案1

systemd-private 目录名称末尾的六个随机字符只是为了保证目录名称是唯一的,并且在创建时不会与任何现有目录冲突。从 systemd v245 开始,这是setup_one_tmp_dir()src/core/namespace.c.该函数调用mkdtemp()创建一个唯一的临时目录,并mkdtemp()生成随机后缀以保证唯一性。

我还没有找到直接从 systemd 提取给定单元的当前临时目录路径的方法,但如果您确实需要它,您可以通过以下两个步骤获取该信息:

  • 运行systemctl show some.service -p MainPID并提取PID(或以其他方式获取单元中任何一个进程的PID)
  • 搜索/proc/ThePID/mountinfo您感兴趣的安装(/tmp/var/tmp)并从那里提取路径。

请注意,只有当机器单元组合存在多个 systemd-private 目录时,您才需要执行此操作。这本身是一种罕见的情况,因为 systemd 会删除因任何原因停止运行的单元的这些目录。当然,有人可能会创建一个 systemd 私有目录来迷惑您,所以不要只systemd-private-$bootID-some.service-*在考虑安全性时才这样做。

相关内容