我需要编写一个小的wsgi app来操作iptables。我在Debian上用python-iptables包使用nginx + uwsgi。
uwsgi默认运行为www-data用户,所以如果我尝试从我的应用程序访问iptables,我得到iptc.ip4tc.IPTCError: can't initialize filter: Permission denied (you must be root)
。
除了以root身份运行整个wsgi应用程序之外,是否有解决此问题的方法?如果我想将我的应用程序与Django集成,我该怎么办(我绝对不想以root身份运行所有Django的东西)?
答案 0 :(得分:0)
您可以尝试将需要超级用户权限的所有功能扩展到root(script.py
)所拥有的单独脚本(例如chown root script.py
)中,允许其执行(chmod u+x script.py
),然后设置setuid以允许该文件的执行权限具有对其他用户(chmod u+s script.py
)的root权限。
然后您应该能够使用子进程和www-data权限从wsgi应用程序调用该脚本。