2

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

4

1 回答 1

4

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

替代sudo iptables-restore < iptables.rules.txt方法要简单得多,只需将其添加到您的/etc/sudoers文件中,告诉 sudo 不要仅询问此命令的密码:

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

djangouser运行 Django 进程的用户在哪里。

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

import iptdump
import subprocess

ipt = iptdump.Iptables()
proc = subprocess.Popen(['sudo', '/sbin/iptables-restore'],
                        stdin=subprocess.PIPE)
proc.communicate(ipt.dump())
于 2013-04-21T16:00:31.400 回答