【发布时间】:2019-12-29 08:17:22
【问题描述】:
我想接收来自用户的 shell 命令,并以没有实际权限的 Linux 用户身份运行它。
今天我正在这样做:sudo -u {username} 'sh' '-c' $'{user_command}'
这样安全吗?
【问题讨论】:
标签: bash shell scripting heredoc
我想接收来自用户的 shell 命令,并以没有实际权限的 Linux 用户身份运行它。
今天我正在这样做:sudo -u {username} 'sh' '-c' $'{user_command}'
这样安全吗?
【问题讨论】:
标签: bash shell scripting heredoc
手动转义' 听起来很脆弱。我会将命令放入文件中并将该文件作为脚本执行。这避免了设计上的命令注入。
进一步注意,即使是非特权帐户也可以读取主机系统上的许多文件,例如 /etc/passwd 或来自 /proc 的信息。例如,如果他们运行ps,他们可以看到来自其他用户的命令。
因此,我建议在容器中运行命令。安装docker并运行:
# let's say you stored the command in "user.sh" ...
docker run -v "${PWD}:/scripts" -it image_name bash /scripts/user.sh
与安全相关的另一件事是人们可以尝试 (a) DOS 主机或 (b) DOS 其他机器或以不同的方式攻击它们。对于 (a),确保在 docker 机器上设置了非常严格的资源限制(mem、cpu、procs 数等)。对于 (b),禁止容器的网络访问。
【讨论】: