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文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)