给django app root访问权限?

时间:2013-04-21 12:53:52

标签: python django root sudo

我正在尝试使用django构建一个api,它应该使用POST参数来改变iptables。我使用的是django 1.4,djangorestframeworkpython-iptables。我面临的问题是python-iptables需要root访问权才能更改iptables规则。我可以通过执行$ sudo python来更改iptables规则,并且从python shell我可以更改这些规则。此外,我可以通过使用iptdump模块更改这些规则,该模块接收iptables参数并创建我以后可以保存在文件(iptables.rules.txt)中的规则并使用fabric local('sudo iptables-restore < iptables.rules.txt')。但这将始终提示用户输入root密码。有没有办法可以给django应用程序root权限,以便我可以绕过sudo密码提示。

1 个答案:

答案 0 :(得分:3)

如果您确实需要以root身份运行应用程序的一部分,则可以将其重写为守护程序,并按照this answer中的建议从主Django应用程序与其进行通信。如果下面的替代方案不符合您的要求,我只会推荐它。

替代sudo iptables-restore < iptables.rules.txt要简单得多,只需告诉sudo不要通过将此密码添加到 / etc / sudoers 文件中来获取此密码的密码:

djangouser ALL=(ALL) NOPASSWD: /sbin/iptables-restore

其中djangouser是Django进程运行的用户。

编辑:您可以通过将新的iptables直接发送到iptables-restore进程来避免编写中间文件:

import iptdump
import subprocess

ipt = iptdump.Iptables()
proc = subprocess.Popen(['sudo', '/sbin/iptables-restore'],
                        stdin=subprocess.PIPE)
proc.communicate(ipt.dump())