[英]NOT root user execute iptables shell by python
我写一些代码来通过python执行iptables command
。 这是代码:
import subprocess
def check_output(*popenargs, **kwargs):
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be overridden.')
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise subprocess.CalledProcessError(retcode, cmd)
return output
def accept_port(port):
try:
cmd = r"iptables -A INPUT -p tcp --dport {0} -j ACCEPT && iptables -A OUTPUT -p tcp --sport {0} -j ACCEPT".format(port)
output = check_output(cmd, shell=True)
return True
except Exception:
return False
if __name__ == "__main__":
accept_port(1234)
当我由root用户运行代码时,一切正常。 但是,当我使用用户apache
执行上述代码时,它失败了。 如果我想通过用户apache
而非root
执行代码,该怎么办? 我认为iptables command
必须由root user
执行。 有人可以给些建议吗? 非常感谢!
不要这样 您的服务器现已开放接受攻击。
apache用户不是一般用途,其设计和限制只能由Apache进程使用。
相反,使用您的Web应用程序触发或安排任务,并以不同的非root用户身份运行另一个进程 ,并从此队列中读取任务并执行它们。
然后,使用sudo
只能允许某些命令由该单独的用户执行。 这样,您的apache用户就没有运行命令的特权,并且您正在利用操作系统的安全角色来隔离操作。
某些命令仅限于root用户是有原因的:)
您可以使用sudo
命令,该命令允许任何用户执行一些root
命令,请在此处查看如何配置sudo
以供您使用。
如果您对root
执行有其他疑问,我建议您尝试https://unix.stackexchange.com/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.