在 /var/run 中写入 PID 文件需要什么权限?

在 /var/run 中写入 PID 文件需要什么权限?

在 Ubuntu 上:

touch: cannot touch `/var/run/test.pid': Permission denied

我正在启动 start-stop-daemon,并喜欢将 PID 文件写入 /var/run start-stop-daemon 以 my-program-user 身份运行

/var/run setting is drwxr-xr-x  9 root  root

我想避免将 my-program-user 置于 root 组中。

答案1

默认情况下,您只能以有效用户 ID 为 0 的用户(即 root 用户)写入 /var/run。这是有充分理由的,因此无论您做什么,都不要去更改 /var/run 的权限...而是以 root 身份创建一个目录在下面/var/运行:

# mkdir /var/run/mydaemon

然后将其所有权更改为您希望运行流程的用户/组:

# chown myuser:myuser /var/run/mydaemon

现在指定使用 /var/run/mydaemon 而不是 /var/run。

您可以随时以相关用户的身份运行测试来测试这一点。

答案2

mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

这将不起作用,因为它将在下次重启时丢失(/var/run在 Ubuntu 上是 tmpfs)。

唯一可行的解​​决方案是将 mkdir 和 chmod 作为启动脚本的一部分运行。

答案3

在 systemd 管理的发行版(例如 Ubuntu)中,不需要任何权限,并且不需要任何权限。

在这样的系统上,根据设计,所有可能需要此类访问权限的非交互式服务要么从 root 拥有的进程启动,要么使用每个用户的运行时目录。所有权限问题都可以且将由管理器服务处理。

任何系统级程序都不会直接写入/run,而是由系统管理器为其配置一个可写目录,只有后者才有权限这样做。文件中的相关配置identifier.service如下

[Service]
RuntimeDirectory=identifier

当作为系统服务启动时,/run/identifier将创建一个目录。或者,当从非 root 用户启动时,将创建一个目录/run/[UID]/identifier。默认情况下,这两个目录都设置为同时启动的程序能够写入其中,并通过提供环境变量与启动的程序进行通信RUNTIME_DIRECTORY

答案4

那么在 /var/run 上使用“粘性”位怎么样?

修改配置文件 +t /var/run ?

可能会搞乱一些其他应用程序,但这似乎是另一种解决方案。

不过,我现在坚持创建一个单独的 /var/run 文件夹。

相关内容