Django和根进程

发布于 2021-01-29 16:15:25

在我的Django项目中,我需要能够使用ICMP ping检查LAN上的主机是否已 启动
。我找到了这个SO问题该问题回答了如何ping
Python中的某些内容,并且这个SO问题链接到了解释如何使用sodoers文件的资源。

那个设定

一种Device模型在LAN上存储主机的IP地址,然后将新Device实例添加到数据库(通过自定义视图,而不是管理员)后,我设想检查设备是否通过AJAX调用来响应ping。公开此功能的API。

问题

但是(从第一个SO问题中建议的库的文档字符串中得出)“请注意,只能从以root用户身份运行的进程发送ICMP消息。”

我不希望以root用户身份运行Django,因为这是不好的做法。但是,该过程的这一部分(发送和ICMP
ping)需要以root用户身份运行。如果使用Django视图,我希望发送ping数据包以测试主机的活动性,则Django本身必须以root用户身份运行,因为这是调用ping的过程。

解决方案

这些是我能想到的解决方案, 我的问题是,除了这些方法以外,还有没有其他更好的方法可以仅以root身份执行Django项目的选定部分

  1. 以root身份运行Django(请不要!)
  2. 将“ ping请求”放入队列中,其他进程(以root用户身份运行)可以定期检查和执行。也许像芹菜

有没有更简单的方法?

我想要类似“以root身份运行Django”的库,这可能吗?

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    绝对没有办法,不要以root身份运行Django代码!

    我将以根用户身份运行守护程序(用Python编写,为什么不这样做),然后在Django实例和守护程序之间运行IPC。只要您确定验证内容并正确处理它(例如,subprocess.call与数组等配合使用)并且仅传递数据(而不是执行命令),就可以了。

    这是使用web.py的示例客户端和服务器

    服务器:http//gist.github.com/788639
    客户端:http//gist.github.com/788658

    您需要安装webpy.org,但是还是值得的。如果您可以将IP(或主机名)硬连线到服务器并删除参数,那就更好了。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看