linux – 如何删除权限并仍在 varrun中清理我的pid文件?

linux – 如何删除权限并仍在 varrun中清理我的pid文件?,第1张

概述我有一个名为foo的守护进程.我的init脚本/etc/init.d/foo启动foo守护进程并将其pidfile存储在/var/run/foo.pid中,这似乎是标准位置.因为/etc/init.d/foo必须以root身份运行,所以在/ var / run中创建和删除pidfiles没有问题. foo守护程序实际上是程序/usr/sbin / foo,它旨在以root用户身份在init脚本中调 我有一个名为foo的守护进程.我的init脚本/etc/init.d/foo启动foo守护进程并将其pIDfile存储在/var/run/foo.pID中,这似乎是标准位置.因为/etc/init.d/foo必须以root身份运行,所以在/ var / run中创建和删除pIDfiles没有问题.

foo守护程序实际上是程序/usr/sbin / foo,它旨在以root用户身份在init脚本中调用,但随后立即将其权限删除给非特权foo用户.但是,我还希望这个/usr/sbin / foo程序在由于严重错误而退出时删除它的pID文件.但由于它已经删除了它的权限,它不再能够从/ var / run目录中删除文件.

我目前的方法是使用seteuID而不是setuID来删除我的权限,然后在退出之前立即重新提升权限,以便我可以从/ var / run中正确删除pIDfile.但是,我遇到了很多很多问题,各种库和外部程序在使用不同于eID的euID时会出现问题.

有没有其他方法可以实现这一目标?我想另一种选择是将我的pIDfile放在root和foo用户都可写的目录中.但是我们所有的其他pIDfiles都在/ var / run中,包括其他以无特权用户身份运行的程序的pIDfiles,所以我也想把foo.pID文件放在那里.

除了使用seteuID之外,还有什么方法可以做到这一点吗?

解决方法 不要将PID文件放在/var/run/foo.pID中,将其放在/var/run/foo/foo.pID中,并让用户foo和group foo拥有/ var / run / foo.这样您就可以在退出之前删除pID文件,而不必提高您的权限级别.

但请注意,这是一个糟糕的安全措施,因为允许您的非特权应用程序损坏其文件将打开一个安全漏洞:想象您的应用程序被劫持(毕竟如果没有预期应用程序可以删除权限的点遭到攻击?) – 现在,攻击者更新了pID文件并将sshd的pID号放在那里.现在,当系统范围的脚本(以root身份运行)尝试使用该pID文件停止应用程序时,它们将关闭sshd.这只是一个例子,有更多方法可以滥用您的系统.总而言之,应该在删除权限之前创建pID文件,并且应该由系统范围的脚本执行pID文件的清理. – 德米特里D.赫莱布尼科夫

更好的想法是切换到像systemd或Upstart这样的init系统,它不需要PID文件来管理服务.

总结

以上是内存溢出为你收集整理的linux – 如何删除权限并仍在/ var / run中清理我的pid文件?全部内容,希望文章能够帮你解决linux – 如何删除权限并仍在/ var / run中清理我的pid文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1038155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存