MCPcopy Create free account
hub / github.com/aaPanel/BaoTa / run_cmd

Method run_cmd

class/btdockerModel/dockerBase.py:81–117  ·  view source on GitHub ↗

命令行创建运行容器(docker run / docker pull),需要做危险命令校验,存在危险命令则不执行 @param get: @return:

(self, get)

Source from the content-addressed store, hash-verified

79
80 # 命令行创建 拉取容器
81 def run_cmd(self, get):
82 """
83 命令行创建运行容器(docker run / docker pull),需要做危险命令校验,存在危险命令则不执行
84 @param get:
85 @return:
86 """
87 import re
88 if not hasattr(get, 'cmd'):
89 return public.returnMsg(False, '请传入cmd参数错误')
90
91 if "docker run" not in get.cmd and "docker pull" not in get.cmd:
92 return public.returnMsg(False, '只能执行docker run或docker pull命令')
93
94 danger_cmd = ['rm', 'rmi', 'kill', 'stop', 'pause', 'unpause', 'restart', 'update', 'exec', 'init',
95 'shutdown', 'reboot', 'chmod', 'chown', 'dd', 'fdisk', 'killall', 'mkfs', 'mkswap', 'mount',
96 'swapoff', 'swapon', 'umount', 'userdel', 'usermod', 'passwd', 'groupadd', 'groupdel',
97 'groupmod', 'chpasswd', 'chage', 'usermod', 'useradd', 'userdel', 'pkill']
98
99 danger_symbol = ['&', '&&', '||', '|', ';']
100
101 for d in danger_cmd:
102 if get.cmd.startswith(d) or re.search(r'\s{}\s'.format(d), get.cmd):
103 return public.returnMsg(False, '存在危险命令: [{}],不允许执行!'.format(d))
104
105 for d in danger_symbol:
106 if d in get.cmd:
107 return public.returnMsg(False, '存在危险符号: [{}],不允许执行!'.format(d))
108
109 os.system("echo -n > {}".format(self._rCmd_log))
110 os.system("nohup {} >> {} 2>&1 && echo 'bt_successful' >> {} || echo 'bt_failed' >> {} &".format(
111 get.cmd,
112 self._rCmd_log,
113 self._rCmd_log,
114 self._rCmd_log,
115 ))
116
117 return public.returnMsg(True, "命令已执行完毕!")

Callers

nothing calls this directly

Calls 3

returnMsgMethod · 0.80
searchMethod · 0.45
formatMethod · 0.45

Tested by

no test coverage detected