linux - 以非 root 用户身份运行的系统守护进程的 PID 文件的首选位置

标签 linux security locking daemon pid

我的问题与 this question 有关,但有问题的进程是从 cron 运行的,并且由非 root 用户运行。因此,许多用户并没有真正的主目录(或者他们的主目录指向 /usr/share/package_name,这不是 PID 文件的理想位置)。

存储在 /var/run 中是有问题的,因为这个目录除了 root 之外是不可写的。

我可以使用 /tmp,但我想知道出于安全原因这是否是理想选择。

我可以安排一个启动脚本在 /var/run 中创建一个目录,该目录由适当的用户拥有(我不能在包安装时这样做,因为 /var 通常作为 tmpfs 安装,因此不是持久的)。

此处的最佳做法是什么?

最佳答案

好问题 :),我现在也有同样的问题。我不确定这是否是正确的答案,但我希望它能有所帮助,我也希望收到反馈。

我四处搜索,发现将每个用户守护程序注册为 dbus 服务是一个很好的解决方案。 dbus 可以确保服务只运行一次。不需要 pid 文件。

另一种解决方案(我当前的)是在如下目录中创建 PID 文件:

$HOME/.yourdaemon/pid

在你发表评论后我意识到,你不能给家里写信。我建议查看 dbus

更新

我有一个想法。如果您正在使用/tmp,但正在寻找一个名为 yourdaemon.pid.UNIQUE_KEY 且由守护进程的用户拥有的 pid 文件怎么办?这应该可以正常工作。

UNIQUE_KEY 应该是随机生成的(最好使用 tempnam,因为它是竞争条件证明)。

关于linux - 以非 root 用户身份运行的系统守护进程的 PID 文件的首选位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905997/

相关文章:

linux - 关闭套接字的最佳实践。 SO_LINGER 或关闭/关闭?

进行文件操作时,C++ 程序在 Windows 和 Linux 上运行速度慢得多?

security - qt应用程序激活

security - GRPC Java 的 SSL 错误

c# - 静态类的公共(public)静态成员(属性)是线程安全的

c++ - boost中有没有一个函数可以查找有多少人正在等待互斥锁?

linux - 为puppet中的用户设置默认密码管理

linux tc,u32过滤奇怪错误

security - 如何使用 SOPS(Secrets OPerationS)和 Go 加密从 JSON 文件导入的值?

android - 要在屏幕锁定时启动我的应用程序?