在/ var / run中写入PID文件有什么权限


51

的Ubuntu

touch:无法触摸`/var/run/test.pid':权限被拒绝

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

/ var / run设置为drwxr-xr-x 9 root root

我想避免将我的程序用户放在根组中。

Answers:


71

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

# mkdir /var/run/mydaemon

然后将其所有权更改为您要在其下运行过程的用户/组:

# chown myuser:myuser /var/run/mydaemon

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

您始终可以通过以相关用户身份运行测试来对此进行测试。


5
这对我来说很好,但是当我重新启动服务器时,该/var/run/mydaemon目录消失了。
myborobudur

17
这不是一个完整的答案,在Ubuntu上,默认情况下/ var / run是tmpfs。每次服务器启动时,都需要重新运行mkdir和chown命令。
蒂姆(Tim)

1
@Tim如何编辑答案并完成答案?
kaiser

如果你正在处理守护再用干净的解决办法是作为描述的路径在/ var /运行/ mydaemon添加到systemd单元文件在这里。一种更简单的解决方案是将mkdir和chown命令添加到init.d脚本中(如果存在)
odedfos,

1
一个更好的广泛答案是在这里:superuser.com/a/1127720/71795一个似乎很优雅的错误答案在这里:stackoverflow.com/a/5174433。摘要:使用/tmp~
蒂姆(Tim)


3

你可以试试看 创建目录/ var / run / test /,然后在程序运行时将该目录的权限更改为同一用户。“ chown / var / run / test /”。现在,在您的应用程序中,将PID文件的位置更改为/var/run/test/test.pid。这应该使事情为您工作。


2

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

chmod + t / var / run?

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

不过,我将继续创建一个单独的/ var / run文件夹。


1

中的条目/etc/permissions是永久性的。在此处输入一个条目,以使目录的所有权和权限永久化。


-6

为了避免将程序用户置于根组中,请允许其他用户进行写访问:

# chmod 757

3
切勿在/ var / run上执行chmod 757!这将导致严重的安全问题
米歇尔(Michel)2010年

1
这是一个可怕的主意。这可能会导致潜在的大规模安全问题
Tom O'Connor 2010年

即使我们忽略了安全性问题,chmod 757也只能在下一次重新启动之前起作用。很抱歉创建新答案,但似乎无法回复其他评论。
弗拉基米尔·尼科里奇

@michel,笔者从来没有说过做一个chmod/var/run。作者可能将其用于应用程序子目录。不知道到底有什么大惊小怪的。
Acumenus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.