【问题标题】:Giving django app root access?授予 django 应用程序 root 访问权限?
【发布时间】:2013-04-21 12:53:52
【问题描述】:

我正在尝试使用 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 app root 权限,这样我就可以绕过 sudo 密码提示。

【问题讨论】:

    标签: python django root sudo


    【解决方案1】:

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

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

    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())
    

    【讨论】:

    • 嘿,谢谢这个工作,但有没有办法可以绕过 sudo 密码提示。
    • @Saad 在 /etc/sudoers 中的行应该会阻止密码提示,您确定代码是以 sudoers 中指定的用户身份运行的吗?
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2012-05-15
    • 2018-02-06
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多