命令行创建运行容器(docker run / docker pull),需要做危险命令校验,存在危险命令则不执行 @param get: @return:
(self, get)
| 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, "命令已执行完毕!") |